From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: jonathan chang <ttjtftx@gmail.com>
Cc: Git Mailing List <git@vger.kernel.org>,
Christian Couder <christian.couder@gmail.com>,
Eric Sunshine <sunshine@sunshineco.com>,
Thomas Gummerer <t.gummerer@gmail.com>
Subject: Re: [GSoC][PATCH v3 2/3] t0000: avoid using pipes
Date: Sun, 24 Mar 2019 20:04:34 +0100 [thread overview]
Message-ID: <875zs8ccvx.fsf@evledraar.gmail.com> (raw)
In-Reply-To: <CAOAu_YJs_ZL0nAARNmdSFjmdh6mSP+e7KvzNB3wj-JGe5sHcdA@mail.gmail.com>
On Sun, Mar 24 2019, jonathan chang wrote:
> On Mon, Mar 18, 2019 at 12:47 AM Ævar Arnfjörð Bjarmason
> <avarab@gmail.com> wrote:
>>
>>
>> On Sun, Mar 17 2019, Jonathan Chang wrote:
>>
>> > The exit code of the upstream in a pipe is ignored thus we should avoid
>> > using it. By writing out the output of the git command to a file, we can
>> > test the exit codes of both the commands.
>> >
>> > Signed-off-by: Jonathan Chang <ttjtftx@gmail.com>
>> > ---
>> > t/t0000-basic.sh | 28 ++++++++++++++--------------
>> > 1 file changed, 14 insertions(+), 14 deletions(-)
>> >
>> > diff --git a/t/t0000-basic.sh b/t/t0000-basic.sh
>> > index 53821f5817..47666b013e 100755
>> > --- a/t/t0000-basic.sh
>> > +++ b/t/t0000-basic.sh
>> > @@ -1118,27 +1118,25 @@ P=$(test_oid root)
>> >
>> > test_expect_success 'git commit-tree records the correct tree in a commit' '
>> > commit0=$(echo NO | git commit-tree $P) &&
>> > - tree=$(git show --pretty=raw $commit0 |
>> > - sed -n -e "s/^tree //p" -e "/^author /q") &&
>> > + git show --pretty=raw $commit0 >actual &&
>> > + tree=$(sed -n -e "s/^tree //p" -e "/^author /q" actual) &&
>> > test "z$tree" = "z$P"
>>
>> This change is an improvement just changing the "git" invocations. But I
>> wonder as we're reviewing this / churning this if we couldn't also
>> modernize this style to just:
>>
>> git .. >tmp &&
>> sed -n -e <tmp >actual &&
>> test_must_be_empty actual
>
> Do you mean something like this:
>
> - git show --pretty=raw $commit0 >actual &&
> - tree=$(sed -n -e "s/^tree //p" -e "/^author /q" actual) &&
> - test "z$tree" = "z$P"
> + git show --pretty=raw $commit0 >tmp &&
> + sed -n -e "/$P/d" -e "s/^tree //p" -e "/^author /q" tmp >actual &&
> + test_must_be_empty actual
>
> It works. But the semantic is different if we use test_must_be_empty.
> I wonder if you mean test_cmp because I found some commits[1 2 3]
> that changes 'test "z...' to use test_cmp with 'git log -G 'test "z' --oneline'
> and git-show. However, they are all around 2013, so I'm not so sure
> this is what you mean either.
>
> I did found some use of sed's 'd' function in conjunction with
> test_must_be_empty, using:
> git grep -A 5 'sed .*/d' | grep -B 5 'test_must_be_empty'
> However, they don't use parameter expansion in sed.
>
> There are some places where parameter expansion is used in sed, but
> that would require test_cmp in this case, and would need to write to
> another file to compare.
>
> Maybe this 'test "z$A" = "z$B"' syntax is fine, yet most of the existing
> usages are added around 12 years ago according git-blame I saw on
> github.
>
>
> [1]: 03c893cbf9 ("t1006: modernize output comparisons", 2013-07-10)
> [2]: 848575d833 ("push test: simplify check of push result", 2013-03-18)
> [3]: ed838e6615 ("t1300: style updates", 2012-10-23)
Yeah there's many ways to do it. Generally we've been moving to the
"test_*" wrapper that e.g. given X lines print out an explanation that
we were expecting Y instead.
>> > @@ -1162,12 +1161,13 @@ test_expect_success 'very long name in the index handled sanely' '
>> > >path4 &&
>> > git update-index --add path4 &&
>> > (
>> > - git ls-files -s path4 |
>> > - sed -e "s/ .*/ /" |
>> > + git ls-files -s path4 >actual &&
>> > + sed -e "s/ .*/ /" actual |
>> > tr -d "\012" &&
>> > echo "$a"
>> > ) | git update-index --index-info &&
>> > - len=$(git ls-files "a*" | wc -c) &&
>> > + git ls-files "a*" >actual &&
>> > + len=$(wc -c <actual) &&
>> > test $len = 4098
>>
>> Ditto. Maybe the initial author wanted to avoid writing out 4k lines,
>> but now that we're doing so anyway...
>
> This is 'wc -c', so I think I don't have to modify it?
Yes, that's a brainfart of mine. Although as an aside I have a WIP
series that adds test_byte_count which can be used for these types of
cases.
> By the way, I found 2 lines that can be changed to use test_must_be_empty
> in t0000-basic.sh. I paste the diff below:
> ---
> @@ -51,7 +51,7 @@ test_expect_success 'verify that the running shell
> supports "local"' '
>
> test_expect_success '.git/objects should be empty after git init in
> an empty repo' '
> find .git/objects -type f -print >should-be-empty &&
> - test_line_count = 0 should-be-empty
> + test_must_be_empty should-be-empty
> '
>
> # also it should have 2 subdirectories; no fan-out anymore, pack, and info.
> @@ -1110,7 +1110,7 @@ test_expect_success 'git update-index --refresh
> should succeed' '
>
> test_expect_success 'no diff after checkout and git update-index --refresh' '
> git diff-files >current &&
> - cmp -s current /dev/null
> + test_must_be_empty current
> '
next prev parent reply other threads:[~2019-03-24 19:04 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-17 15:23 [GSoC][PATCH v3 0/3] Avoid using pipes Jonathan Chang
2019-03-17 15:23 ` [GSoC][PATCH v3 1/3] t0000: fix indentation Jonathan Chang
2019-03-17 15:23 ` [GSoC][PATCH v3 2/3] t0000: avoid using pipes Jonathan Chang
2019-03-17 16:47 ` Ævar Arnfjörð Bjarmason
2019-03-24 11:26 ` jonathan chang
2019-03-24 19:04 ` Ævar Arnfjörð Bjarmason [this message]
2019-03-17 15:23 ` [GSoC][PATCH v3 3/3] t0000: use test_line_count instead of wc -l Jonathan Chang
2019-03-17 16:48 ` Ævar Arnfjörð Bjarmason
2019-03-17 20:06 ` Thomas Gummerer
2019-03-18 7:36 ` Ævar Arnfjörð Bjarmason
2019-03-18 8:15 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=875zs8ccvx.fsf@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=sunshine@sunshineco.com \
--cc=t.gummerer@gmail.com \
--cc=ttjtftx@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.