On Oct 12, 2009, Jason Merrill <ja...@redhat.com> 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://aol...@gcc.gnu.org./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

Reply via email to