diff options
author | Marten Svanfeldt (dev) <developer@svanfeldt.com> | 2008-11-13 20:04:09 +0800 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2008-11-13 22:36:34 -0800 |
commit | bcdd1b4456998256df19ea0347bf4a7fa5410eef (patch) | |
tree | b6515507548ee774ef2c81142a5020f186cfefe6 /perl | |
parent | fe4003f6308b88bcc44a989f12e1baddd97f22d4 (diff) | |
download | git-bcdd1b4456998256df19ea0347bf4a7fa5410eef.tar.gz |
Git.pm: Make _temp_cache use the repository directory
Update the usage of File::Temp->tempfile to place the temporary files
within the repository directory instead of just letting Perl decide what
directory to use, given there is a repository specified when requesting
the temporary file.
This is needed to be able to fix git-svn on msys as msysperl generates
paths with UNIX-style paths (/tmp/xxx) while the git tools expect natvie
path format (c:/..). The repository dir is stored in native format so by
using it as the base directory for temporary files we always get a
usable native full path.
Signed-off-by: Marten Svanfeldt <developer@svanfeldt.com>
Acked-by: Eric Wong <normalperson@yhbt.net>
Diffstat (limited to 'perl')
-rw-r--r-- | perl/Git.pm | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/perl/Git.pm b/perl/Git.pm index ba94453781..dde9105df8 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -961,9 +961,7 @@ issue. =cut sub temp_acquire { - my ($self, $name) = _maybe_self(@_); - - my $temp_fd = _temp_cache($name); + my $temp_fd = _temp_cache(@_); $TEMP_FILES{$temp_fd}{locked} = 1; $temp_fd; @@ -1005,7 +1003,7 @@ sub temp_release { } sub _temp_cache { - my ($name) = @_; + my ($self, $name) = _maybe_self(@_); _verify_require(); @@ -1022,9 +1020,16 @@ sub _temp_cache { "' was closed. Opening replacement."; } my $fname; + + my $tmpdir; + if (defined $self) { + $tmpdir = $self->repo_path(); + } + ($$temp_fd, $fname) = File::Temp->tempfile( - 'Git_XXXXXX', UNLINK => 1 + 'Git_XXXXXX', UNLINK => 1, DIR => $tmpdir, ) or throw Error::Simple("couldn't open new temp file"); + $$temp_fd->autoflush; binmode $$temp_fd; $TEMP_FILES{$$temp_fd}{fname} = $fname; |