Subject: Re: git-svn and svnsync

From: Andriy Gapon <[email-masked]>
Date: Mon, 24 Nov 2008 19:33:43 +0200

on 24/11/2008 19:15 Michael J Gruber said the following:
> Andriy Gapon venit, vidit, dixit 24.11.2008 13:56:
>> on 16/10/2008 11:07 Andriy Gapon said the following:
>>> I did the following:
>>> 1. mirror svn repository using svnsync
>>> 2. clone the mirror with git-svn --use-svnsync-props and some tweaking[*]
>>> 3. run git svn info in the clone
>>> 4. get error "Unable to determine upstream SVN information from working
>>> tree history"
>>>
>>> git svn log and git svn rebase do not work either.
>>> git log does work.
>>>
>>> I have git version 1.6.0.2 (from FreeBSD ports).
>>> [*] About the tweaking - I manually massaged config file to get the
>>> branches I was interested in, so .git/config is this:
>>> [core]
>>>         repositoryformatversion = 0
>>>         filemode = true
>>>         bare = false
>>>         logallrefupdates = true
>>> [svn-remote "svn"]
>>>         useSvnsyncProps = 1
>>>         url = file:///system/devel/svn/base
>>>         fetch = head:refs/remotes/trunk
>>>         fetch = stable/6:refs/remotes/stable_6
>>>         fetch = stable/7:refs/remotes/stable_7
>>>         fetch = releng/6.3:refs/remotes/releng_6_3
>>>         fetch = releng/6.4:refs/remotes/releng_6_4
>>>         fetch = releng/7.0:refs/remotes/releng_7_0
>>>         fetch = release/6.3.0:refs/remotes/release_6_3_0
>>>         fetch = release/7.0.0:refs/remotes/release_7_0_0
>>>
>>> This is .git/svn/.metadata:
>>> ; This file is used internally by git-svn
>>> ; You should not have to edit it
>>> [svn-remote "svn"]
>>>         reposRoot = file:///system/devel/svn/base
>>>         uuid = ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
>>>         svnsync-uuid = ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
>>>         svnsync-url = svn://svn.freebsd.org/base
>>>
>>> So you can see the original svn repository URL.
>>>
>>> git log reports svn info like the following:
>>> git-svn-id: svn://svn.freebsd.org/base/stable/7@183898
>>> ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
>>>
>>> It seems that the problem is that the code in find_by_url() and/or
>>> read_all_remotes() subroutines (in git-svn.perl) are not aware of
>>> svnsync and do not realize an URL in logs and URL in svn-remote are
>>> different.
>>> BTW, I see that there is some special svm logic in read_all_remotes.
>>>
>>> Thank you very much for any help in advance.
>>>
>> Anyone?
>> I wonder if this is my local problem/misconfiguration or an issue with
>> git-svn.
> 
> Same happens here, so it's a general issue ;)
> 
> I think I encountered that before and ended up experimenting with
> git-svn cloning from a svnsync source until I found the final config,
> with which I git-svn cloned directly from upstream, so that I had to
> wait only twice.

I hacked together an ugly patch that replaces svm support with snvsync
support. This works for me, not sure if it will be useful in general.

-- 
Andriy Gapon
--- git-svn	2008-11-11 10:20:38.714620442 +0200
+++ git-svn	2008-11-07 17:10:49.245681213 +0200
@@ -1433,7 +1433,7 @@
 sub read_all_remotes {
 	my $r = {};
 	my $use_svm_props = eval { command_oneline(qw/config --bool
-	    svn.useSvmProps/) };
+	    svn.useSvnsyncProps/) };
 	$use_svm_props = $use_svm_props eq 'true' if $use_svm_props;
 	foreach (grep { s/^svn-remote\.// } command(qw/config -l/)) {
 		if (m!^(.+)\.fetch=\s*(.*)\s*:\s*(.+)\s*$!) {
@@ -1445,7 +1445,7 @@
 			$local_ref =~ s{^/}{};
 			$r->{$remote}->{fetch}->{$local_ref} = $remote_ref;
 			$r->{$remote}->{svm} = {} if $use_svm_props;
-		} elsif (m!^(.+)\.usesvmprops=\s*(.*)\s*$!) {
+		} elsif (m!^(.+)\.usesvnsyncprops=\s*(.*)\s*$!) {
 			$r->{$1}->{svm} = {};
 		} elsif (m!^(.+)\.url=\s*(.*)\s*$!) {
 			$r->{$1}->{url} = $2;
@@ -1471,9 +1471,8 @@
 				my $section = "svn-remote.$_";
 				$svm = {
 					source => tmp_config('--get',
-					    "$section.svm-source"),
-					replace => tmp_config('--get',
-					    "$section.svm-replace"),
+					    "$section.svnsync-url"),
+					replace => '',
 				}
 			};
 			$r->{$_}->{svm} = $svm;