From: Junio C Hamano <gitster@pobox.com>
To: Stefan Beller <sbeller@google.com>
Cc: git@vger.kernel.org, Jens.Lehmann@web.de, jrnieder@gmail.com,
Avery Pennarun <apenwarr@gmail.com>
Subject: Re: [PATCHv2 2/2] submodule update: allow '.' for branch value
Date: Thu, 28 Jul 2016 12:10:22 -0700 [thread overview]
Message-ID: <xmqq7fc5shnl.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <20160728182132.25088-1-sbeller@google.com> (Stefan Beller's message of "Thu, 28 Jul 2016 11:21:32 -0700")
Stefan Beller <sbeller@google.com> writes:
> Gerrit has a "superproject subscription" feature[1], that triggers a
> commit in a superproject that is subscribed to its submodules.
> Conceptually this Gerrit feature can be done on the client side with
> Git via:
>
> git -C <superproject> submodule update --remote --force
> git -C <superproject> commit -a -m "Update submodules"
> git -C <superproject> push
>
> for each branch in the superproject.
Which I imagine would be useful if you only have one submodule. If
you work on submodules A and B and then want to give the updated
superproject that binds the latest in both A and B as an atomic
update, the three lines above would not quite work, no?
> To ease the configuration in Gerrit
> a special value of "." has been introduced for the submodule.<name>.branch
> to mean the same branch as the superproject[2], such that you can create a
> new branch on both superproject and the submodule and this feature
> continues to work on that new branch.
>
> Now we have find projects in the wild with such a .gitmodules file.
That's annoying.
> To have Git working well with these, we imitate the behavior and
> look up the superprojects branch name if the submodules branch is
> configured to ".". In projects that do not use Gerrit, this value
> whould be never configured as "." is not a valid branch name.
I find that the last sentence is somewhat misleading. I agree it is
justifiable that using "." as the name to trigger a new (to us)
feature is safe, because such a setting wouldn't have meant anything
useful without this change, but I initially misread it and thought
you added "are we using Gerrit? Error out if we are not" logic,
which is not the case here.
> diff --git a/git-submodule.sh b/git-submodule.sh
> index 4ec7546..1eb33ad 100755
> --- a/git-submodule.sh
> +++ b/git-submodule.sh
> @@ -590,7 +590,6 @@ cmd_update()
>
> name=$(git submodule--helper name "$sm_path") || exit
> url=$(git config submodule."$name".url)
> - branch=$(get_submodule_config "$name" branch master)
> if ! test -z "$update"
> then
> update_module=$update
> @@ -616,6 +615,14 @@ cmd_update()
>
> if test -n "$remote"
> then
> + branch=$(get_submodule_config "$name" branch master)
> + if test "$branch" = "."
> + then
> + if ! branch=$(git symbolic-ref --short -q HEAD)
> + then
> + die "$(eval_gettext "submodule branch configured to inherit branch from superproject, but it's not on any branch")"
> + fi
> + fi
I see that you narrowed the scope of "$branch" (which is only used
when $remote exists), but it is a bit annoying to see that change
mixed with "now a dot means something different" change.
I wonder if the above 8-line block wants to be encapsulated to
become a part of "git submodule--helper" interface, though. IOW,
branch=$(git submodule--helper branch "$name") or something?
> +test_expect_success 'submodule update --remote should fetch upstream changes with .' '
> + (cd super &&
> + git config -f .gitmodules submodule."submodule".branch "." &&
> + git add .gitmodules &&
> + git commit -m "submodules: update from the respective superproject branch"
> + ) &&
> (cd submodule &&
> + echo line4a >> file &&
> + git add file &&
> + test_tick &&
> + git commit -m "upstream line4a" &&
> + git checkout -b test-branch &&
> + test_commit on-test-branch
> + ) &&
> + (cd super &&
> + git submodule update --remote --force submodule &&
> + (cd submodule &&
> + test "$(git log -1 --oneline)" = "$(GIT_DIR=../../submodule/.git git log -1 --oneline master)"
A few issues:
* A crash in "git log" would not be noticed with this. Perhaps
git log -1 --oneline $one_way_to_invoke >expect &&
git log -1 --oneline $the_other_way >actual &&
test_cmp expect actual
would be better?
* What exactly is this testing? The current branch (in submodule)
pointing at the same commit as the tip of 'master'? Or the
current branch _is_ 'master'?
* What exactly is the reason why one has GIT_DIR=... and the other
does not? I do not think this a place to test that "gitdir: "
in .git points at the right place, so it must be testing
something else, but I cannot guess.
> + ) &&
> git checkout -b test-branch &&
> + git submodule update --remote --force submodule &&
> + (cd submodule &&
> + test "$(git log -1 --oneline)" = "$(GIT_DIR=../../submodule/.git git log -1 --oneline test-branch)"
> + ) &&
> + git checkout master &&
> + git branch -d test-branch
> + )
> +'
> +
> +test_expect_success 'branch = . does not confuse the rest of update' '
> + (cd super &&
> + git checkout --detach &&
> + # update is not confused by branch="." even if the the superproject
> + # is not on any branch currently
> + git submodule update &&
> + git revert HEAD &&
"revert" is rather unusual thing to see in the test. Also I am not
sure why cmd_update that now has an explicit check to die when
branch is set to "." and the head is detached is expected "not" to
be confused. Perhaps I misread the main part of the patch?
Puzzled.
> + git checkout master
> + )
> +'
> +
> +test_expect_success 'local config should override .gitmodules branch' '
> + (cd submodule &&
> + git checkout test-branch &&
> echo line5 >> file &&
> git add file &&
> test_tick &&
next prev parent reply other threads:[~2016-07-28 19:10 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-28 17:26 [PATCH 0/2] submodule update: allow '.' for branch value Stefan Beller
2016-07-28 17:26 ` [PATCH 1/2] t7406: correct depth test in shallow test Stefan Beller
2016-07-28 18:39 ` Junio C Hamano
2016-07-28 18:47 ` Stefan Beller
2016-07-28 19:24 ` Stefan Beller
2016-07-28 19:52 ` Junio C Hamano
2016-07-28 17:26 ` [PATCH 2/2] submodule update: allow '.' for branch value Stefan Beller
2016-07-28 18:21 ` [PATCHv2 " Stefan Beller
2016-07-28 19:10 ` Junio C Hamano [this message]
2016-07-28 19:44 ` Stefan Beller
2016-07-28 20: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=xmqq7fc5shnl.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox.com \
--cc=Jens.Lehmann@web.de \
--cc=apenwarr@gmail.com \
--cc=git@vger.kernel.org \
--cc=jrnieder@gmail.com \
--cc=sbeller@google.com \
/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.