threads / patch / 17223

patchRe: [PATCH] git svn clone -s was not prefixing 'branches/'

Subject: Re: [PATCH] git svn clone -s was not prefixing 'branches/'

## tl;dr

4 messages between Jan 17, 2009 and Jan 18, 2009. Diffs are folded; open one to read it.

replies: 3people: 3as markdown or json

Eric Wong· Jan 17, 2009, 10:54 UTC · lore
Jonathan Lim <snowblink@gmail.com> wrote:
> All branches in the subversion repository would appear at the same
> level as trunk.  The should now appear with a 'branches/' prefix.
> 
> Signed-off-by: Jonathan Lim <snowblink@gmail.com>

This is too ugly for the common existing cases. For the rare case where this could lead to a namespace conflict[1], it's possible to work around it by editing .git/config.

I would accept a --tags-prefix= and --branches-prefix= patch to make this possible w/o having to edit .git/config, but I don't want the default prefixes changed.

Thanks,
[1] - "/branches/trunk" vs "/trunk", which I've yet to see evidence of...
Show 16 quoted lines
> ---
>  git-svn.perl |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/git-svn.perl b/git-svn.perl
> index ad01e18..17d65cb 100755
> --- a/git-svn.perl
> +++ b/git-svn.perl
> @@ -789,7 +789,7 @@ sub cmd_multi_init {
>  	}
>  	return unless defined $_branches || defined $_tags;
>  	my $ra = $url ? Git::SVN::Ra->new($url) : undef;
> -	complete_url_ls_init($ra, $_branches, '--branches/-b', $_prefix);
> +	complete_url_ls_init($ra, $_branches, '--branches/-b', $_prefix . 'branches/');
>  	complete_url_ls_init($ra, $_tags, '--tags/-t', $_prefix . 'tags/');
>  }
Jon Lim· Jan 17, 2009, 11:39 UTC · re: Eric Wong · lore
Hi,

Maybe this patch doesn't fix the problem I was having. I will attempt to describe it better here.

I understand that a standard subversion setup is as follows: trunk branches tags

With the -s option, svn clone should expect this.

Using the example subversion repository: trunk branches/RB_1.0 branches/RB_2.0 tags/REL_1.0 tags/REL_2.0

Currently, using the -s option you get: trunk RB_1.0 RB_2.0 tags/REL_1.0 tags/REL_2.0

I think it makes sense to have: trunk branches/RB_1.0 branches/RB_2.0 tags/REL_1.0 tags/REL_2.0

Regards, Jon

On Sat, Jan 17, 2009 at 10:54, Eric Wong <normalperson@yhbt.net> wrote:
Show 35 quoted lines
> Jonathan Lim <snowblink@gmail.com> wrote:
>> All branches in the subversion repository would appear at the same
>> level as trunk.  The should now appear with a 'branches/' prefix.
>>
>> Signed-off-by: Jonathan Lim <snowblink@gmail.com>
>
> This is too ugly for the common existing cases.  For the rare case where
> this could lead to a namespace conflict[1], it's possible to work around
> it by editing .git/config.
>
> I would accept a --tags-prefix= and --branches-prefix= patch to make
> this possible w/o having to edit .git/config, but I don't want the
> default prefixes changed.
>
> Thanks,
>
> [1] - "/branches/trunk" vs "/trunk", which I've yet to see evidence of...
>
>> ---
>>  git-svn.perl |    2 +-
>>  1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/git-svn.perl b/git-svn.perl
>> index ad01e18..17d65cb 100755
>> --- a/git-svn.perl
>> +++ b/git-svn.perl
>> @@ -789,7 +789,7 @@ sub cmd_multi_init {
>>       }
>>       return unless defined $_branches || defined $_tags;
>>       my $ra = $url ? Git::SVN::Ra->new($url) : undef;
>> -     complete_url_ls_init($ra, $_branches, '--branches/-b', $_prefix);
>> +     complete_url_ls_init($ra, $_branches, '--branches/-b', $_prefix . 'branches/');
>>       complete_url_ls_init($ra, $_tags, '--tags/-t', $_prefix . 'tags/');
>>  }
>
-- 
http://snowblink.co.uk/
Björn Steinbrink· Jan 17, 2009, 12:07 UTC · re: Jon Lim · lore
On 2009.01.17 11:39:28 +0000, Jon Lim wrote:
Show 32 quoted lines
> Hi,
> 
> Maybe this patch doesn't fix the problem I was having. I will attempt
> to describe it better here.
> 
> I understand that a standard subversion setup is as follows:
> trunk
> branches
> tags
> 
> With the -s option, svn clone should expect this.
> 
> Using the example subversion repository:
> trunk
> branches/RB_1.0
> branches/RB_2.0
> tags/REL_1.0
> tags/REL_2.0
> 
> Currently, using the -s option you get:
> trunk
> RB_1.0
> RB_2.0
> tags/REL_1.0
> tags/REL_2.0
> 
> I think it makes sense to have:
> trunk
> branches/RB_1.0
> branches/RB_2.0
> tags/REL_1.0
> tags/REL_2.0

