This is intended to work as a starting point for a discussion of what tool
we should use to use to track inter-repository dependencies for CB2.0 in
the opencrowbar org.  I expect the outcome of this discussion to be
relevant no matter what we eventually wind up doing, do please leave your
opinions about migrating to a different org somewhere else.

First, the ones I have experimented with recently:

./dev tool Pros:
* Able to track inter-repository dependencies at a branch, tag, or commit
ID level.
* Is not tied to a specific set of upstream or remote repositories.
* Is able to manange remote tracking branches by introducing and enforcing
priorities for remotes.

./dev tool Cons:
* Is too aware of exactly how Crowbar repositories should be layed out,
enforced by code and not metadata.
* Branch tracking is too entangled with the rest of the ./dev tool.

The dev tool was initially written to overcome the two main shortcomings of
git submodules -- they were pinned to a specific commit, and they were
pinned to a specific upstream repository.  The first one looks better since
git 1.8.2 added support for --branch in git-submodule, but the second one
is still an issue.

git-subtree Pros:
* Only have to worry about one repository.
* It is pretty easy to import changes from an external repo into your local
repo, and then split them out again to submit to upstream.

git-subtree Cons:
* The merged repository does not know where its pieces came from, which
would require us to do that manually, probably via a metadata-driven
script..
* History for the included subtrees is not visible in the subtrees:
[victor@m4700 crowbar-subtree]$ pwd
/home/victor/src/crowbar-subtree[victor@m4700 crowbar-subtree]$ git subtree
pull --prefix barclamps/crowbar
https://github.com/crowbar/barclamp-crowbarmaster
<output snipped>
[victor@m4700 crowbar-subtree]$ git log
commit 5d27ba8326e092b132c6cf82365025180b17afb9
Merge: 89fda0a ea2b8e7
Author: Victor Lowther <victor.lowt...@gmail.com>
Date:   Thu Jan 2 10:17:46 2014 -0600

    Add 'barclamps/crowbar/' from commit
'ea2b8e77f4ea7b048bea4932cf0292580c4ed523'

    git-subtree-dir: barclamps/crowbar
    git-subtree-mainline: 89fda0a56df6bdd7953f065c1f83eab117493fb4
    git-subtree-split: ea2b8e77f4ea7b048bea4932cf0292580c4ed523

commit 89fda0a56df6bdd7953f065c1f83eab117493fb4
Merge: 93b5110 7a9a831
Author: Dirk Mueller <dmuel...@suse.com>
Date:   Fri Dec 27 02:25:56 2013 -0800

    Merge pull request #1973 from vuntz/move-ceph

    Install ceph barclamp before glance
[victor@m4700 crowbar-subtree]$ git log barclamps/crowbar/
commit 5d27ba8326e092b132c6cf82365025180b17afb9
Merge: 89fda0a ea2b8e7
Author: Victor Lowther <victor.lowt...@gmail.com>
Date:   Thu Jan 2 10:17:46 2014 -0600

    Add 'barclamps/crowbar/' from commit
'ea2b8e77f4ea7b048bea4932cf0292580c4ed523'

    git-subtree-dir: barclamps/crowbar
    git-subtree-mainline: 89fda0a56df6bdd7953f065c1f83eab117493fb4
    git-subtree-split: ea2b8e77f4ea7b048bea4932cf0292580c4ed523
[victor@m4700 crowbar-subtree]$

Yes, that is really all the history visible from barclamps/crowbar.  I
expected this:

[victor@m4700 crowbar-subtree]$ cd ../crowbar/barclamps/crowbar/
[victor@m4700 crowbar]$ git log .
commit 5d27ba8326e092b132c6cf82365025180b17afb9
Merge: 89fda0a ea2b8e7
Author: Victor Lowther <victor.lowt...@gmail.com>
Date:   Thu Jan 2 10:17:46 2014 -0600

    Add 'barclamps/crowbar/' from commit
'ea2b8e77f4ea7b048bea4932cf0292580c4ed523'

    git-subtree-dir: barclamps/crowbar
    git-subtree-mainline: 89fda0a56df6bdd7953f065c1f83eab117493fb4
    git-subtree-split: ea2b8e77f4ea7b048bea4932cf0292580c4ed523
commit b9ca77abb7602cfc77c66382bf9027244b82c978
Author: Judd Maltin <j...@newgoliath.com>
Date:   Sat Dec 21 01:01:17 2013 -0500

    add curl example of creating node.

commit 70440d84a96a7eaa24f0c2c2e3d84362f8b0ab65
Author: mmitlin-dell <matthew_mit...@dell.com>
Date:   Fri Dec 20 22:50:49 2013 -0500

    Update documentation of documentation

commit a9f797c2af815ff53ee4cd829d878a603c96fcf6
Author: mmitlin-dell <matthew_mit...@dell.com>
Date:   Fri Dec 20 19:31:38 2013 -0500

    docs superimposed hierarchy (squashed)


Next, the ones I have read about but not experimented with:

git-submodule (pre-1.8.2)
HAHAHAHAHA!!! --- forget it.  Resolving merge conflicts in the submodule
gitlink is too repetitive and annoying.

git-submodule (git 1.8.2 and later):
Looks more plausible than before, mostly due to --branch, --rebase,
--remote, and --no-fetch (http://git-scm.com/docs/git-submodule).  Handling
multiple remotes might still be an area of concern, and restricting
development and build work to platforms that had a handly copy of git 1.8.2
or later could be a problem.

gitslave (http://gitslave.sourceforge.net/):
Looks like the ./dev tool replicates most of its functionality, except that
it has generic metadata intead of being tied to the exact layout of the
current Crowbar repositories.
_______________________________________________
Crowbar mailing list
Crowbar@dell.com
https://lists.us.dell.com/mailman/listinfo/crowbar
For more information: http://crowbar.github.com/

Reply via email to