From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?B?IldlaS1ZaW4gQ2hlbiAo6Zmz5aiB5bC5KSI=?= Subject: [PATCH] git-svn: Fix time zone in --localtime Date: Mon, 19 Dec 2011 16:11:05 +0800 Message-ID: <4EEEF199.4000404@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: Pete Harlan , Eric Wong , gitster@pobox.com To: git@vger.kernel.org X-From: git-owner@vger.kernel.org Mon Dec 19 09:11:17 2011 Return-path: Envelope-to: gcvg-git-2@lo.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1RcYJY-0003ga-SS for gcvg-git-2@lo.gmane.org; Mon, 19 Dec 2011 09:11:17 +0100 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752396Ab1LSILL convert rfc822-to-quoted-printable (ORCPT ); Mon, 19 Dec 2011 03:11:11 -0500 Received: from mail-qw0-f46.google.com ([209.85.216.46]:50739 "EHLO mail-qw0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752053Ab1LSILK (ORCPT ); Mon, 19 Dec 2011 03:11:10 -0500 Received: by qadc12 with SMTP id c12so2119415qad.19 for ; Mon, 19 Dec 2011 00:11:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:cc:subject :content-type:content-transfer-encoding; bh=dzNJdCj4Mat/2PtqLxO/AzIyqb5Gul7qKeOrI7e+94s=; b=Ay5kx1UI+Lu2bFH4Aumi2qsstDw+g06iJABzcTDZtLKhexwTa/opTsOLaIYiWUA8EE FCYM1m92S24LJU4cEh1Z4YWojnZEKayb2JG87vkh0QT4oNp6/Kq1sKR6tWZlINjLRCeF ZzdR7yKYNW3RqeWdtluQ6sg4vdMm+07qW6WJE= Received: by 10.224.189.3 with SMTP id dc3mr23353870qab.38.1324282270081; Mon, 19 Dec 2011 00:11:10 -0800 (PST) Received: from [0.0.0.0] (ip133.67-202-80.static.steadfastdns.net. [67.202.80.133]) by mx.google.com with ESMTPS id i10sm38673308qac.17.2011.12.19.00.11.07 (version=SSLv3 cipher=OTHER); Mon, 19 Dec 2011 00:11:09 -0800 (PST) User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.24) Gecko/20100411 Lightning/0.9 Thunderbird/2.0.0.24 Mnenhy/0.7.6.0 Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: Use numerical form of time zone to replace alphabetic time zone abbreviation generated by "%Z". "%Z" is not portable and contain ambiguity for many areas. For example, CST could be "Central Standard Time" (GMT-0600) and "China Standard Time" (GMT+0800). Alphabetic time zone abbreviation is meant for human readability, not for specifying a time zone for machines. =46ailed case can be illustrated like this in linux shell: > echo $TZ Asia/Taipei > date +%Z CST > env TZ=3D`date +%Z` date Mon Dec 19 06:03:04 CST 2011 > date Mon Dec 19 14:03:04 CST 2011 Signed-off-by: Wei-Yin Chen (=E9=99=B3=E5=A8=81=E5=B0=B9) --- git-svn.perl | 18 +++++++++++------- 1 files changed, 11 insertions(+), 7 deletions(-) diff --git a/git-svn.perl b/git-svn.perl index e30df22..f0b6340 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -2029,6 +2029,7 @@ use Carp qw/croak/; use File::Path qw/mkpath/; use File::Copy qw/copy/; use IPC::Open3; +use Time::Local; use Memoize; # core since 5.8.0, Jul 2002 use Memoize::Storable; @@ -3287,6 +3288,14 @@ sub get_untracked { \@out; } +sub get_tz { + # some systmes don't handle or mishandle %z, so be creative. + my $t =3D shift || time; + my $gm =3D timelocal(gmtime($t)); + my $sign =3D qw( + + - )[ $t <=3D> $gm ]; + return sprintf("%s%02d%02d", $sign, (gmtime(abs($t - $gm)))[2,1]); +} + # parse_svn_date(DATE) # -------------------- # Given a date (in UTC) from Subversion, return a string in the format @@ -3319,8 +3328,7 @@ sub parse_svn_date { delete $ENV{TZ}; } - my $our_TZ =3D - POSIX::strftime('%Z', $S, $M, $H, $d, $m - 1, $Y - 1900); + my $our_TZ =3D get_tz(); # This converts $epoch_in_UTC into our local timezone. my ($sec, $min, $hour, $mday, $mon, $year, @@ -5994,7 +6002,6 @@ package Git::SVN::Log; use strict; use warnings; use POSIX qw/strftime/; -use Time::Local; use constant commit_log_separator =3D> ('-' x 72) . "\n"; use vars qw/$TZ $limit $color $pager $non_recursive $verbose $oneline %rusers $show_commit $incremental/; @@ -6104,11 +6111,8 @@ sub run_pager { } sub format_svn_date { - # some systmes don't handle or mishandle %z, so be creative. my $t =3D shift || time; - my $gm =3D timelocal(gmtime($t)); - my $sign =3D qw( + + - )[ $t <=3D> $gm ]; - my $gmoff =3D sprintf("%s%02d%02d", $sign, (gmtime(abs($t - $gm)))[2,= 1]); + my $gmoff =3D get_tz($t); return strftime("%Y-%m-%d %H:%M:%S $gmoff (%a, %d %b %Y)", localtime(= $t)); }