submodule update: run custom update script for initial populating as well

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@google.com> Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Stefan Beller committed Jan 25, 2017 at 15:48 UTC e7b37caf4feace4ee799570285b4699b23e0581f
2 files changed +16 -1
git-submodule.sh
+4 -1
@@ -605,7 +605,10 @@ cmd_update()
605 if test $just_cloned -eq 1
606 then
607 subsha1=
608 - update_module=checkout
608 + case "$update_module" in
609 + merge | rebase | none)
610 + update_module=checkout ;;
611 + esac
612 else
613 subsha1=$(sanitize_submodule_env; cd "$sm_path" &&
614 git rev-parse --verify HEAD) ||
t/t7406-submodule-update.sh
+12
@@ -424,6 +424,16 @@ test_expect_success 'submodule update - command in .git/config catches failure -
424 test_i18ncmp actual expect
425 '
426
427 +test_expect_success 'submodule update - command run for initial population of submodule' '
428 + cat <<-\ EOF >expect
429 + Execution of '\''false $submodulesha1'\'' failed in submodule path '\''submodule'\''
430 + EOF &&
431 + rm -rf super/submodule &&
432 + test_must_fail git -C super submodule update >../actual &&
433 + test_cmp expect actual &&
434 + git -C super submodule update --checkout
435 +'
436 +
437 cat << EOF >expect
438 Execution of 'false $submodulesha1' failed in submodule path '../super/submodule'
439 Failed to recurse into submodule path '../super'
@@ -476,6 +486,7 @@ test_expect_success 'submodule init picks up merge' '
486 '
487
488 test_expect_success 'submodule update --merge - ignores --merge for new submodules' '
489 + test_config -C super submodule.submodule.update checkout &&
490 (cd super &&
491 rm -rf submodule &&
492 git submodule update submodule &&
@@ -488,6 +499,7 @@ test_expect_success 'submodule update --merge - ignores --merge for new submod
499 '
500
501 test_expect_success 'submodule update --rebase - ignores --rebase for new submodules' '
502 + test_config -C super submodule.submodule.update checkout &&
503 (cd super &&
504 rm -rf submodule &&
505 git submodule update submodule &&