git-svn: brown paper bag fixes
authorEric Wong <normalperson@yhbt.net>
Wed, 14 Feb 2007 21:32:21 +0000 (13:32 -0800)
committerEric Wong <normalperson@yhbt.net>
Fri, 23 Feb 2007 08:57:12 +0000 (00:57 -0800)
  * avoid skipping modification-only changes in fetch
  * correctly fetch when we only have branches and tags
    to glob from (no fetch keys defined)

Signed-off-by: Eric Wong <normalperson@yhbt.net>
git-svn.perl
t/t9108-git-svn-glob.sh

index b2931cd5aa99b6a0cf08fe5ba8485ad76b39847c..24ca3087d699ed6e4e1e65f2b69139d82b8bb7fb 100755 (executable)
@@ -782,7 +782,7 @@ sub fetch_all {
        my $ra = Git::SVN::Ra->new($url);
        my $uuid = $ra->get_uuid;
        my $head = $ra->get_latest_revnum;
-       my $base = $head;
+       my $base = defined $fetch ? $head : 0;
 
        # read the max revs for wildcard expansion (branches/*, tags/*)
        foreach my $t (qw/branches tags/) {
@@ -2901,7 +2901,8 @@ sub match_globs {
                        }
                }
                foreach (keys %$paths) {
-                       if (/$g->{path}->{left_regex}/) {
+                       if (/$g->{path}->{left_regex}/ &&
+                           !/$g->{path}->{regex}/) {
                                next if $paths->{$_}->{action} !~ /^[AR]$/;
                                get_dir_check($self, $exists, $g, $r);
                        }
index be21fc13b723fe0b7ac9ecd3a2fac73385df6a08..db4344cc84395fcecee2010320f7fc46101d75a6 100755 (executable)
@@ -55,4 +55,32 @@ test_expect_success 'test refspec globbing' "
                \"\`git rev-parse refs/remotes/trunk\`\"
        "
 
+echo try to try > expect.two
+echo nothing to see here >> expect.two
+cat expect.end >> expect.two
+
+test_expect_success 'test left-hand-side only globbing' "
+       git config --add svn-remote.two.url $svnrepo &&
+       git config --add svn-remote.two.fetch trunk:refs/remotes/two/trunk &&
+       git config --add svn-remote.two.branches \
+                        'branches/*:refs/remotes/two/branches/*' &&
+       git config --add svn-remote.two.tags \
+                        'tags/*:refs/remotes/two/tags/*' &&
+       cd tmp &&
+               echo 'try try' >> tags/end/src/b/readme &&
+               poke tags/end/src/b/readme &&
+               svn commit -m 'try to try'
+               cd .. &&
+       git-svn fetch two &&
+       test \`git rev-list refs/remotes/two/tags/end | wc -l\` -eq 6 &&
+       test \`git rev-list refs/remotes/two/branches/start | wc -l\` -eq 3 &&
+       test \`git rev-parse refs/remotes/two/branches/start~2\` = \
+            \`git rev-parse refs/remotes/two/trunk\` &&
+       test \`git rev-parse refs/remotes/two/tags/end~3\` = \
+            \`git rev-parse refs/remotes/two/branches/start\` &&
+       git log --pretty=oneline refs/remotes/two/tags/end | \
+           sed -e 's/^.\{41\}//' > output.two &&
+       cmp expect.two output.two
+       "
+
 test_done