Skip to content

Commit

Permalink
cvsimport: work around perl tzset issue
Browse files Browse the repository at this point in the history
On many platforms, the first invocation of localtime_r will
check $TZ in the environment, but subsequent invocations
will use a cached value. That means that setting $ENV{TZ} in
the middle of the program may or may not have an effect on
later calls to localtime.  Perl 5.10.0 and later handles
this automatically for us, but we try to remain portable
back to 5.8. Work around it by calling tzset ourselves.
  • Loading branch information
Jeff King committed Nov 4, 2012
1 parent fb2c984 commit c2b3af0
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions git-cvsimport.perl
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@
use Time::Local;
use IO::Socket;
use IO::Pipe;
use POSIX qw(strftime dup2 ENOENT);
use POSIX qw(strftime tzset dup2 ENOENT);
use IPC::Open2;

$SIG{'PIPE'}="IGNORE";
$ENV{'TZ'}="UTC";
set_timezone('UTC');

our ($opt_h,$opt_o,$opt_v,$opt_k,$opt_u,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_P, $opt_s,$opt_m,@opt_M,$opt_A,$opt_S,$opt_L, $opt_a, $opt_r, $opt_R);
my (%conv_author_name, %conv_author_email, %conv_author_tz);
Expand Down Expand Up @@ -99,6 +99,15 @@ ($)
close ($f);
}

# Versions of perl before 5.10.0 may not automatically check $TZ each
# time localtime is run (most platforms will do so only the first time).
# We can work around this by using tzset() to update the internal
# variable whenever we change the environment.
sub set_timezone {
$ENV{TZ} = shift;
tzset();
}

# convert getopts specs for use by git config
my %longmap = (
'A:' => 'authors-file',
Expand Down Expand Up @@ -854,9 +863,9 @@ sub commit {
}
}

$ENV{'TZ'}=$author_tz;
set_timezone($author_tz);
my $commit_date = strftime("%s %z", localtime($date));
$ENV{'TZ'}="UTC";
set_timezone('UTC');
$ENV{GIT_AUTHOR_NAME} = $author_name;
$ENV{GIT_AUTHOR_EMAIL} = $author_email;
$ENV{GIT_AUTHOR_DATE} = $commit_date;
Expand Down

0 comments on commit c2b3af0

Please sign in to comment.