Re: [PATCH] git-submodule add: Record branch name in .gitmodules
- From
W. Trevor King <wking@tremily.us>
- Date
- Oct 22, 2012, 22:55 UTC
- Message-ID
- <20121022225546.GO23101@odin.tremily.us>
- In-Reply-To
- <CABURp0pqg7XC6makK2OcundMabV9AtcBNGNK6Q0TMZfJbt3anw@mail.gmail.com>
On Mon, Oct 22, 2012 at 06:03:53PM -0400, Phil Hord wrote:
Show 5 quoted lines
> 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.”
Show 5 quoted lines
> 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 barUgh, 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