[perl-DateTime-TimeZone] Parse local time zone definition from /etc/localtime
Petr Pisar
ppisar at fedoraproject.org
Tue Sep 2 15:43:50 UTC 2014
commit 8a141164fd1007b28d2e6b718eac0366ce209c77
Author: Petr Písař <ppisar at redhat.com>
Date: Tue Sep 2 17:15:59 2014 +0200
Parse local time zone definition from /etc/localtime
...etc-localtime-by-DateTime-TimeZone-Tzfile.patch | 78 ++++++++++++++++++++
perl-DateTime-TimeZone.spec | 12 +++-
2 files changed, 89 insertions(+), 1 deletions(-)
---
diff --git a/DateTime-TimeZone-1.74-Parse-etc-localtime-by-DateTime-TimeZone-Tzfile.patch b/DateTime-TimeZone-1.74-Parse-etc-localtime-by-DateTime-TimeZone-Tzfile.patch
new file mode 100644
index 0000000..d6ae0b3
--- /dev/null
+++ b/DateTime-TimeZone-1.74-Parse-etc-localtime-by-DateTime-TimeZone-Tzfile.patch
@@ -0,0 +1,78 @@
+From ddb36a17bd9ab30c33532684af85c71cd5c04071 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar at redhat.com>
+Date: Mon, 1 Sep 2014 17:37:12 +0200
+Subject: [PATCH] Parse /etc/localtime by DateTime::TimeZone::Tzfile
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+If there is valid /etc/localtime, then the system has configured local
+time. If the file is not a symlink to /usr/share/zoneinfo or a copy
+from there, then it's still a valid configuration. The only issue is
+one cannot know the time zone name (Unfortunately, the time zone
+abbreviations are ambiguous.)
+
+This patch implements this scenario and caused returning
+ a DateTime::TimeZone::Tzfile object instead of dying with
+"Cannot determine local time zone" message.
+
+Signed-off-by: Petr Písař <ppisar at redhat.com>
+---
+ lib/DateTime/TimeZone/Local/Unix.pm | 27 +++++++++++++++++++++++++++
+ 1 file changed, 27 insertions(+)
+
+diff --git a/lib/DateTime/TimeZone/Local/Unix.pm b/lib/DateTime/TimeZone/Local/Unix.pm
+index 71d7d4e..3c24ad0 100644
+--- a/lib/DateTime/TimeZone/Local/Unix.pm
++++ b/lib/DateTime/TimeZone/Local/Unix.pm
+@@ -14,6 +14,7 @@ sub Methods {
+ FromEtcTIMEZONE
+ FromEtcSysconfigClock
+ FromEtcDefaultInit
++ FromEtcLocaltimeContent
+ );
+ }
+
+@@ -233,6 +234,25 @@ sub _ReadEtcDefaultInit {
+ }
+ }
+
++sub FromEtcLocaltimeContent {
++ my $class = shift;
++
++ my $lt_file = $class->_EtcFile('localtime');
++ return unless -r $lt_file && -s $lt_file && ! -l $lt_file;
++
++ my $tz;
++ {
++ local $@;
++ local $SIG{__DIE__};
++ $tz = eval {
++ require DateTime::TimeZone::Tzfile;
++ DateTime::TimeZone::Tzfile->new($lt_file);
++ };
++ }
++
++ return $tz if $tz;
++}
++
+ 1;
+
+ # ABSTRACT: Determine the local system's time zone on Unix
+@@ -307,6 +327,13 @@ a time zone name.
+ If this file exists, it is opened and we look for a line starting like
+ "TZ=...". If this is found, it should indicate a time zone name.
+
++=item * F</etc/localtime> content
++
++If this file is not a symlink, it's parsed by
++a L<DateTime::TimeZone::Tzfile> to retrieve the time zone offset
++definition. No time zone name will be defined. This is usefull if the
++file does not present in the system time zone database.
++
+ =back
+
+ =head1 AUTHOR
+--
+1.9.3
+
diff --git a/perl-DateTime-TimeZone.spec b/perl-DateTime-TimeZone.spec
index d0cf13c..d1dd082 100644
--- a/perl-DateTime-TimeZone.spec
+++ b/perl-DateTime-TimeZone.spec
@@ -1,11 +1,14 @@
Name: perl-DateTime-TimeZone
Version: 1.74
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Time zone object base class and factory
License: GPL+ or Artistic
Group: Development/Libraries
URL: http://search.cpan.org/dist/DateTime-TimeZone/
Source0: http://www.cpan.org/authors/id/D/DR/DROLSKY/DateTime-TimeZone-%{version}.tar.gz
+# Parse local time zone definition from /etc/localtime as before giving up,
+# bug #1135981, CPAN RT#55029
+Patch0: DateTime-TimeZone-1.74-Parse-etc-localtime-by-DateTime-TimeZone-Tzfile.patch
BuildArch: noarch
BuildRequires: perl
BuildRequires: perl(base)
@@ -40,6 +43,9 @@ BuildRequires: perl(warnings)
# not automatically detected
Requires: perl(File::Compare)
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
+# Require optional DateTime::TimeZone::Tzfile to work in mock after tzdata
+# upgrade, bug #1135981
+Requires: perl(DateTime::TimeZone::Tzfile)
%{?filter_setup:
%filter_from_requires /^perl(Win32/d
@@ -73,6 +79,7 @@ offset from GMT for a given time period.
%prep
%setup -q -n DateTime-TimeZone-%{version}
+%patch0 -p1
%build
%{__perl} Makefile.PL INSTALLDIRS=vendor
@@ -94,6 +101,9 @@ make test
%{_mandir}/man3/*
%changelog
+* Tue Sep 02 2014 Petr Pisar <ppisar at redhat.com> - 1.74-2
+- Parse local time zone definition from /etc/localtime (bug #1135981)
+
* Tue Sep 02 2014 Petr Pisar <ppisar at redhat.com> - 1.74-1
- 1.74 bump (updates to 2014g Olson database)
More information about the perl-devel
mailing list