Skip to content

Commit

Permalink
Merge branch 'bc/submodule-status-ignored'
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
Jonathan Nieder committed Sep 25, 2013
2 parents 80f165a + bb58b69 commit 5636a20
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 11 deletions.
12 changes: 10 additions & 2 deletions Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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::
Expand Down Expand Up @@ -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
Expand Down
6 changes: 5 additions & 1 deletion Documentation/diff-config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 7 additions & 1 deletion Documentation/git-status.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
--------
Expand Down
3 changes: 2 additions & 1 deletion Documentation/gitmodules.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
15 changes: 11 additions & 4 deletions git-submodule.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
)

Expand Down
18 changes: 18 additions & 0 deletions t/t7401-submodule-summary.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 &&
Expand Down
4 changes: 2 additions & 2 deletions t/t7508-status.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1380,15 +1380,15 @@ 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 &&
test_cmp expect output &&
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 &&
Expand Down

0 comments on commit 5636a20

Please sign in to comment.