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

Reply via email to