submodule foreach: fix recursion of options
authorMorian Sonnet <moriansonnet@gmail.com>
Mon, 24 Jun 2019 20:26:55 +0000 (22:26 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 25 Jun 2019 18:17:53 +0000 (11:17 -0700)
commit30db18b148c4951deb2c870b5243fb5b18ecb5ed
tree9775a46275e8c266f075daa1ad4ce3f7d340bb1f
parent0d0ac3826a3bbb9247e39e12623bbcfdd722f24c
submodule foreach: fix recursion of options

Calling

    git submodule foreach --recursive <subcommand> --<option>

leads to an error stating that the option --<option> is unknown to
submodule--helper. That is of course only, when <option> is not a valid
option for git submodule foreach.

The reason for this is, that above call is internally translated into a
call to submodule--helper:

    git submodule--helper foreach --recursive \
        -- <subcommand> --<option>

This call starts by executing the subcommand with its option inside the
first level submodule and continues by calling the next iteration of
the submodule foreach call

    git --super-prefix <submodulepath> submodule--helper \
      foreach --recursive <subcommand> --<option>

inside the first level submodule. Note that the double dash in front of
the subcommand is missing.

This problem starts to arise only recently, as the
PARSE_OPT_KEEP_UNKNOWN flag for the argument parsing of git submodule
foreach was removed in commit a282f5a906. Hence, the unknown option is
complained about now, as the argument parsing is not properly ended by
the double dash.

This commit fixes the problem by adding the double dash in front of the
subcommand during the recursion.

Signed-off-by: Morian Sonnet <moriansonnet@googlemail.com>
Acked-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/submodule--helper.c
t/t7407-submodule-foreach.sh