Re: [Outreachy] [PATCH v4] diff: do not show submodule with untracked files as "-dirty"
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Oct 23, 2020, 21:28 UTC
- Message-ID
- <xmqqmu0cfx9a.fsf@gitster.c.googlers.com>
- In-Reply-To
- <20201023111827.40188-1-sangunb09@gmail.com>
Sangeeta Jain <sangunb09@gmail.com> writes:
Show 10 quoted lines
> diff --git a/t/t4027-diff-submodule.sh b/t/t4027-diff-submodule.sh > ... > +test_expect_success 'git diff HEAD with dirty submodule (untracked) (none ignored)' ' > + git config diff.ignoreSubmodules none && > + git diff HEAD >actual && > + sed -e "1,/^@@/d" actual >actual.body && > + expect_from_to >expect.body $subtip $subprev-dirty && > + test_cmp expect.body actual.body && > + git config --unset diff.ignoreSubmodules > +'
If any step concatenated by && in the above sequence fails, the test repository will have diff.ignoreSubmodules set to none (without getting it reset, since &&-chain prevents the last "config --unset" step from running). Unless the test is run under the --immediate option, that would affect the environment in which subsequent tests are run.
Instead, our test usually do this:
test_expect_success 'test title' '
test_config diff.ignoresubmodules none &&
git diff HEAD >actual &&
...
test_cmp expect.body actual.body
'"test_config" sets up a trigger, which will _always_ fire, whether the test fails at any intermediate steps or runs to the end and succeeds, to remove the configuration it just added. It is a short-hand for writing
test_when_finished test_unconfig diff.ignoresubmodules && git config diff.ignoresubmodules none
i.e. to use test_when_finished to set up the trigger.
Show 9 quoted lines
> - git diff HEAD >actual && > + git diff --ignore-submodules=none HEAD >actual && > sed -e "1,/^@@/d" actual >actual.body && > expect_from_to >expect.body $subprev $subprev-dirty && > test_cmp expect.body actual.body && > git diff --ignore-submodules=all HEAD >actual2 && > test_must_be_empty actual2 && > - git diff --ignore-submodules=untracked HEAD >actual3 && > + git diff HEAD >actual3 &&
This line can be left as-is, no?
Show 19 quoted lines
> diff --git a/t/t4041-diff-submodule-option.sh b/t/t4041-diff-submodule-option.sh > index f852136585..bb368b685d 100755 > --- a/t/t4041-diff-submodule-option.sh > +++ b/t/t4041-diff-submodule-option.sh > @@ -262,7 +262,7 @@ test_expect_success 'submodule is up to date' ' > > test_expect_success 'submodule contains untracked content' ' > echo new > sm1/new-file && > - git diff-index -p --submodule=log HEAD >actual && > + git diff-index -p --submodule=log HEAD --ignore-submodules=none >actual && > cat >expected <<-EOF && > Submodule sm1 contains untracked content > EOF > @@ -270,7 +270,7 @@ test_expect_success 'submodule contains untracked content' ' > ' > > test_expect_success 'submodule contains untracked content (untracked ignored)' ' > - git diff-index -p --ignore-submodules=untracked --submodule=log HEAD >actual && > + git diff-index -p --submodule=log HEAD >actual &&
Likewise.