summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: d281786)
raw | patch | inline | side by side (parent: d281786)
author | Eric Wong <normalperson@yhbt.net> | |
Tue, 20 Jun 2006 00:59:35 +0000 (17:59 -0700) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Tue, 20 Jun 2006 08:31:57 +0000 (01:31 -0700) |
When tracking directories with nearly all of its files at
the most nested levels, --rmdir would accidentally go too
far when deleting.
Of course, we'll add a test for this condition, too.
Makefile: automatically run new tests as they appear in t/
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
the most nested levels, --rmdir would accidentally go too
far when deleting.
Of course, we'll add a test for this condition, too.
Makefile: automatically run new tests as they appear in t/
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
contrib/git-svn/Makefile | patch | blob | history | |
contrib/git-svn/git-svn.perl | patch | blob | history | |
contrib/git-svn/t/t0002-deep-rmdir.sh | [new file with mode: 0644] | patch | blob |
index 6aedb10f1261bbcef6a48ef65e1f47d9edc1afda..7c209469438bcef2a5cee0988448a41a56ec30cc 100644 (file)
--- a/contrib/git-svn/Makefile
+++ b/contrib/git-svn/Makefile
asciidoc -b xhtml11 -d manpage \
-f ../../Documentation/asciidoc.conf $<
test: git-svn
- cd t && $(SHELL) ./t0000-contrib-git-svn.sh $(TEST_FLAGS)
- cd t && $(SHELL) ./t0001-contrib-git-svn-props.sh $(TEST_FLAGS)
+ cd t && for i in t????-*.sh; do $(SHELL) ./$$i $(TEST_FLAGS); done
# we can test NO_OPTIMIZE_COMMITS independently of LC_ALL
full-test:
index da0ff9ad8a56f41c351946990ee17d1e80f533e8..7e7f2f0cd98642ff31c3a47a0652a70264d8e618 100755 (executable)
exec qw/git-ls-tree --name-only -r -z/, $self->{c} or croak $!;
}
local $/ = "\0";
+ my @svn_path = split m#/#, $self->{svn_path};
while (<$fh>) {
chomp;
- $_ = $self->{svn_path} . '/' . $_;
- my ($dn) = ($_ =~ m#^(.*?)/?(?:[^/]+)$#);
- delete $rm->{$dn};
- last unless %$rm;
+ my @dn = (@svn_path, (split m#/#, $_));
+ while (pop @dn) {
+ delete $rm->{join '/', @dn};
+ }
+ unless (%$rm) {
+ close $fh;
+ return;
+ }
}
+ close $fh;
+
my ($r, $p, $bat) = ($self->{r}, $self->{pool}, $self->{bat});
foreach my $d (sort { $b =~ tr#/#/# <=> $a =~ tr#/#/# } keys %$rm) {
$self->close_directory($bat->{$d}, $p);
diff --git a/contrib/git-svn/t/t0002-deep-rmdir.sh b/contrib/git-svn/t/t0002-deep-rmdir.sh
--- /dev/null
@@ -0,0 +1,29 @@
+test_description='git-svn rmdir'
+. ./lib-git-svn.sh
+
+test_expect_success 'initialize repo' "
+ mkdir import &&
+ cd import &&
+ mkdir -p deeply/nested/directory/number/1 &&
+ mkdir -p deeply/nested/directory/number/2 &&
+ echo foo > deeply/nested/directory/number/1/file &&
+ echo foo > deeply/nested/directory/number/2/another &&
+ svn import -m 'import for git-svn' . $svnrepo &&
+ cd ..
+ "
+
+test_expect_success 'mirror via git-svn' "
+ git-svn init $svnrepo &&
+ git-svn fetch &&
+ git checkout -f -b test-rmdir remotes/git-svn
+ "
+
+test_expect_success 'Try a commit on rmdir' "
+ git rm -f deeply/nested/directory/number/2/another &&
+ git commit -a -m 'remove another' &&
+ git-svn commit --rmdir HEAD &&
+ svn ls -R $svnrepo | grep ^deeply/nested/directory/number/1
+ "
+
+
+test_done