Re: [PATCH v4 3/4] git-submodule update: Add --branch option
- From
W. Trevor King <wking@tremily.us>
- Date
- Nov 27, 2012, 20:21 UTC
- Message-ID
- <20121127202103.GD15213@odin.tremily.us>
- In-Reply-To
- <20121127185142.GB4185@book.hvoigt.net>
On Tue, Nov 27, 2012 at 07:51:42PM +0100, Heiko Voigt wrote:
Show 23 quoted lines
> On Mon, Nov 26, 2012 at 04:00:18PM -0500, W. Trevor King wrote: > > -b:: > > --branch:: > > - Branch of repository to add as submodule. > > + When used with the add command, gives the branch of repository to > > + add as submodule. > > ++ > > +When used with the update command, checks out a branch named > > +`submodule.<name>.branch` (as set by `--local-branch`) pointing at the > > +current HEAD SHA-1. This is useful for commands like `update > > +--rebase` that do not work on detached heads. > > Since you are reusing this option for update it further convinces me > that reusing it for add makes sense and simplifies the logic for users. > > I think an optional argument for --branch would be nice in the update > case: > > $ git submodule update --branch=master > > would then allow a user that has not configured anything (except the > branch tracking info in the submodule of course) to pull all submodules > master branches.
Sounds good to me. Remember that this is checking the branch and pointing it at $sha1 (preparing for the pull), not pulling remote branches. The pull happens in a later
$ git submodules foreach 'git pull'
Show 13 quoted lines
> > diff --git a/git-submodule.sh b/git-submodule.sh > > index c51b6ae..28eb4b1 100755 > > --- a/git-submodule.sh > > +++ b/git-submodule.sh > > @@ -627,7 +631,7 @@ Maybe you want to use 'update --init'?")" > > die "$(eval_gettext "Unable to find current revision in submodule path '\$sm_path'")" > > fi > > > > - if test "$subsha1" != "$sha1" -o -n "$force" > > + if test "$subsha1" != "$sha1" -o -n "$force" -o "$update_module" = "branch" > > As said before I think separating your code from the current update > logic will simplify the handling below.
This felt less invasive (it avoids duplicating the recursion logic), but I don't mind breaking it into a separate function/block.
Show 11 quoted lines
> > must_die_on_failure= > > case "$update_module" in > > rebase) > > command="git rebase" > > - die_msg="$(eval_gettext "Unable to rebase '\$sha1' in submodule path '\$sm_path'")" > > + die_msg="$(eval_gettext "Unable to rebase '\$sha1' in submodule path '\$sm_path'")" > > say_msg="$(eval_gettext "Submodule path '\$sm_path': rebased into '\$sha1'")" > > - must_die_on_failure=yes > > + must_die_on_failure=yes > > Please always cleanup whitespace changes.
Oops, sloppy me. Will fix.
Show 13 quoted lines
> > then
> > - die_with_status 2 "$die_msg"
> > - else
> > - err="${err};$die_msg"
> > - continue
> > + if (clear_local_git_env; cd "$sm_path" &&
> > + git branch -f "$branch" "$sha1" &&
> > + git checkout "$branch")
>
> You wrote in earlier emails that you wanted to protect the user from
> non-fastforward changes. So I would expect a
>
> $ git pull --ff-onlyI'm not pulling here, I'm doing a regular `submodule update`, and after that's done I checkout the branch pointing at the $sha1 to which the branch was just updated. All the submodule-state-clobbering caveats of a usual `submodule update` still apply to this new `submodule update --branch`, and I'm fine with that.
> BTW, I am more and more convinced that an automatically manufactured > commit on update with --branch should be the default.
Again, there's nothing to update. The pull happens in a separate step.
Cheers, Trevor
-- 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