git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] Fix 'git cvsexportcommit -w $cvsdir ...' when used with relative $GIT_DIR

From
Johan Herland <johan@herland.net>
Date
Feb 11, 2008, 01:28 UTC
Message-ID
<200802110228.05233.johan@herland.net>

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 with "fatal: Not a git repository".

Therefore, if $GIT_DIR is relative, prepend $PWD to $GIT_DIR before the chdir to $cvsdir.

Signed-off-by: Johan Herland <johan@herland.net>
---

I'm working on an update hook script for automatically propagating commits to a CVS server. My script calls 'git cvsexportcommit -w $cvsdir ...'. However, the hooks infrastructure invokes the update hook script with the (bare, in my case) Git repo as $PWD and sets up GIT_DIR="." in the script's environment. For now, I work around this bug in my script by forcing $GIT_DIR to $PWD, but this really seems like a bug in cvsexportcommit.

In my case, this bug can also be fixed by making sure the hook infrastructure set up an _absolute_ GIT_DIR for the update hook, something I'd consider more polite than the current GIT_DIR=".". Whether we want to fix this as well should be discussed. But the patch below is needed in any case, since cvsexportcommit may not only be called from hook scripts.

Have fun! :)
...Johan
 git-cvsexportcommit.perl |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/git-cvsexportcommit.perl b/git-cvsexportcommit.perl
index d2e50c3..fd4fbfb 100755
--- a/git-cvsexportcommit.perl
+++ b/git-cvsexportcommit.perl
@@ -15,15 +15,18 @@ $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
+		# Oops no GIT_DIR set. Figure 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;
+	}
+	unless ($ENV{GIT_DIR} =~ m[^/]) {
+		# GIT_DIR is relative. Prepend $PWD
+		my $wd = `pwd`;
+		chomp($wd);
+		my $gd = $wd."/".$ENV{GIT_DIR};
 		$ENV{GIT_DIR} = $gd;
 	}
 
-- 
1.5.4.2.g41ac4
Next: Junio C Hamano
Message 1 of 8 in “Fix 'git cvsexportcommit -w $cvsdir ...' when used with relative $GIT_DIR”
  1. Fix 'git cvsexportcommit -w $cvsdir ...' when used with relative $GIT_DIRJohan Herland, Feb 11, 2008
  2. Junio C HamanoFeb 11, 2008
  3. Robin RosenbergFeb 11, 2008
  4. Fix 'git cvsexportcommit -w $cvsdir ...' when used with relative $GIT_DIRJohan Herland, Feb 11, 2008
  5. Robin RosenbergFeb 12, 2008
  6. Add testcase for 'git cvsexportcommit -w $cvsdir ...' with relative $GIT_DIRJohan Herland, Feb 13, 2008
  7. Junio C HamanoFeb 13, 2008
  8. Jakub NarebskiFeb 13, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.