Re: [PATCH v3 2/2] submodule: don't print status output with ignore=all
Am 01.09.2013 22:06, schrieb brian m. carlson:
Show 14 quoted lines
> git status prints information for submodules, but it should ignore the status of
> those which have submodule.<name>.ignore set to all. Fix it so that it does
> properly ignore those which have that setting either in .git/config or in
> .gitmodules.
>
> Not ignored are submodules that are added, deleted, or moved (which is
> essentially a combination of the first two) because it is not easily possible to
> determine the old path once a move has occurred, nor is it easily possible to
> detect which adds and deletions are moves and which are not. This also
> preserves the previous behavior of always listing modules which are to be
> deleted.
>
> Tests are included which verify that this change has no effect on git submodule
> summary without the --for-status option.
Thanks, that fixes the bug Matthieu noticed which is now tested for.
I only have some nits concerning the new tests, please see below.
Show 66 quoted lines
> Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
> ---
> git-submodule.sh | 7 +++++++
> t/t7401-submodule-summary.sh | 30 ++++++++++++++++++++++++++++++
> t/t7508-status.sh | 4 ++--
> 3 files changed, 39 insertions(+), 2 deletions(-)
>
> diff --git a/git-submodule.sh b/git-submodule.sh
> index 38520db..004b21c 100755
> --- a/git-submodule.sh
> +++ b/git-submodule.sh
> @@ -1036,6 +1036,13 @@ cmd_summary() {
> do
> # Always show modules deleted or type-changed (blob<->module)
> test $status = D -o $status = T && echo "$sm_path" && continue
> + # Respect the ignore setting for --for-status.
> + if test -n "$for_status"
> + then
> + name=$(module_name "$sm_path")
> + ignore_config=$(get_submodule_config "$name" ignore none)
> + test $status != A -a $ignore_config = all && continue
> + fi
> # Also show added or modified modules which are checked out
> GIT_DIR="$sm_path/.git" git-rev-parse --git-dir >/dev/null 2>&1 &&
> echo "$sm_path"
> diff --git a/t/t7401-submodule-summary.sh b/t/t7401-submodule-summary.sh
> index ac2434c..ca9441e 100755
> --- a/t/t7401-submodule-summary.sh
> +++ b/t/t7401-submodule-summary.sh
> @@ -104,6 +104,36 @@ EOF
> test_cmp expected actual
> "
>
> +test_expect_success '.gitmodules ignore=all has no effect' "
> + git config --add -f .gitmodules submodule.sm1.ignore all &&
> + git config --add -f .gitmodules submodule.sm1.path sm1 &&
> + git submodule summary >actual &&
> + cat >expected <<-EOF &&
> +* sm1 $head1...$head2 (1):
> + > Add foo3
> +
> +EOF
> + test_cmp expected actual &&
> + git config -f .gitmodules --remove-section submodule.sm1
> +"
> +
> +test_expect_success '.git/config ignore=all has no effect' "
> + git config --add -f .gitmodules submodule.sm1.ignore none &&
> + git config --add -f .gitmodules submodule.sm1.path sm1 &&
> + git config --add submodule.sm1.ignore all &&
> + git config --add submodule.sm1.path sm1 &&
> + git submodule summary >actual &&
> + cat >expected <<-EOF &&
> +* sm1 $head1...$head2 (1):
> + > Add foo3
> +
> +EOF
> + test_cmp expected actual &&
> + git config --remove-section submodule.sm1 &&
> + git config -f .gitmodules --remove-section submodule.sm1
> +"
> +
> +
> commit_file sm1 &&
> head3=$(
> cd sm1 &&I think we should do both tests in one go: just turn on all ignore options and test against that. Additionally we should also set diff.ignoreSubmodules too, while there is no need to set the path in .git/config. And I believe we can drop the --add option from the config command, so I'd propose something like this:
-------------------------8<---------------------------
Show changes to t/t7401-submodule-summary.sh +18 −0
diff --git a/t/t7401-submodule-summary.sh b/t/t7401-submodule-summary.sh
index ac2434c..81ae7c9 100755
--- a/t/t7401-submodule-summary.sh
+++ b/t/t7401-submodule-summary.sh
@@ -104,6 +104,24 @@ EOF
test_cmp expected actual
"
+test_expect_success 'no ignore=all setting has any effect' "
+ git config -f .gitmodules submodule.sm1.path sm1 &&
+ git config -f .gitmodules submodule.sm1.ignore all &&
+ git config submodule.sm1.ignore all &&
+ git config diff.ignoreSubmodules all &&
+ git submodule summary >actual &&
+ cat >expected <<-EOF &&
+* sm1 $head1...$head2 (1):
+ > Add foo3
+
+EOF
+ test_cmp expected actual &&
+ git config --unset diff.ignoreSubmodules &&
+ git config --remove-section submodule.sm1 &&
+ git config -f .gitmodules --remove-section submodule.sm1
+"
+
+
commit_file sm1 &&
head3=$(
cd sm1 &&
-------------------------8<---------------------------
> diff --git a/t/t7508-status.sh b/t/t7508-status.sh
> index ac3d0fe..fb89fb9 100755
> --- a/t/t7508-status.sh
> +++ b/t/t7508-status.sh
> @@ -1316,7 +1316,7 @@ test_expect_success "--ignore-submodules=all suppresses submodule summary" '
> test_i18ncmp expect output
> '
>
> -test_expect_failure '.gitmodules ignore=all suppresses submodule summary' '
> +test_expect_success '.gitmodules ignore=all suppresses submodule summary' '
> git config --add -f .gitmodules submodule.subname.ignore all &&
> git config --add -f .gitmodules submodule.subname.path sm &&
> git status > output &&
> @@ -1324,7 +1324,7 @@ test_expect_failure '.gitmodules ignore=all suppresses submodule summary' '
> git config -f .gitmodules --remove-section submodule.subname
> '
>
> -test_expect_failure '.git/config ignore=all suppresses submodule summary' '
> +test_expect_success '.git/config ignore=all suppresses submodule summary' '
> git config --add -f .gitmodules submodule.subname.ignore none &&
> git config --add -f .gitmodules submodule.subname.path sm &&
> git config --add submodule.subname.ignore all &&
>