git-svn: make rebuild respect rewriteRoot option
authorJan Krüger <jk@jk.gs>
Tue, 24 Jun 2008 00:17:36 +0000 (02:17 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 24 Jun 2008 00:38:08 +0000 (17:38 -0700)
commit74b1e1235781bbe5c90b802c1551446a5f5d69f1
treeecbfaf748c5f38b5cab872bd9eaba8fd67e62059
parent6ff6af62ec70e04676b35260a7f4b9fafc8f0973
git-svn: make rebuild respect rewriteRoot option

Suppose someone fetches git-svn-ified commits from another repo and then
attempts to use 'git-svn init --rewrite-root=foo bar'. Using git svn rebase
after that will fail badly:

 * For each commit tried by working_head_info, rebuild is called indirectly.
 * rebuild will iterate over all commits and skip all of them because the
   URL does not match. Because of that no rev_map file is generated at all.
 * Thus, rebuild will run once for every commit. This takes ages.
 * In the end there still isn't any rev_map file and thus working_head_info
   fails.

Addressing this behaviour fixes an apparently not too uncommon problem with
providing git-svn mirrors of Subversion repositories. Some repositories are
accessed using different URLs depending on whether the user has push
privileges or not. In the latter case, an anonymous URL is often used that
differs from the push URL. Providing a mirror that is usable in both cases
becomes a lot more possible with this change.

Signed-off-by: Jan Krüger <jk@jk.gs>
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-svn.perl
t/t9123-git-svn-rebuild-with-rewriteroot.sh [new file with mode: 0755]