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