diff options
author | Junio C Hamano <gitster@pobox.com> | 2015-02-26 14:03:57 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-02-26 14:03:57 -0800 |
commit | 28ed7b02dd726bcc5c8d3fc316c965a3c0f05c04 (patch) | |
tree | 89b62e09fe810cacfa218c4ca3b3bee2d4a90cb2 /perl | |
parent | git-svn: lazy load some modules (diff) | |
parent | Git::SVN::*: avoid premature FileHandle closure (diff) | |
download | tgif-28ed7b02dd726bcc5c8d3fc316c965a3c0f05c04.tar.xz |
Merge branch 'svn-maint-fixes' into svn-fixes
* svn-maint-fixes:
Git::SVN::*: avoid premature FileHandle closure
git-svn: fix localtime=true on non-glibc environments
Diffstat (limited to 'perl')
-rw-r--r-- | perl/Git/SVN.pm | 3 | ||||
-rw-r--r-- | perl/Git/SVN/Fetcher.pm | 8 | ||||
-rw-r--r-- | perl/Git/SVN/Ra.pm | 3 |
3 files changed, 13 insertions, 1 deletions
diff --git a/perl/Git/SVN.pm b/perl/Git/SVN.pm index afa562c8b9..152fb7e927 100644 --- a/perl/Git/SVN.pm +++ b/perl/Git/SVN.pm @@ -12,6 +12,7 @@ use File::Path qw/mkpath/; use IPC::Open3; use Memoize; # core since 5.8.0, Jul 2002 use POSIX qw(:signal_h); +use Time::Local; use Git qw( command @@ -1326,7 +1327,7 @@ sub parse_svn_date { $ENV{TZ} = 'UTC'; my $epoch_in_UTC = - POSIX::strftime('%s', $S, $M, $H, $d, $m - 1, $Y - 1900); + Time::Local::timelocal($S, $M, $H, $d, $m - 1, $Y - 1900); # Determine our local timezone (including DST) at the # time of $epoch_in_UTC. $Git::SVN::Log::TZ stored the diff --git a/perl/Git/SVN/Fetcher.pm b/perl/Git/SVN/Fetcher.pm index 6b9c6e0138..d8c21ad915 100644 --- a/perl/Git/SVN/Fetcher.pm +++ b/perl/Git/SVN/Fetcher.pm @@ -321,6 +321,14 @@ sub apply_textdelta { # (but $base does not,) so dup() it for reading in close_file open my $dup, '<&', $fh or croak $!; my $base = $::_repository->temp_acquire("git_blob_${$}_$suffix"); + # close_file may call temp_acquire on 'svn_hash', but because of the + # call chain, if the temp_acquire call from close_file ends up being the + # call that first creates the 'svn_hash' temp file, then the FileHandle + # that's created as a result will end up in an SVN::Pool that we clear + # in SVN::Ra::gs_fetch_loop_common. Avoid that by making sure the + # 'svn_hash' FileHandle is already created before close_file is called. + my $tmp_fh = $::_repository->temp_acquire('svn_hash'); + $::_repository->temp_release($tmp_fh, 1); if ($fb->{blob}) { my ($base_is_link, $size); diff --git a/perl/Git/SVN/Ra.pm b/perl/Git/SVN/Ra.pm index cf36b9d3cd..4a499fcb38 100644 --- a/perl/Git/SVN/Ra.pm +++ b/perl/Git/SVN/Ra.pm @@ -394,6 +394,9 @@ sub longest_common_path { sub gs_fetch_loop_common { my ($self, $base, $head, $gsv, $globs) = @_; return if ($base > $head); + # Make sure the cat_blob open2 FileHandle is created before calling + # SVN::Pool::new_default so that it does not incorrectly end up in the pool. + $::_repository->_open_cat_blob_if_needed; my $gpool = SVN::Pool->new_default; my $ra_url = $self->url; my $reload_ra = sub { |