From: Junio C Hamano Date: Wed, 13 Aug 2008 20:38:23 GMT Subject: Re: [PATCH 1/3] Git.pm: Add faculties to allow temp files to be cached Message-ID: <7vskt8mz0g.fsf@gitster.siamese.dyndns.org> In-Reply-To: <48A33E70.8060804@gmail.com> Lea Wiemann writes: > Marcus Griep wrote: >> diff --git a/perl/Git.pm b/perl/Git.pm >> >> +require File::Spec; > > This makes Git.pm dependent on Perl 5.6.1. Ouch. Thanks for being extra careful. Unfortunately I've already pulled these changes via Eric. Among the existing Perl scripts, cvsexportcommit and cvsimport already do use it, so do svnimport and cidaemon in contrib. > ... Hence to avoid > complaints about failing tests, I suggest that you add a check for > File::Spec availability at the beginning of any test that (indirectly) > uses Git.pm. Hmm, wouldn't something like this (untested) be more contained? --- perl/Git.pm | 16 ++++++++++++++-- 1 files changed, 14 insertions(+), 2 deletions(-) diff --git a/perl/Git.pm b/perl/Git.pm index 405f68f..2a92945 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -95,14 +95,26 @@ increase notwithstanding). =cut +my $tmpdir; use Carp qw(carp croak); # but croak is bad - throw instead use Error qw(:try); use Cwd qw(abs_path); use IPC::Open2 qw(open2); use File::Temp (); -require File::Spec; use Fcntl qw(SEEK_SET SEEK_CUR); + + eval { require File::Spec; }; + if ($@) { + for (@ENV{qw(TMPDIR TEMP TMP)}, "/tmp") { + if (test -d $_) { + $tmpdir = $_; + last; + } + } + } else { + $tmpdir = File::Spec->tmpdir; + } } @@ -1023,7 +1035,7 @@ sub _temp_cache { } $$temp_fd = File::Temp->new( TEMPLATE => 'Git_XXXXXX', - DIR => File::Spec->tmpdir + DIR => $tmpdir, ) or throw Error::Simple("couldn't open new temp file"); $$temp_fd->autoflush; binmode $$temp_fd;