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 <han...@google.com>
> Signed-off-by: Stefan Beller <sbel...@google.com>
> ---
>  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

Reply via email to