v8: * This is a resend of the last two patches, i.e. these two patches apply at 5c896f7c3ec (origin/sb/submodule-short-status^^) * below is a diff of this patch series against origin/sb/submodule-short-status * add tests showing the subtle bug fix in case of nesting. * add a bit of documentation v7: previous work at https://public-inbox.org/git/20170325003610.15282-1-sbeller@xxxxxxxxxx/ diff --git a/Documentation/git-status.txt b/Documentation/git-status.txt index 01b457c322..452c6eb875 100644 --- a/Documentation/git-status.txt +++ b/Documentation/git-status.txt @@ -187,6 +187,8 @@ Submodules have more state and instead report m the submodule has modified content ? the submodule has untracked files +Note that 'm' and '?' are applied recursively, e.g. if a nested submodule +in a submodule contains an untracked file, this is reported as '?' as well. If -b is used the short-format status is preceded by a line diff --git a/t/t7506-status-submodule.sh b/t/t7506-status-submodule.sh index ab822c79e6..4d6d8f6817 100755 --- a/t/t7506-status-submodule.sh +++ b/t/t7506-status-submodule.sh @@ -327,20 +327,65 @@ test_expect_success 'setup superproject with untracked file in nested submodule' git add sub1 && git commit -a -m "update sub1 to contain nested sub" ) && - echo untracked >super/sub1/sub2/untracked + echo "{ \$7=\"HASH\"; \$8=\"HASH\"; print }" >suppress_hashes.awk && + echo "suppress_hashes.awk" >>.git/info/exclude && + echo "output2" >>.git/info/exclude && + echo content >super/sub1/sub2/file && + echo content >super/sub2/file ' test_expect_success 'status with untracked file in nested submodule (porcelain)' ' git -C super status --porcelain >output && diff output - <<-\EOF M sub1 + M sub2 + EOF +' + +test_expect_success 'status with untracked file in nested submodule (porcelain=2)' ' + git -C super status --porcelain=2 >output && + awk -f suppress_hashes.awk output >output2 && + diff output2 - <<-\EOF + 1 .M S..U 160000 160000 160000 HASH HASH sub1 + 1 .M S..U 160000 160000 160000 HASH HASH sub2 EOF ' test_expect_success 'status with untracked file in nested submodule (short)' ' git -C super status --short >output && diff output - <<-\EOF - ? sub1 + m sub1 + ? sub2 + EOF +' + +test_expect_success 'setup superproject with modified file in nested submodule' ' + git -C super/sub1/sub2 add file && + git -C super/sub2 add file +' + +test_expect_success 'status with added file in nested submodule (porcelain)' ' + git -C super status --porcelain >output && + diff output - <<-\EOF + M sub1 + M sub2 + EOF +' + +test_expect_success 'status with added file in nested submodule (porcelain=2)' ' + git -C super status --porcelain=2 >output && + awk -f suppress_hashes.awk output >output2 && + diff output2 - <<-\EOF + 1 .M S.M. 160000 160000 160000 HASH HASH sub1 + 1 .M S.M. 160000 160000 160000 HASH HASH sub2 + EOF +' + +test_expect_success 'status with added file in nested submodule (short)' ' + git -C super status --short >output && + diff output - <<-\EOF + m sub1 + m sub2 EOF '