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

Re: [PATCH v5 02/14] trailer: process trailers from file and arguments

From
Christian Couder <chriscool@tuxfamily.org>
Date
Feb 14, 2014, 23:29 UTC
Message-ID
<20140215.002950.97819205213642217.chriscool@tuxfamily.org>
In-Reply-To
<xmqqfvnlgyel.fsf@gitster.dls.corp.google.com>
From: Junio C Hamano <gitster@pobox.com>
Show 19 quoted lines
>
> Christian Couder <chriscool@tuxfamily.org> writes:
> 
>> For example some people might want:
>>
>>     if_exists = overwrite
>>     if_missing = add
>>
>> while others might want:
>>
>>     if_exists = overwrite
>>     if_missing = do_nothing
>>
>> and I don't see how we can say that with just:
>>
>>     action = do_Y_if_X_and_Z
> 
> Yes, but then we go back to my original question: why exists and
> missing are so special,

Because they are completely disjoint, easy to understand, and they can avoid a lot of combinatorial explosion we would have if we used only one "action" variable, while still providing lot of expressiveness.

They are just a good tradeoff for the special problem we have.
> and why there aren't two kinds of exists
> (i.e. "there exists an entry with the same <key, value>" vs "there
> exists an entry with the same <key>").

Because it doesn't improve expressiveness much, doesn't remove much combinatorial explosion and make it significantly more difficult to understand, compared to only "if_exists" and "if_missing".

Show 5 quoted lines
> I would have understood your
> "this is not too hard to understand for users" if you had three
> (i.e. "missing", in addition to these two flavours of "exists"), but
> with only two, I do not see how it is useful in a hypothetical
> situation like above.
You mean that you do not see why:
     if_exists = overwrite
     if_missing = do_nothing
is simple and expressive?
Show 6 quoted lines
> For example, how would you express something like this only with
> "if-exists" vs "if-missing"?
> 
> 	if_exists_exactly = ignore
>         if_exists_with_different_value = append
>         if_missng = prepend_to_the_beginning

First, previously in the discussion you said that you didn't want us to talk about the "where = (after | before)" part, because you could see that it was orthogonal to the other stuff, but now it looks like you want again to put that on the table.

Then yes, it is not possible to express the above with what I implemented. But it could be possible with only "if-exists" vs "if-missing" like this:

	if_exists = append_if_different
	if_missing = prepend
And yes I think it is much better than:
	if_exists_exactly = ignore
	if_exists_with_different_value = append
	if_missng = prepend_to_the_beginning
because we can still easily express things like:
	if_exists = append_if_different_neighbor
	if_missing = prepend

while it would be more difficult to understand with "if_exists_exactly", "if_exists_with_different_value" and "if_missing".

Thanks, Christian.

Previous: Junio C HamanoNext: Junio C Hamano
Message 18 of 48 in “Add interpret-trailers builtin”
  1. 00/14 Add interpret-trailers builtinChristian Couder, Feb 6, 2014
  2. 01/14 Add data structures and basic functions for commit trailersChristian Couder, Feb 6, 2014
  3. Junio C HamanoFeb 6, 2014
  4. Christian CouderFeb 9, 2014
  5. Eric SunshineFeb 10, 2014
  6. Junio C HamanoFeb 6, 2014
  7. Christian CouderFeb 9, 2014
  8. 02/14 trailer: process trailers from file and argumentsChristian Couder, Feb 6, 2014
  9. Junio C HamanoFeb 7, 2014
  10. Christian CouderFeb 9, 2014
  11. Junio C HamanoFeb 10, 2014
  12. Christian CouderFeb 10, 2014
  13. Junio C HamanoFeb 10, 2014
  14. Christian CouderFeb 11, 2014
  15. Junio C HamanoFeb 11, 2014
  16. Christian CouderFeb 14, 2014
  17. Junio C HamanoFeb 14, 2014
  18. Christian CouderFeb 14, 2014
  19. Junio C HamanoFeb 14, 2014
  20. Junio C HamanoFeb 14, 2014
  21. Junio C HamanoFeb 15, 2014
  22. Junio C HamanoFeb 21, 2014
  23. Christian CouderFeb 23, 2014
  24. 03/14 trailer: read and process config informationChristian Couder, Feb 6, 2014
  25. 04/14 trailer: process command line trailer argumentsChristian Couder, Feb 6, 2014
  26. Junio C HamanoFeb 7, 2014
  27. Christian CouderFeb 9, 2014
  28. 05/14 trailer: parse trailers from input fileChristian Couder, Feb 6, 2014
  29. 06/14 trailer: put all the processing together and printChristian Couder, Feb 6, 2014
  30. 07/14 trailer: add interpret-trailers commandChristian Couder, Feb 6, 2014
  31. Junio C HamanoFeb 7, 2014
  32. Christian CouderFeb 7, 2014
  33. Junio C HamanoFeb 7, 2014
  34. Junio C HamanoFeb 7, 2014
  35. 08/14 trailer: add tests for "git interpret-trailers"Christian Couder, Feb 6, 2014
  36. Junio C HamanoFeb 7, 2014
  37. 09/14 trailer: if no input file is passed, read from stdinChristian Couder, Feb 6, 2014
  38. Junio C HamanoFeb 7, 2014
  39. 10/14 trailer: execute command from 'trailer.<name>.command'Christian Couder, Feb 6, 2014
  40. Junio C HamanoFeb 7, 2014
  41. Junio C HamanoFeb 7, 2014
  42. 11/14 trailer: add tests for trailer commandChristian Couder, Feb 6, 2014
  43. 12/14 trailer: set author and committer env variablesChristian Couder, Feb 6, 2014
  44. Junio C HamanoFeb 7, 2014
  45. Junio C HamanoFeb 7, 2014
  46. 13/14 trailer: add tests for commands using env variablesChristian Couder, Feb 6, 2014
  47. 14/14 Documentation: add documentation for 'git interpret-trailers'Christian Couder, Feb 6, 2014
  48. Eric SunshineFeb 10, 2014

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.