Re: [PATCH 2/2] bundle tests: use test_cmp instead of grep
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Jul 21, 2021, 23:53 UTC
- Message-ID
- <87fsw7ussi.fsf@evledraar.gmail.com>
- In-Reply-To
- <YPcE24InpY4evFyE@nand.local>
On Tue, Jul 20 2021, Taylor Blau wrote:
Show 55 quoted lines
> On Tue, Jul 20, 2021 at 01:52:09PM +0200, Ævar Arnfjörð Bjarmason wrote:
>> So let's use test_cmp instead, and also in the other nearby tests
>> where it's easy.
>
> I took a look at this patch carefully to make sure that this
> transformation also improved the readability, too.
>
> Looking around, I think that this was a good improvement in readability,
> but also hardened the tests (for the reasons that you mentioned). One
> tiny note below.
>
>> test_expect_success 'empty bundle file is rejected' '
>> @@ -67,11 +83,33 @@ test_expect_success 'ridiculously long subject in boundary' '
>> printf "%01200d\n" 0 | git commit -F - &&
>> test_commit fifth &&
>> git bundle create long-subject-bundle.bdl HEAD^..HEAD &&
>> - git bundle list-heads long-subject-bundle.bdl >heads &&
>> - test -s heads &&
>> + cat >expect <<-EOF &&
>> + $(git rev-parse main) HEAD
>> + EOF
>> + git bundle list-heads long-subject-bundle.bdl >actual &&
>> + test_cmp expect actual &&
>
> This is quite readable, but the assertion below gets much more
> complicated as a result of the change.
>
>> git fetch long-subject-bundle.bdl &&
>> - sed -n "/^-/{p;q;}" long-subject-bundle.bdl >boundary &&
>> - grep "^-$OID_REGEX " boundary
>> +
>> + cat >expect.common <<-EOF &&
>> + -$(git log --pretty=format:"%H %s" -1 HEAD^)
>> + $(git rev-parse HEAD) HEAD
>> + EOF
>> + if test_have_prereq SHA1
>> + then
>> + cp expect.common expect
>> + else
>> + echo @object-format=sha256 >expect
>> + cat expect.common >>expect
>> + fi &&
>
> Here we're setting up expect, but I think flipping the order might make
> things a little easier to follow. Maybe something like this:
>
> rm expect &&
> if ! test_have_prereq SHA1
> then
> echo "@object-format=sha256" >expect
> fi &&
> cat >>expect <<-EOF &&
> -$(git log --pretty=format:"%H %s" -1 HEAD^)
> $(git rev-parse HEAD) HEAD
> EOF &&Thanks, I used pretty much that as-is for v2.
Show 10 quoted lines
> Or, if you wanted to go further, you could do something like: > > cat >expect <<-EOF > $(test_have_prereq SHA1 || echo "@object-format=sha256") > -$(git log --pretty=format:"%H %s" -1 HEAD^) > $(git rev-parse HEAD) HEAD > EOF > > which is arguably a little tighter (although I find the > echo-in-a-heredoc thing to be kind of ugly).
This one won't work because you'll have an empty line at the start under SHA-1.
Show 19 quoted lines
>> + if test_have_prereq SHA1 >> + then >> + head -n 3 long-subject-bundle.bdl >bundle-header >> + else >> + head -n 4 long-subject-bundle.bdl >bundle-header >> + fi && >> + grep -v "^#" bundle-header >actual && > > Here I would suggest getting rid of the bundle-header intermediary and > instead writing: > > if test_have_prereq SHA1 > then > head -n 3 long-subject-bundle.bdl > else > head -n 4 long-subject-bundle.bdl > fi | grep -v "^#" >actual > > and then having your
Thanks, used that.