Fix 'git cvsexportcommit -w $cvsdir ...' when used with relative $GIT_DIR
authorJohan Herland <johan@herland.net>
Mon, 11 Feb 2008 23:43:41 +0000 (00:43 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 27 Feb 2008 19:35:09 +0000 (11:35 -0800)
When using the '-w $cvsdir' option to cvsexportcommit, it will chdir into
$cvsdir before executing several other git commands. If $GIT_DIR is set to
a relative path (e.g. '.'), the git commands executed by cvsexportcommit
will naturally fail.

Therefore, ensure that $GIT_DIR is absolute before the chdir to $cvsdir.

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-cvsexportcommit.perl
t/t9200-git-cvsexportcommit.sh

index d2e50c3..2a8ad1e 100755 (executable)
@@ -5,6 +5,7 @@ use Getopt::Std;
 use File::Temp qw(tempdir);
 use Data::Dumper;
 use File::Basename qw(basename dirname);
+use File::Spec;
 
 our ($opt_h, $opt_P, $opt_p, $opt_v, $opt_c, $opt_f, $opt_a, $opt_m, $opt_d, $opt_u, $opt_w);
 
@@ -15,17 +16,15 @@ $opt_h && usage();
 die "Need at least one commit identifier!" unless @ARGV;
 
 if ($opt_w) {
+       # Remember where GIT_DIR is before changing to CVS checkout
        unless ($ENV{GIT_DIR}) {
-               # Remember where our GIT_DIR is before changing to CVS checkout
+               # No GIT_DIR set. Figure it out for ourselves
                my $gd =`git-rev-parse --git-dir`;
                chomp($gd);
-               if ($gd eq '.git') {
-                       my $wd = `pwd`;
-                       chomp($wd);
-                       $gd = $wd."/.git"       ;
-               }
                $ENV{GIT_DIR} = $gd;
        }
+       # Make sure GIT_DIR is absolute
+       $ENV{GIT_DIR} = File::Spec->rel2abs($ENV{GIT_DIR});
 
        if (! -d $opt_w."/CVS" ) {
                die "$opt_w is not a CVS checkout";
index 7e25a39..49d57a8 100755 (executable)
@@ -246,7 +246,7 @@ test_expect_success \
        ;;
 esac
 
-test_expect_failure '-w option should work with relative GIT_DIR' '
+test_expect_success '-w option should work with relative GIT_DIR' '
       mkdir W &&
       echo foobar >W/file1.txt &&
       echo bazzle >W/file2.txt &&