git-svn: brown paper bag fixes

  * 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>
diff --git a/git-svn.perl b/git-svn.perl
index b2931cd..24ca308 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -782,7 +782,7 @@
 	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 @@
 			}
 		}
 		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);
 			}
diff --git a/t/t9108-git-svn-glob.sh b/t/t9108-git-svn-glob.sh
index be21fc1..db4344c 100755
--- a/t/t9108-git-svn-glob.sh
+++ b/t/t9108-git-svn-glob.sh
@@ -55,4 +55,32 @@
 		\"\`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