git svn: strip leading path when making empty dirs
authorEric Wong <normalperson@yhbt.net>
Mon, 23 Nov 2009 02:11:32 +0000 (18:11 -0800)
committerEric Wong <normalperson@yhbt.net>
Mon, 23 Nov 2009 02:15:42 +0000 (18:15 -0800)
Since unhandled.log stores paths relative to the repository
root, we need to strip out leading path components if the
directories we're tracking are not the repository root.

Reported-by: Björn Steinbrink
Signed-off-by: Eric Wong <normalperson@yhbt.net>
git-svn.perl
t/t9146-git-svn-empty-dirs.sh

index 7f7a56f..957d44e 100755 (executable)
@@ -2752,8 +2752,11 @@ sub mkemptydirs {
                }
        }
        close $fh;
+
+       my $strip = qr/\A\Q$self->{path}\E(?:\/|$)/;
        foreach my $d (sort keys %empty_dirs) {
                $d = uri_decode($d);
+               $d =~ s/$strip//;
                next if -d $d;
                if (-e _) {
                        warn "$d exists but is not a directory\n";
index 5948544..70c52c1 100755 (executable)
@@ -82,4 +82,27 @@ test_expect_success 'git svn mkdirs -r works' '
        )
 '
 
+test_expect_success 'initialize trunk' '
+       for i in trunk trunk/a trunk/"weird file name"
+       do
+               svn_cmd mkdir -m "mkdir $i" "$svnrepo"/"$i"
+       done
+'
+
+test_expect_success 'clone trunk' 'git svn clone -s "$svnrepo" trunk'
+
+test_expect_success 'empty directories in trunk exist' '
+       (
+               cd trunk &&
+               for i in a "weird file name"
+               do
+                       if ! test -d "$i"
+                       then
+                               echo >&2 "$i does not exist"
+                               exit 1
+                       fi
+               done
+       )
+'
+
 test_done