On 01/25, Stefan Beller wrote: > In 1b4735d9f3 (submodule: no [--merge|--rebase] when newly cloned, > 2011-02-17), all actions were defaulted to checkout for populating > a submodule initially, because merging or rebasing makes no sense > in that situation. > > Other commands however do make sense, such as the custom command > that was added later (6cb5728c43, submodule update: allow custom > command to update submodule working tree, 2013-07-03). > > I am unsure about the "none" command, as I can see an initial > checkout there as a useful thing. On the other hand going strictly > by our own documentation, we should do nothing in case of "none" > as well, because the user asked for it. > > Reported-by: Han-Wen Nienhuys <hanwen@xxxxxxxxxx> > Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> > --- > git-submodule.sh | 5 ++++- > t/t7406-submodule-update.sh | 15 +++++++++++++++ > 2 files changed, 19 insertions(+), 1 deletion(-) > > diff --git a/git-submodule.sh b/git-submodule.sh > index 9788175979..63fc4fe9bc 100755 > --- a/git-submodule.sh > +++ b/git-submodule.sh > @@ -607,7 +607,10 @@ cmd_update() > if test $just_cloned -eq 1 > then > subsha1= > - update_module=checkout > + case "$update_module" in > + merge | rebase | none) > + update_module=checkout ;; > + esac > else > subsha1=$(sanitize_submodule_env; cd "$sm_path" && > git rev-parse --verify HEAD) || > diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh > index 725bbed1f8..2f83243c7d 100755 > --- a/t/t7406-submodule-update.sh > +++ b/t/t7406-submodule-update.sh > @@ -441,6 +441,19 @@ test_expect_success 'submodule update - command in .git/config catches failure - > test_i18ncmp actual expect > ' > > +test_expect_success 'submodule update - command run for initial population of submodule' ' > + cat <<-\ EOF >expect > + Execution of '\''false $submodulesha1'\'' failed in submodule path '\''submodule'\'' > + EOF > + ( > + cd super && > + rm -rf submodule > + test_must_fail git submodule update >../actual > + ) > + test_cmp expect actual > + git -C super submodule update --checkout > +' You can probably get away without the subshell: rm -rf super/submodule test_must_fail git -C super submodule upsate >actual > + > cat << EOF >expect > Execution of 'false $submodulesha1' failed in submodule path '../super/submodule' > Failed to recurse into submodule path '../super' > @@ -493,6 +506,7 @@ test_expect_success 'submodule init picks up merge' ' > ' > > test_expect_success 'submodule update --merge - ignores --merge for new submodules' ' > + test_config -C super submodule.submodule.update checkout && > (cd super && > rm -rf submodule && > git submodule update submodule && > @@ -505,6 +519,7 @@ test_expect_success 'submodule update --merge - ignores --merge for new submod > ' > > test_expect_success 'submodule update --rebase - ignores --rebase for new submodules' ' > + test_config -C super submodule.submodule.update checkout && > (cd super && > rm -rf submodule && > git submodule update submodule && > -- > 2.11.0.495.g04f60290a0.dirty > -- Brandon Williams