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

Re: [PATCH v4 2/3] diff: Let "git diff -O" read orderfile from any file, fail properly

From
Antoine Pelisse <apelisse@gmail.com>
Date
Dec 17, 2013, 20:37 UTC
Message-ID
<CALWbr2zXNF-aJHHnBnW1q1yaCmWt-rmMWypBWFanTBAK1pMWiQ@mail.gmail.com>
In-Reply-To
<xmqqsitrmkhe.fsf@gitster.dls.corp.google.com>
On Tue, Dec 17, 2013 at 6:54 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 41 quoted lines
> Samuel Bronson <naesten@gmail.com> writes:
>
>> On Mon, Dec 16, 2013 at 4:32 PM, Junio C Hamano <gitster@pobox.com> wrote:
>>> Samuel Bronson <naesten@gmail.com> writes:
>>>
>>>>  for i in 1 2
>>>>  do
>>>>       test_expect_success "orderfile using option ($i)" '
>>>>       git diff -Oorder_file_$i --name-only HEAD^..HEAD >actual &&
>>>>       test_cmp expect_$i actual
>>>>  '
>>>
>>> This funny indentation in the previous step needs to be fixed, and
>>> the added block below should match.
>>
>> Even though this results in oddly-indented --verbose output?
>>
>>>> +     rm -f order_fifo &&
>>>> +     mkfifo order_fifo &&
>>>> +     cat order_file_$i >order_fifo &
>>>> +     git diff -O order_fifo --name-only HEAD^..HEAD >actual &&
>>>
>>> I think this part can be racy depending on which between cat and
>>> "git diff" are scheduled first, no?  Try running this test under
>>> load and I think you will see it deadlocked.
>>>
>>> Besides, the above breaks && chain; even if mkfifo breaks (hence not
>>> allowing cat to run), "git diff" will go ahead and run, no?
>>
>> Hmm.  Well, what I really wanted to put here was a "process substitution":
>>
>>     git diff -O <(cat order_file_$i) --name-only HEAD^..HEAD >actual &&
>>
>> but I did not see this feature listed in the dash(1) manpage, so I
>> assumed it wasn't allowed by POSIX.  And, having looked, I indeed
>> don't see it mentioned in POSIX either.
>>
>> I'm not terribly surprised that I screwed up the translation to FIFOs;
>> how would I really want to do it?
>
> How about not doing a fifo?

That would certainly defeat the purpose of the test, which is to test against a fifo :-) I'm not sure about the deadlock though. Both read and write will wait for each other to start operating on the fifo.

You can probably fix the &&-chain by doing something like:
    mkfifo order_fifo && {
        cat order_file_$i >order_fifo &
        git diff -O order_fifo --name-only HEAD^..HEAD >actual
    } && ...

Also, "rm -f order_fifo" should probably be done in test_when_finished rather than at the beginning of the test.

Antoine,
Previous: Junio C HamanoNext: Junio C Hamano
Message 23 of 35 in “diff: Add diff.orderfile configuration variable”
  1. diff: Add diff.orderfile configuration variableAnders Waldenborg, Oct 21, 2013
  2. Jonathan NiederOct 21, 2013
  3. Anders WaldenborgOct 25, 2013
  4. diff: Add diff.orderfile configuration variableSamuel Bronson, Dec 6, 2013
  5. Junio C HamanoDec 6, 2013
  6. Samuel BronsonDec 7, 2013
  7. Junio C HamanoDec 9, 2013
  8. 0/3 diff: Add diff.orderfile configuration variableSamuel Bronson, Dec 14, 2013
  9. 1/3 diff: Tests for "git diff -O"Samuel Bronson, Dec 14, 2013
  10. 2/3 diff: Let "git diff -O" read orderfile from any file, failing when appropriateSamuel Bronson, Dec 14, 2013
  11. Junio C HamanoDec 16, 2013
  12. 3/3 diff: Add diff.orderfile configuration variableSamuel Bronson, Dec 14, 2013
  13. Junio C HamanoDec 16, 2013
  14. Samuel BronsonDec 16, 2013
  15. 0/3 diff: Add diff.orderfile configuration variableSamuel Bronson, Dec 16, 2013
  16. 1/3 diff: Tests for "git diff -O"Samuel Bronson, Dec 16, 2013
  17. 2/3 diff: Let "git diff -O" read orderfile from any file, fail properlySamuel Bronson, Dec 16, 2013
  18. Junio C HamanoDec 16, 2013
  19. Samuel BronsonDec 17, 2013
  20. Junio C HamanoDec 16, 2013
  21. Samuel BronsonDec 17, 2013
  22. Junio C HamanoDec 17, 2013
  23. Antoine PelisseDec 17, 2013
  24. Junio C HamanoDec 17, 2013
  25. Samuel BronsonDec 18, 2013
  26. Junio C HamanoDec 18, 2013
  27. Junio C HamanoDec 17, 2013
  28. 3/3 diff: Add diff.orderfile configuration variableSamuel Bronson, Dec 16, 2013
  29. 0/3 diff: Add diff.orderfile configuration variableSamuel Bronson, Dec 19, 2013
  30. 1/3 diff: Tests for "git diff -O"Samuel Bronson, Dec 19, 2013
  31. 2/3 diff: Let "git diff -O" read orderfile from any file, fail properlySamuel Bronson, Dec 19, 2013
  32. diff test: reading a directory as a file need not error outJonathan Nieder, Jan 10, 2014
  33. Junio C HamanoJan 10, 2014
  34. 3/3 diff: Add diff.orderfile configuration variableSamuel Bronson, Dec 19, 2013
  35. Junio C HamanoDec 19, 2013

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.