Why? "trunk" is just a branch like any other branch, too. It's basically just a svn convention that it's not in branches/ but in its own "toplevel" directory. Once imported into git, it's just an ordinary remote tracking branch. It's already pretty well distiguishable from all the other branches due to its name.

What _does_ make sense is to have a common prefix for all the stuff you got from svn, using for example --prefix=svn/. That way you get: svn/trunk svn/RB_1.0 svn/RB_2.0 svn/tags/REL_1.0 svn/tags/REL_2.0

The important part is that those names aren't ambiguous if you have local branch heads called, for example: trunk RB_1.0 RB_2.0

as the svn/ prefix is part of the shortname for the remote tracking branches. So "trunk" is the branch head and "svn/trunk" is the remote tracking branch.

Btw Eric, is there any reason why there's no prefix used by default? Using the name for the svn-remote as the prefix would make a lot of sense to me.

Björn
Eric Wong· Jan 18, 2009, 01:24 UTC · re: Björn Steinbrink · lore
Björn Steinbrink <B.Steinbrink@gmx.de> wrote:
Show 39 quoted lines
> On 2009.01.17 11:39:28 +0000, Jon Lim wrote:
> > Hi,
> > 
> > Maybe this patch doesn't fix the problem I was having. I will attempt
> > to describe it better here.
> > 
> > I understand that a standard subversion setup is as follows:
> > trunk
> > branches
> > tags
> > 
> > With the -s option, svn clone should expect this.
> > 
> > Using the example subversion repository:
> > trunk
> > branches/RB_1.0
> > branches/RB_2.0
> > tags/REL_1.0
> > tags/REL_2.0
> > 
> > Currently, using the -s option you get:
> > trunk
> > RB_1.0
> > RB_2.0
> > tags/REL_1.0
> > tags/REL_2.0
> > 
> > I think it makes sense to have:
> > trunk
> > branches/RB_1.0
> > branches/RB_2.0
> > tags/REL_1.0
> > tags/REL_2.0
> 
> Why? "trunk" is just a branch like any other branch, too. It's basically
> just a svn convention that it's not in branches/ but in its own
> "toplevel" directory. Once imported into git, it's just an ordinary
> remote tracking branch. It's already pretty well distiguishable from all
> the other branches due to its name.
Yup, you said it better than I could myself :)
Show 21 quoted lines
> What _does_ make sense is to have a common prefix for all the stuff you
> got from svn, using for example --prefix=svn/. That way you get:
> svn/trunk
> svn/RB_1.0
> svn/RB_2.0
> svn/tags/REL_1.0
> svn/tags/REL_2.0
> 
> The important part is that those names aren't ambiguous if you have
> local branch heads called, for example:
> trunk
> RB_1.0
> RB_2.0
> 
> as the svn/ prefix is part of the shortname for the remote tracking
> branches. So "trunk" is the branch head and "svn/trunk" is the remote
> tracking branch.
> 
> Btw Eric, is there any reason why there's no prefix used by default?
> Using the name for the svn-remote as the prefix would make a lot of
> sense to me.
Backwards compatibility; and that I've been lazy :)

But I do agree that prefixing "svn/" is preferred for tracking new repos. I seem to recall that git-svn was actually the first user of the "remotes/" namespace before it was adopted by the rest of git, and with SVN, I didn't anticipate more than one remote.

-- 
Eric Wong

← back to recent threads