git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [GSoC] [PATCH] test: avoid pipes in git related commands for test suite

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Mar 14, 2018, 18:22 UTC
Message-ID
<CAPig+cTLCswg_=q5ybnyN3As4Au05q5eAcA7Prr643KCgZ0OAw@mail.gmail.com>
In-Reply-To
<87zi3bdlo2.fsf@evledraar.gmail.com>

On Wed, Mar 14, 2018 at 5:57 AM, Ævar Arnfjörð Bjarmason <avarab@gmail.com> wrote:

Show 28 quoted lines
> On Wed, Mar 14 2018, Eric Sunshine jotted:
>> On Tue, Mar 13, 2018 at 4:19 PM, Pratik Karki <predatoramigo@gmail.com> wrote:
>>> -    'git diff-tree -r -M --name-status  HEAD^ HEAD | \
>>> -     grep "^R100..*path0/COPYING..*path2/COPYING" &&
>>> -     git diff-tree -r -M --name-status  HEAD^ HEAD | \
>>> -     grep "^R100..*path0/README..*path2/README"'
>>> +    'git diff-tree -r -M --name-status  HEAD^ HEAD >actual &&
>>> +     grep "^R100..*path0/COPYING..*path2/COPYING" actual &&
>>> +     git diff-tree -r -M --name-status  HEAD^ HEAD >actual &&
>>> +     grep "^R100..*path0/README..*path2/README" actual'
>>
>> Although this "mechanical" transformation is technically correct, it
>> is nevertheless wasteful. The exact same "git diff-tree ..." command
>> is run twice, and both times output is captured to file 'actual',
>> which makes the second invocation superfluous. Instead, a better
>> transformation would be:
>>
>>     git diff-tree ... >actual &&
>>     grep ... actual &&
>>     grep ... actual
>>
> I think we have to be careful to not be overly picky with rejecting
> mechanical transformations that fix bugs on the basis that while we're
> at it the test could also be rewritten.
>
> I.e. this bug was there before, maybe we should purely focus on just
> replacing the harmful pipe pattern that hides errors in this series and
> leave rewriting the actual test logic for a later patch.

Thanks for presenting an opposing opinion. While I understand your position, the reason for my suggested transformation is that if the patch already transformed the code in the way suggested, it would increase my confidence, as a reviewer, that the patch author had _studied_ and _understood_ the code. Increased confidence is especially important for mechanical transformations since -- as seen in the unsnipped review comment below -- blindly-applied mechanical transformations can be suboptimal or outright incorrect.

It's also the sort of review comment I would make even to very seasoned project participants[1].

[1]: https://public-inbox.org/git/CAPig+cQLmYQeRhPxvZHmY7gApnbE25H_KoSWs-ZjuBo4BruimQ@mail.gmail.com/
Show 25 quoted lines
>>> -       test $(git cat-file commit refs/remotes/glob | \
>>> -              grep "^parent " | wc -l) -eq 2
>>> +       test $(git cat-file commit refs/remotes/glob >actual &&
>>> +              grep "^parent " actual | wc -l) -eq 2
>>
>> This is not a great transformation. If "git cat-file" fails, then
>> neither 'grep' nor 'wc' will run, and the result will be as if 'test'
>> was called without an argument before "-eq". For example:
>>
>>     % test $(false >actual && grep "^parent " actual | wc -l) -eq 2
>>     test: -eq: unary operator expected
>>
>> It would be better to run "git cat-file" outside of "test $(...)". For instance:
>>
>>     git cat-file ... >actual &&
>>     test $(grep ... actual | wc -l) -eq 2
>>
>> Alternately, you could take advantage of the test_line_count() helper function:
>>
>>     git cat-file ... >actual &&
>>     grep ... actual >actual2 &&
>>     test_line_count = 2 actual2
>
> In this case though as you rightly point out the rewrite is introducing
> a regression, which should definitely be fixed.
Previous: Ævar Arnfjörð BjarmasonNext: Junio C Hamano
Message 4 of 16 in “test: avoid pipes in git related commands for test suite”
  1. Pratik KarkiMar 13, 2018
  2. Eric SunshineMar 14, 2018
  3. Ævar Arnfjörð BjarmasonMar 14, 2018
  4. Eric SunshineMar 14, 2018
  5. Junio C HamanoMar 15, 2018
  6. [GSoC][PATCH] test: avoid pipes in git related commands for test suitePratik Karki, Mar 19, 2018
  7. Eric SunshineMar 21, 2018
  8. [GSoC][PATCH v3] test: avoid pipes in git related commands for testPratik Karki, Mar 21, 2018
  9. Junio C HamanoMar 21, 2018
  10. Eric SunshineMar 21, 2018
  11. Eric SunshineMar 21, 2018
  12. [GSoC][PATCH v4] test: avoid pipes in git related commands for testPratik Karki, Mar 23, 2018
  13. Eric SunshineMar 25, 2018
  14. [GSoC][PATCH v5] test: avoid pipes in git related commands for testPratik Karki, Mar 27, 2018
  15. Eric SunshineMar 30, 2018
  16. Junio C HamanoMar 30, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.