From: Heiko Voigt <hvoigt@hvoigt.net>
To: "W. Trevor King" <wking@tremily.us>
Cc: Junio C Hamano <gitster@pobox.com>, Git <git@vger.kernel.org>,
Jeff King <peff@peff.net>, Phil Hord <phil.hord@gmail.com>,
Shawn Pearce <spearce@spearce.org>,
Jens Lehmann <Jens.Lehmann@web.de>,
Nahor <nahor.j+gmane@gmail.com>
Subject: Re: Re: [PATCH v4 0/4] git-submodule add: Add --local-branch option
Date: Wed, 28 Nov 2012 00:28:58 +0100 [thread overview]
Message-ID: <20121127232858.GA4742@book.hvoigt.net> (raw)
In-Reply-To: <20121127190105.GQ10656@odin.tremily.us>
Hi,
On Tue, Nov 27, 2012 at 02:01:05PM -0500, W. Trevor King wrote:
> On Tue, Nov 27, 2012 at 07:31:25PM +0100, Heiko Voigt wrote:
> The v4 series leaves the remote branch amigious, but it helps you
> point the local branch at the right hash so that future calls to
>
> $ git submodule foreach 'git pull'
>
> can use the branch's .git/modules/<name>/config settings.
But IMO thats the functionality which should be implemented in submodule
update and not left to the user.
> > I would think more of some convention like:
> >
> > $ git checkout -t origin/$branch
> >
> > when first initialising the submodule with e.g.
> >
> > $ git submodule update --init --branch
> >
> > Then later calls of
> >
> > $ git submodule update --branch
> >
> > would have a branch configured to pull from. I imagine that results in
> > a similar behavior gerrit is doing on the server side?
>
> That sounds like it's doing pretty much the same thing. Can you think
> of a test that would distinguish it from my current v4 implementation?
Well the main difference is that gerrit is automatically updating the
superproject AFAIK. I would like it if we could implement the same
workflow support in the submodule script. It seems to me that this is
already proven to be useful workflow.
I do not have a test but a small draft diff (completely untested, quick and
dirty) to illustrate the approach I am talking about.
You can find the whole change at
https://github.com/hvoigt/git/commits/hv/floating_submodules_draft
and the interesting patch for easy commenting below[1].
> > How about reusing the -b|--branch option for add? Since we only change
> > the behavior when submodule.$name.update is set to branch it seems
> > reasonable to me. Opinions?
>
> That was the approach I used in v1, but people were concerned that we
> would be stomping on previously unclaimed config space. Since noone
> has pointed out other uses besides Gerrit's very similar case, I'm not
> sure if that is still an issue.
Could you point me to that mail? I cannot seem to find it in my archive.
> > > Because you need to recurse through submodules for `update --branch`
> > > even if "$subsha1" == "$sha1", I had to amend the conditional
> > > controlling that block. This broke one of the existing tests, which I
> > > "fixed" in patch 4. I think a proper fix would involve rewriting
> > >
> > > (clear_local_git_env; cd "$sm_path" &&
> > > ( (rev=$(git rev-list -n 1 $sha1 --not --all 2>/dev/null) &&
> > > test -z "$rev") || git-fetch)) ||
> > > die "$(eval_gettext "Unable to fetch in submodule path '\$sm_path'")"
> > >
> > > but I'm not familiar enough with rev-list to want to dig into that
> > > yet. If feedback for the earlier three patches is positive, I'll work
> > > up a clean fix and resubmit.
> >
> > You probably need to separate your handling here. The comparison of the
> > currently checked out sha1 and the recorded sha1 is an optimization
> > which skips unnecessary fetching in case the submodules commits are
> > already correct. This code snippet checks whether the to be checked out
> > sha1 is already local and also skips the fetch if it is. We should not
> > break that.
>
> Agreed. However, determining if the target $sha1 is local should have
> nothing to do with the current checked out $subsha1.
See my draft or the diff below for an illustration of the splitup.
Cheers Heiko
[1]
diff --git a/git-submodule.sh b/git-submodule.sh
index 9ad4370..3fa1465 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -183,6 +183,7 @@ module_clone()
sm_path=$1
url=$2
reference="$3"
+ branch="$4"
quiet=
if test -n "$GIT_QUIET"
then
@@ -209,6 +210,8 @@ module_clone()
clear_local_git_env
git clone $quiet -n ${reference:+"$reference"} \
--separate-git-dir "$gitdir" "$url" "$sm_path"
+ test -n "$branch" && (cd $sm_path &&
+ git checkout -t origin/$branch)
) ||
die "$(eval_gettext "Clone of '\$url' into submodule path '\$sm_path' failed")"
fi
@@ -361,7 +364,7 @@ Use -f if you really want to add it." >&2
else
- module_clone "$sm_path" "$realrepo" "$reference" || exit
+ module_clone "$sm_path" "$realrepo" "$reference" "$local_branch" || exit
(
clear_local_git_env
cd "$sm_path" &&
@@ -577,6 +580,12 @@ handle_on_demand_update () {
fi
}
+handle_tracking_branch_update () {
+ (clear_local_git_env; cd "$sm_path" &&
+ git-checkout $branch && git-pull --ff-only) ||
+ die "$(eval_gettext "Unable to pull branch '\$branch' in submodule path '\$sm_path'")"
+}
+
#
# Update each submodule path to correct revision, using clone and checkout as needed
#
@@ -648,6 +657,7 @@ cmd_update()
cloned_modules=
module_list "$@" | {
err=
+ floating_submodules=
while read mode sha1 stage sm_path
do
die_if_unmatched "$mode"
@@ -684,7 +694,7 @@ Maybe you want to use 'update --init'?")"
if ! test -d "$sm_path"/.git -o -f "$sm_path"/.git
then
- module_clone "$sm_path" "$url" "$reference"|| exit
+ module_clone "$sm_path" "$url" "$reference" "$branch" || exit
cloned_modules="$cloned_modules;$name"
subsha1=
else
@@ -693,7 +703,13 @@ Maybe you want to use 'update --init'?")"
die "$(eval_gettext "Unable to find current revision in submodule path '\$sm_path'")"
fi
- handle_on_demand_update
+ if test "$update_module" = "branch"
+ then
+ handle_tracking_branch_update
+ floating_submodules="$floating_submodules $sm_path"
+ else
+ handle_on_demand_update
+ fi
if test -n "$recursive"
then
@@ -727,6 +743,11 @@ Maybe you want to use 'update --init'?")"
IFS=$OIFS
exit 1
fi
+ if test -n "$floating_submodules"
+ then
+ git add $floating_submodules &&
+ git commit -m "Updated submodules"
+ fi
}
}
next prev parent reply other threads:[~2012-11-27 23:29 UTC|newest]
Thread overview: 156+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-22 16:34 [PATCH] git-submodule add: Record branch name in .gitmodules W. Trevor King
[not found] ` <CABURp0pqg7XC6makK2OcundMabV9AtcBNGNK6Q0TMZfJbt3anw@mail.gmail.com>
2012-10-22 22:55 ` W. Trevor King
2012-10-24 18:12 ` Phil Hord
2012-10-25 1:12 ` W. Trevor King
2012-10-26 13:37 ` Jeff King
2012-10-23 19:16 ` Nahor
2012-10-23 19:44 ` W. Trevor King
2012-10-23 20:44 ` W. Trevor King
2012-10-23 21:57 ` [PATCH v2] git-submodule add: Add -r/--record option W. Trevor King
2012-10-24 19:15 ` Jens Lehmann
2012-10-25 0:53 ` W. Trevor King
2012-10-28 20:48 ` Jens Lehmann
2012-10-28 21:16 ` W. Trevor King
2012-10-28 21:59 ` Shawn Pearce
2012-10-28 22:34 ` W. Trevor King
2012-10-29 5:34 ` Jeff King
2012-10-29 10:45 ` W. Trevor King
2012-10-29 10:58 ` Jeff King
2012-10-29 11:29 ` W. Trevor King
2012-10-29 11:43 ` Jeff King
2012-10-29 17:38 ` Phil Hord
2012-10-29 21:36 ` Jeff King
2012-10-29 22:21 ` Phil Hord
2012-10-29 22:27 ` Jeff King
2012-11-09 3:35 ` [PATCH v3 0/3] " W. Trevor King
2012-11-09 3:35 ` [PATCH v3 1/3] " W. Trevor King
2012-11-09 7:34 ` Junio C Hamano
2012-11-09 16:29 ` Heiko Voigt
2012-11-10 19:02 ` W. Trevor King
2012-11-17 15:04 ` Heiko Voigt
2012-11-17 19:20 ` W. Trevor King
2012-11-17 21:31 ` Heiko Voigt
2012-11-17 22:00 ` W. Trevor King
2012-11-20 0:49 ` Junio C Hamano
2012-11-20 1:16 ` W. Trevor King
2012-11-20 5:39 ` Junio C Hamano
2012-11-20 12:19 ` W. Trevor King
2012-11-20 19:52 ` Junio C Hamano
2012-11-23 15:55 ` Heiko Voigt
2012-11-23 16:23 ` W. Trevor King
2012-11-23 16:30 ` W. Trevor King
2012-11-23 17:54 ` W. Trevor King
2012-11-26 21:00 ` [PATCH v4 0/4] git-submodule add: Add --local-branch option W. Trevor King
2012-11-26 21:00 ` [PATCH v4 1/4] " W. Trevor King
2012-11-26 21:00 ` [PATCH v4 2/4] git-submodule init: Record submodule.<name>.branch in repository config W. Trevor King
2012-11-27 23:19 ` Jens Lehmann
2012-11-28 0:40 ` W. Trevor King
2012-11-30 17:53 ` [RFC] remove/deprecate 'submodule init' and 'sync' W. Trevor King
2012-11-30 18:17 ` W. Trevor King
2012-11-30 23:52 ` Phil Hord
2012-12-01 12:48 ` W. Trevor King
2012-12-01 15:42 ` Jens Lehmann
2012-12-01 15:56 ` Jens Lehmann
2012-12-01 16:37 ` W. Trevor King
2012-12-01 16:45 ` [PATCH] submodule: add 'deinit' command Jens Lehmann
2012-12-02 2:00 ` Junio C Hamano
2012-12-02 19:55 ` Jens Lehmann
2012-12-03 7:58 ` Junio C Hamano
2012-12-04 21:48 ` [PATCH v2] " Jens Lehmann
2012-12-04 23:06 ` Junio C Hamano
2012-12-12 15:08 ` Michael J Gruber
2012-12-12 17:22 ` Jens Lehmann
2012-12-12 19:32 ` Junio C Hamano
2012-12-12 22:25 ` Jens Lehmann
2012-12-12 22:34 ` Junio C Hamano
2012-12-12 23:09 ` W. Trevor King
2012-12-12 23:35 ` Junio C Hamano
2012-12-13 0:28 ` W. Trevor King
2012-12-13 15:47 ` Marc Branchaud
2012-12-01 15:38 ` [RFC] remove/deprecate 'submodule init' and 'sync' Jens Lehmann
2012-12-01 16:30 ` W. Trevor King
2012-12-01 17:25 ` Jens Lehmann
2012-12-01 17:49 ` W. Trevor King
2012-12-01 18:04 ` Jens Lehmann
2012-12-01 18:16 ` W. Trevor King
2012-12-02 19:09 ` W. Trevor King
2012-12-02 20:29 ` Jens Lehmann
2012-12-02 21:11 ` W. Trevor King
2012-12-01 16:54 ` W. Trevor King
2012-12-03 15:38 ` W. Trevor King
2012-11-26 21:00 ` [PATCH v4 3/4] git-submodule update: Add --branch option W. Trevor King
2012-11-27 18:51 ` Heiko Voigt
2012-11-27 20:21 ` W. Trevor King
2012-11-26 21:00 ` [PATCH v4 4/4] Hack fix for 'submodule update does not fetch already present commits' W. Trevor King
2012-11-27 18:31 ` [PATCH v4 0/4] git-submodule add: Add --local-branch option Heiko Voigt
2012-11-27 19:04 ` W. Trevor King
2012-11-27 19:16 ` Heiko Voigt
2012-11-27 19:01 ` W. Trevor King
2012-11-27 21:18 ` [PATCH v4 4/4] Hack fix for 'submodule update does not fetch already present commits' W. Trevor King
2012-11-27 23:28 ` Heiko Voigt [this message]
2012-11-28 2:42 ` Re: [PATCH v4 0/4] git-submodule add: Add --local-branch option W. Trevor King
2012-11-29 18:51 ` Phil Hord
2012-11-23 17:24 ` [PATCH v3 1/3] git-submodule add: Add -r/--record option Sascha Cunz
2012-11-23 16:03 ` Heiko Voigt
2012-11-28 13:09 ` [PATCH v4 0/4] git-submodule add: Add --local-branch option (summary) W. Trevor King
2012-11-28 16:53 ` W. Trevor King
2012-11-28 19:30 ` [PATCH v5 0/2] submodule update: add --remote for submodule's upstream changes W. Trevor King
2012-11-28 19:30 ` [PATCH v5 1/2] " W. Trevor King
2012-11-28 19:30 ` [PATCH v5 2/2] submodule add: If --branch is given, record it in .gitmodules W. Trevor King
2012-11-29 16:12 ` [RFC] git-submodule update: Add --commit option W. Trevor King
2012-11-29 16:21 ` W. Trevor King
2012-11-29 16:27 ` W. Trevor King
2012-11-29 19:13 ` [PATCH v5 0/2] submodule update: add --remote for submodule's upstream changes W. Trevor King
2012-11-30 1:11 ` Phil Hord
2012-11-30 3:27 ` W. Trevor King
2012-12-02 3:17 ` [PATCH v6 0/4] " W. Trevor King
2012-12-02 3:17 ` [PATCH v6 1/4] submodule: add get_submodule_config helper funtion W. Trevor King
2012-12-03 19:30 ` Junio C Hamano
2012-12-04 0:17 ` W. Trevor King
2012-12-11 18:58 ` [PATCH v7 0/3] submodule update: add --remote for submodule's upstream changes W. Trevor King
2012-12-11 18:58 ` [PATCH v7 1/3] submodule: add get_submodule_config helper funtion W. Trevor King
2012-12-11 18:58 ` [PATCH v7 2/3] submodule update: add --remote for submodule's upstream changes W. Trevor King
2012-12-12 17:43 ` Phil Hord
2012-12-12 19:54 ` Junio C Hamano
2012-12-12 23:02 ` W. Trevor King
2012-12-19 16:03 ` [PATCH v8 0/3] " wking
2012-12-19 16:03 ` [PATCH v8 1/3] submodule: add get_submodule_config helper funtion wking
2012-12-21 8:20 ` Heiko Voigt
2012-12-21 11:04 ` W. Trevor King
2012-12-19 16:03 ` [PATCH v8 2/3] submodule update: add --remote for submodule's upstream changes wking
2012-12-19 16:03 ` [PATCH v8 3/3] submodule add: If --branch is given, record it in .gitmodules wking
2012-12-19 17:43 ` Junio C Hamano
2012-12-21 8:18 ` [PATCH v8 0/3] submodule update: add --remote for submodule's upstream changes Heiko Voigt
2012-12-11 18:58 ` [PATCH v7 3/3] submodule add: If --branch is given, record it in .gitmodules W. Trevor King
2012-12-12 5:42 ` [PATCH v7 0/3] submodule update: add --remote for submodule's upstream changes Junio C Hamano
2012-12-12 15:24 ` W. Trevor King
2012-12-12 18:19 ` Junio C Hamano
2012-12-12 22:44 ` W. Trevor King
2012-12-02 3:17 ` [PATCH v6 2/4] " W. Trevor King
2012-12-03 16:46 ` Junio C Hamano
2012-12-03 18:15 ` W. Trevor King
2012-12-03 18:38 ` W. Trevor King
2012-12-03 20:29 ` Junio C Hamano
2012-12-02 3:17 ` [PATCH v6 3/4] submodule add: If --branch is given, record it in .gitmodules W. Trevor King
2012-12-02 3:17 ` [PATCH v6 4/4] submodule update: add submodule.<name>.remote config option W. Trevor King
2012-12-02 19:32 ` [PATCH v5 0/2] submodule update: add --remote for submodule's upstream changes Jens Lehmann
2012-11-10 18:44 ` [PATCH v3 1/3] git-submodule add: Add -r/--record option W. Trevor King
2012-11-11 10:33 ` Junio C Hamano
2012-11-11 15:00 ` W. Trevor King
2012-11-17 15:30 ` Heiko Voigt
2012-11-28 19:42 ` W. Trevor King
2012-11-28 20:08 ` Junio C Hamano
[not found] ` <20121109104607.GC4406@ftbfs.org>
2012-11-10 19:11 ` W. Trevor King
2012-11-09 3:35 ` [PATCH v3 2/3] git-submodule foreach: export .gitmodules settings as variables W. Trevor King
2012-11-09 16:45 ` Heiko Voigt
2012-11-10 19:21 ` W. Trevor King
2012-11-09 3:35 ` [PATCH v3 3/3] git-submodule: Motivate --record with an example use case W. Trevor King
2012-10-25 22:14 ` [PATCH v2] git-submodule add: Add -r/--record option W. Trevor King
2012-10-26 14:00 ` Jeff King
2012-10-23 21:45 ` [PATCH] git-submodule add: Record branch name in .gitmodules Nahor
2012-10-23 20:36 ` Jens Lehmann
2012-10-23 20:55 ` W. Trevor King
2012-10-23 22:02 ` Nahor
2012-10-24 19:10 ` Jens Lehmann
-- strict thread matches above, loose matches on Subject: below --
2012-11-28 18:28 [PATCH] submodule update: document exisiting -r form for --rebase W. Trevor King
2012-11-28 19:02 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20121127232858.GA4742@book.hvoigt.net \
--to=hvoigt@hvoigt.net \
--cc=Jens.Lehmann@web.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=nahor.j+gmane@gmail.com \
--cc=peff@peff.net \
--cc=phil.hord@gmail.com \
--cc=spearce@spearce.org \
--cc=wking@tremily.us \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.