Code

git-svn: proper detection of bare repositories
authorDeskin Miller <deskinm@umich.edu>
Thu, 6 Nov 2008 05:07:39 +0000 (00:07 -0500)
committerEric Wong <normalperson@yhbt.net>
Fri, 14 Nov 2008 06:33:59 +0000 (22:33 -0800)
When in a bare repository (or .git, for that matter), git-svn would fail
to initialise properly, since git rev-parse --show-cdup would not output
anything.  However, git rev-parse --show-cdup actually returns an error
code if it's really not in a git directory.

Fix the issue by checking for an explicit error from git rev-parse, and
setting $git_dir appropriately if instead it just does not output.

Signed-off-by: Deskin Miller <deskinm@umich.edu>
Acked-by: Eric Wong <normalperson@yhbt.net>
git-svn.perl
t/t9100-git-svn-basic.sh

index 2abb7b5937266999e66a8217a02394f8deb29af7..86075ec616418f77e42dd72593a7efd00e1200c3 100755 (executable)
@@ -223,11 +223,13 @@ unless ($cmd && $cmd =~ /(?:clone|init|multi-init)$/) {
                            "but it is not a directory\n";
                }
                my $git_dir = delete $ENV{GIT_DIR};
-               chomp(my $cdup = command_oneline(qw/rev-parse --show-cdup/));
-               unless (length $cdup) {
-                       die "Already at toplevel, but $git_dir ",
-                           "not found '$cdup'\n";
-               }
+               my $cdup = undef;
+               git_cmd_try {
+                       $cdup = command_oneline(qw/rev-parse --show-cdup/);
+                       $git_dir = '.' unless ($cdup);
+                       chomp $cdup if ($cdup);
+                       $cdup = "." unless ($cdup && length $cdup);
+               } "Already at toplevel, but $git_dir not found\n";
                chdir $cdup or die "Unable to chdir up to '$cdup'\n";
                unless (-d $git_dir) {
                        die "$git_dir still not found after going to ",
index 9b238c329b87d98dca4d0e66839df97c5c3a0673..bb921af56af2c9a559c843dd4c3b69993c34206c 100755 (executable)
@@ -265,4 +265,13 @@ test_expect_success 'able to set-tree to a subdirectory' "
        test -z \"\`git diff refs/heads/my-bar refs/remotes/bar\`\"
        "
 
+test_expect_success 'git-svn works in a bare repository' '
+       mkdir bare-repo &&
+       ( cd bare-repo &&
+       git init --bare &&
+       GIT_DIR=. git svn init "$svnrepo" &&
+       git svn fetch ) &&
+       rm -rf bare-repo
+       '
+
 test_done