Hi, Stefan Beller wrote: [...] > +++ b/t/t7506-status-submodule.sh [...] > @@ -287,4 +311,82 @@ test_expect_success 'diff --submodule with merge conflict in .gitmodules' ' > test_cmp diff_submodule_actual diff_submodule_expect > ' > > +test_expect_success 'setup superproject with untracked file in nested submodule' ' > + ( > + cd super && > + git clean -dfx && > + rm .gitmodules && > + git submodule add -f ./sub1 && > + git submodule add -f ./sub2 && > + git commit -a -m "messy merge in superproject" && > + ( > + cd sub1 && > + git submodule add ../sub2 && > + git commit -a -m "add sub2 to sub1" > + ) && > + git add sub1 && > + git commit -a -m "update sub1 to contain nested sub" > + ) && > + echo "{ \$7=\"HASH\"; \$8=\"HASH\"; print }" >suppress_hashes.awk && > + echo "suppress_hashes.awk" >>.git/info/exclude && I had some trouble following what suppress_hashes.awk does at first. Some other examples that could be worth imitating: - diff-lib.sh has some sanitize_diff functions using 'sed' - t4202 has a sanitize_output functino, also using 'sed' - grepping for $_x40 finds some other examples (these will be fun to change when the hash function changes, but at least they're easy to find). The main general idea I have in mind is that providing a function at the top of the file for the test to use instead of a script that interacts with what git is tracking can make things easier to understand. Also, could there be a comment with a diagram describing the setup (sub1 vs sub2, etc)? [...] > +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.M. 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 > + 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 How does ordinary non --short "git status" handle these cases? What should happen when there is a new untracked repository within a submodule? What should happen if there is both a modified tracked file and an untracked file in a sub-submodule? > +' > + > test_done Very nice. Thanks --- this was exactly what I was looking for. The rest looks good. Sincerely, Jonathan