On Oct 12, 2009, Jason Merrill <[email protected]> wrote:
> On 10/12/2009 05:17 PM, Andrew Pinski wrote:
>> That seems like a huge bug in git-svn because we already use multiple
>> directory levels under branches. Hint ibm and redhat and debain.
> Yep, that's why I said "expand". I've thought about fixing that
> aspect of git-svn, but I'm not sure how it would tell the difference
> between a branch directory and a directory of branches given that SVN
> basically models a filesystem.
I don't think it can tell the difference. AFAICT, we have to tell it
ourselves. For the past several weeks, I've been working on creating
another git repository to address this, using the following
configuration file:
[core]
repositoryformatversion = 0
filemode = true
bare = true
logallrefupdates = true
[svn-remote "svn"]
rewriteRoot = svn+ssh://gcc.gnu.org/svn/gcc
# url = svn+ssh://[email protected]./svn/gcc
url = file:///l/tmp/build/gcc/gccrepo
fetch = trunk:refs/remotes/trunk
branches = branches/ARM/*:refs/remotes/branches/ARM/*
fetch = branches/ARM:refs/remotes/dirs/branches/ARM
branches = branches/apple/*:refs/remotes/branches/apple/*
fetch = branches/apple:refs/remotes/dirs/branches/apple
branches = branches/csl/*:refs/remotes/branches/csl/*
fetch = branches/csl:refs/remotes/dirs/branches/csl
branches = branches/dead/*:refs/remotes/branches/dead/*
fetch = branches/dead:refs/remotes/dirs/branches/dead
branches = branches/gcj/*:refs/remotes/branches/gcj/*
fetch = branches/gcj:refs/remotes/dirs/branches/gcj
branches = branches/ibm/*:refs/remotes/branches/ibm/*
fetch = branches/ibm:refs/remotes/dirs/branches/ibm
branches = branches/ix86/*:refs/remotes/branches/ix86/*
fetch = branches/ix86:refs/remotes/dirs/branches/ix86
branches = branches/redhat/*:refs/remotes/branches/redhat/*
fetch = branches/redhat:refs/remotes/dirs/branches/redhat
branches = branches/st/*:refs/remotes/branches/st/*
fetch = branches/st:refs/remotes/dirs/branches/st
branches = branches/suse/*:refs/remotes/branches/suse/*
fetch = branches/suse:refs/remotes/dirs/branches/suse
branches = branches/ubuntu/*:refs/remotes/barnches/ubuntu/*
fetch = branches/ubuntu:refs/remotes/dirs/branches/ubuntu
branches = branches/*:refs/remotes/branches/*
fetch = branches:refs/remotes/dirs/branches/root
tags = tags/apple/*:refs/remotes/tags/apple/*
fetch = tags/apple:refs/remotes/tags/dirs/apple
tags = tags/csl/arm/*:refs/remotes/tags/csl/arm/*
fetch = tags/csl/arm:refs/remotes/tags/dirs/csl/arm
tags = tags/csl/coldfire/*:refs/remotes/tags/csl/coldfire/*
fetch = tags/csl/coldfire:refs/remotes/tags/dirs/csl/coldfire
tags = tags/csl/morpho/*:refs/remotes/tags/csl/morpho/*
fetch = tags/csl/morpho:refs/remotes/tags/dirs/csl/morpho
tags = tags/csl/renesas/*:refs/remotes/tags/csl/renesas/*
fetch = tags/csl/renesas:refs/remotes/tags/dirs/csl/renesas
tags = tags/csl/sourcerygxx/*:refs/remotes/tags/csl/sourcerygxx/*
fetch = tags/csl/sourcerygxx:refs/remotes/tags/dirs/csl/sourcerygxx
tags = tags/csl/wrs-linux/*:refs/remotes/tags/csl/wrs-linux/*
fetch = tags/csl/wrs-linux:refs/remotes/tags/dirs/csl/wrs-linux
tags = tags/csl/*:refs/remotes/tags/csl/others/*
fetch = tags/csl:refs/remotes/tags/dirs/csl/root
tags = tags/ix86/*:refs/remotes/tags/ix86/*
fetch = tags/ix86:refs/remotes/tags/dirs/ix86
tags = branches/st/tags/*:refs/remotes/tags/st/*
fetch = branches/st/tags:refs/remotes/tags/dirs/st
tags = tags/redhat/*:refs/remotes/tags/redhat/*
fetch = tags/redhat:refs/remotes/tags/dirs/redhat
tags = tags/ubuntu/*:refs/remotes/tags/ubuntu/*
fetch = tags/ubuntu:refs/remotes/tags/dirs/ubuntu
tags = tags/*:refs/remotes/tags/*
fetch = tags:refs/remotes/tags/dirs/root
fetch = :refs/remotes/dirs/root
This preserves the complete svn history, although at times in a somewhat
convoluted way. Because git-svn refuses to treat say branches/redhat as
a branch if branches/redhat/gcc-4_4-branch exists, and vice-versa, I
keep track of directories that do not correspond to a branch or tag of
the entire tree in directories that contain “dirs” as one of the
pathname components.
I wish the GCC git repository could integrate at least some of these
fetch configurations, so that branches in subdirs can be handled as
proper branches.
All this said, unless we want to expand on the need for ugly git-svn
configurations as above, we'd be better off avoiding more sub-dirs. The
alternative would have been to adopt a uniform depth for all branches
and tags, but it's too late for that now.
--
Alexandre Oliva, freedom fighter http://FSFLA.org/~lxoliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/ FSF Latin America board member
Free Software Evangelist Red Hat Brazil Compiler Engineer