Re: [PATCH 1/2] short status: improve reporting for submodule changes
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Mar 28, 2017, 23:24 UTC
- Message-ID
- <20170328232446.GT31294@aiede.mtv.corp.google.com>
- In-Reply-To
- <20170328230938.9887-2-sbeller@google.com>
Hi,
Stefan Beller wrote:
[...]
> +++ b/t/t7506-status-submodule.sh
[...]
Show 22 quoted lines
> @@ -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)?
[...]
Show 53 quoted lines
> +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