Search code examples
mercurialcvsrepository

Mercurial: two separate repos somewhat related (yes I'm getting confused)


I have a local repository, let's call it ONE. ONE is the actual program. It's an android program, in case it matters for some reason.

I have a remote repository, let's call it EXT. EXT is somewhat a library, used by ONE.

ONE has a complex directory structure, mandated by android. The main sources are in src/bla/bla/ONE. Since ONE uses EXT, to do it I had to create another directory next to that one, that is src/bla/bla/EXT.

I think would like to keep them separated in two repositories, but I need for them to actually be in this same directory structure to compile ONE.

At the moment I just created a symlink to do it, but I wonder if there is a better way of doing that, that uses some hg feature.


Solution

  • I'm no expert on this, but I don't think sub-repositories work in this case.

    You have 2 projects with the same deeply nested directory structure:

    Project "ONE":

    ONE
        /src
            /bla
                /bla
                    /ONE
    

    Project "EXT"

    EXT
        /src
            /bla
                /bla
                    /EXT
    

    When you compile these projects you want the following structure:

    Compile Project
        /src
            /bla
                /bla
                    /ONE
                    /EXT
    

    Or something similar - essentially both source trees combined under a single "src".

    Since you can't checkout part of a repository, wherever you create a sub-repository you'll get the full "EXT" directory. So, if you make a subrepo next to "ONE" you'll end up with:

    Combined Project
        /src
            /bla
                /bla
                    /ONE
                    /src
                       /bla
                           /bla
                               /EXT
    

    What you are after is a "Partial Clone", which doesn't exist yet.

    https://www.mercurial-scm.org/wiki/PartialClone

    I think OS links are the way to go.

    Hope this helps.