Merge branch 'bc/submodule-status-ignored'
authorJonathan Nieder <jrnieder@gmail.com>
Wed, 25 Sep 2013 06:36:08 +0000 (23:36 -0700)
committerJonathan Nieder <jrnieder@gmail.com>
Wed, 25 Sep 2013 06:36:08 +0000 (23:36 -0700)
* bc/submodule-status-ignored:
Improve documentation concerning the status.submodulesummary setting
submodule: don't print status output with ignore=all
submodule: fix confusing variable name

Documentation/config.txt
Documentation/diff-config.txt
Documentation/git-status.txt
Documentation/gitmodules.txt
git-submodule.sh
t/t7401-submodule-summary.sh
t/t7508-status.sh
index c3f70023ec36ba523d95293fef7b20da64e7be3a..aaae06fc5a95c84c7b237f1c08e2aa96169d0522 100644 (file)
@@ -2214,7 +2214,14 @@ status.submodulesummary::
        If this is set to a non zero number or true (identical to -1 or an
        unlimited number), the submodule summary will be enabled and a
        summary of commits for modified submodules will be shown (see
-       --summary-limit option of linkgit:git-submodule[1]).
+       --summary-limit option of linkgit:git-submodule[1]). Please note
+       that the summary output command will be suppressed for all
+       submodules when `diff.ignoreSubmodules` is set to 'all' or only
+       for those submodules where `submodule.<name>.ignore=all`. To
+       also view the summary for ignored submodules you can either use
+       the --ignore-submodules=dirty command line option or the 'git
+       submodule summary' command, which shows a similar output but does
+       not honor these settings.
 
 submodule.<name>.path::
 submodule.<name>.url::
@@ -2249,7 +2256,8 @@ submodule.<name>.ignore::
        submodules that have untracked files in their work tree as changed.
        This setting overrides any setting made in .gitmodules for this submodule,
        both settings can be overridden on the command line by using the
-       "--ignore-submodules" option.
+       "--ignore-submodules" option. The 'git submodule' commands are not
+       affected by this setting.
 
 tar.umask::
        This variable can be used to restrict the permission bits of
index ac770502553d9b4d3d1176f63ad01791736602a8..223b9310df0990accdb0d43b096bd52856f56bef 100644 (file)
@@ -73,7 +73,11 @@ diff.ignoreSubmodules::
        Sets the default value of --ignore-submodules. Note that this
        affects only 'git diff' Porcelain, and not lower level 'diff'
        commands such as 'git diff-files'. 'git checkout' also honors
-       this setting when reporting uncommitted changes.
+       this setting when reporting uncommitted changes. Setting it to
+       'all' disables the submodule summary normally shown by 'git commit'
+       and 'git status' when 'status.submodulesummary' is set unless it is
+       overridden by using the --ignore-submodules command line option.
+       The 'git submodule' commands are not affected by this setting.
 
 diff.mnemonicprefix::
        If set, 'git diff' uses a prefix pair that is different from the
index 9046df98a03fe11a203f06d79be0128309a201c5..a4acaa038cd4255c91df1a03c16c6a396f0c1219 100644 (file)
@@ -210,7 +210,13 @@ directory.
 If `status.submodulesummary` is set to a non zero number or true (identical
 to -1 or an unlimited number), the submodule summary will be enabled for
 the long format and a summary of commits for modified submodules will be
-shown (see --summary-limit option of linkgit:git-submodule[1]).
+shown (see --summary-limit option of linkgit:git-submodule[1]). Please note
+that the summary output from the status command will be suppressed for all
+submodules when `diff.ignoreSubmodules` is set to 'all' or only for those
+submodules where `submodule.<name>.ignore=all`. To also view the summary for
+ignored submodules you can either use the --ignore-submodules=dirty command
+line option or the 'git submodule summary' command, which shows a similar
+output but does not honor these settings.
 
 SEE ALSO
 --------
index 6a1ca4abad73631c13a4d074deb11102289a0d43..f7be93f6317c7170af642c43d107a6617eb33a18 100644 (file)
@@ -75,7 +75,8 @@ submodule.<name>.ignore::
        the superproject, the setting there will override the one found in
        .gitmodules.
        Both settings can be overridden on the command line by using the
-       "--ignore-submodule" option.
+       "--ignore-submodule" option. The 'git submodule' commands are not
+       affected by this setting.
 
 
 EXAMPLES
index c17bef10629d3fe53e03647ee16de7f9de24dfb5..896f1c9b820b6627da8d591469172d749bf0e700 100755 (executable)
@@ -1032,13 +1032,20 @@ cmd_summary() {
        # Get modified modules cared by user
        modules=$(git $diff_cmd $cached --ignore-submodules=dirty --raw $head -- "$@" |
                sane_egrep '^:([0-7]* )?160000' |
-               while read mod_src mod_dst sha1_src sha1_dst status name
+               while read mod_src mod_dst sha1_src sha1_dst status sm_path
                do
                        # Always show modules deleted or type-changed (blob<->module)
-                       test $status = D -o $status = T && echo "$name" && continue
+                       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="$name/.git" git-rev-parse --git-dir >/dev/null 2>&1 &&
-                       echo "$name"
+                       GIT_DIR="$sm_path/.git" git-rev-parse --git-dir >/dev/null 2>&1 &&
+                       echo "$sm_path"
                done
        )
 
index 5a6d6d62ebcb0e506fcb0bd16dbd4a451ef3fbd1..366746f0d41342b38126eccc0f58c4ece64cb210 100755 (executable)
@@ -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 &&
index d8c531da765009b3b2261f1263a399b1d4c2a8b5..6fb59f32937102b4b5cdb014774bee5dbfe5a1f0 100755 (executable)
@@ -1380,7 +1380,7 @@ EOF
        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 &&
@@ -1388,7 +1388,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 &&