On Mon, Oct 22, 2012 at 06:03:53PM -0400, Phil Hord wrote: > Some projects now use the 'branch' config value to record the tracking > branch for the submodule. Some ascribe different meaning to the > configuration if the value is given vs. undefined. For example, see > the Gerrit submodule-subscription mechanism. This change will cause > those workflows to behave differently than they do now.
For those to lazy to hunt down a reference, Gerrit uses
submodule.$name.branch to
“indicate the branch of a submodule project that when updated will
trigger automatic update of its registered gitlink.” [1]
They also have some extra sauce:
“The branch value could be '.' if the submodule project branch has
the same name as the destination branch of the commit having
gitlinks/.gitmodules file.
…
Any git submodules which are added and not have the branch field
available in the .gitmodules file will not be subscribed by Gerrit
to automatically update the superproject.”
> I do like the idea, but I wish it had a different name for the
> recording. Maybe --record-branch=${BRANCH} as an extra switch so the
> action is explicitly requested.
>
> git submodule add --branch=master --record-branch=master foo bar
Ugh, I don't want to retype the branch name whenever I do this.
<brainstorming>
How about -r/--record, with the recorded name being optional?
--record-branch[=<recorded_name>]
This would satisfy Gerrit users that wanted to use '.', but also
satisfy me with:
git submodule add -rb=master foo bar
However, there is a change that people would see that, and then use
git submodule add -r -b=master foo bar
which would checkout the HEAD from foo and store `-b=master` in
submodule.$name.branch.
A more verbose, but less dangerous, option would be a boolean
-r/--record that enables the recording of whatever was passed to
-b/--branch. This looses the flexibility of running something like
git submodule add --branch=master --record-branch=. foo bar
but the Gerrit folks have gotten along OK without any branch recording
so far ;). They can keep setting '.' the same way they always have.
</brainstorming>
On a tangentially related note, it would be nice to set environment
variables for each of the settings in submodule.$name during a foreach
call. Then you could use
git submodule foreach 'git checkout $branch && git pull'
Perhaps you'd want to blacklist/whitelist or downcase settings names
to avoid things like
[submodule "foo"]
PATH = /my/rootkit/
but the update line is much cleaner.
Cheers,
Trevor
[1]:
https://gerrit.googlesource.com/gerrit/+/master/Documentation/user-submodules.txt
--
This email may be signed or encrypted with GnuPG (http://www.gnupg.org).
For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy
signature.asc
Description: OpenPGP digital signature

