summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Eric Wong <normalperson@yhbt.net>2009-11-22 18:11:32 -0800
committerLibravatar Eric Wong <normalperson@yhbt.net>2009-11-22 18:15:42 -0800
commit9be30eed61993a6f2d04a1609723e64e7632a64e (patch)
treedeea3b2111051bab7afe65c86188afc744d7e7a5
parentgit svn: always reuse existing remotes on fetch (diff)
downloadtgif-9be30eed61993a6f2d04a1609723e64e7632a64e.tar.xz
git svn: strip leading path when making empty dirs
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>
-rwxr-xr-xgit-svn.perl3
-rwxr-xr-xt/t9146-git-svn-empty-dirs.sh23
2 files changed, 26 insertions, 0 deletions
diff --git a/git-svn.perl b/git-svn.perl
index 7f7a56fbea..957d44e630 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -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";
diff --git a/t/t9146-git-svn-empty-dirs.sh b/t/t9146-git-svn-empty-dirs.sh
index 5948544ec5..70c52c1f97 100755
--- a/t/t9146-git-svn-empty-dirs.sh
+++ b/t/t9146-git-svn-empty-dirs.sh
@@ -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