Git.pm: Make _temp_cache use the repository directory
PATCH 1/1 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 fixes issues when the Perl in use uses a different format for paths than in use by native code in the git tools such as msysgit with msys-perl.
--- perl/Git.pm | 15 ++++++++++----- 1 files changed, 10 insertions(+), 5 deletions(-)
perl/Git.pm +10 -5
@@ -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;
Signature · 1 line
1.6.0.3.1437.g6c121.dirty
Hi Marten Svanfeldt:
perl/Git.pm sub _temp_cache { · line 1028
Quoted 10 lines · Marten Svanfeldt (dev)
Update the usage of
File::Temp->tempfileto place the temporary files within the repository directory instead of just letting Perl decide what [snip]perl/Git.pm +6
-0+ + my $tmpdir; + if (defined $self) { + $tmpdir = $self->repo_path(); + } +
I suppose if I wanted to used ${workingdir}/.git instead of ${workingdir}, I should replace the $tmpdir line above with $tmpdir = $self->repo_path() . "/.git" ?
Best regards,
Clifford Caoile
Hi,
Quoted 4 lines · Clifford Caoile
Hi Marten Svanfeldt:
On Wed, Nov 12, 2008 at 11:28 PM, Marten Svanfeldt (dev) <[email protected]> wrote:
..
Quoted 3 lines
I suppose if I wanted to used ${workingdir}/.git instead of ${workingdir}, I should replace the $tmpdir line above with $tmpdir = $self->repo_path() . "/.git" ?
No. repo_path() is the path to the repository, so the .git directory. If you instead want within the working directory it is wc_path().
Quoted 3 lines
Best regards,
Clifford Caoile
-Marten Svanfeldt