Re: [PATCH v5 02/14] trailer: process trailers from file and arguments
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Feb 10, 2014, 20:51 UTC
- Message-ID
- <xmqq38jqsnc2.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <20140210.205936.813126606054805390.chriscool@tuxfamily.org>
Christian Couder <chriscool@tuxfamily.org> writes:
Show 11 quoted lines
> Many entries with the same key but distinct values can be configured > using: > > if_exists = add_if_different > if_missing = add > > Many entries with the same key but values that can be the same can be > configured using: > > if_exists = add > if_missing = add
While the above certainly can express the combinations, I am still puzzled about the value of having "under this condition" (i.e. if-exists/if-missing) and "do this" (i.e. add/add-if-different) as two separate concepts.
If you do not have an existing entry with the same key, no new entry can be the same as an existing one---therefore, the former "allow only distinct values for the same key" can just say
trailer."Fixes".action = add_if_different
or something, without any if_exists/if_missing. In a similar way, the latter "duplicated values allowed for the same key" can say
trailer."Sob".action = add
You can throw into the mix other actions like "add_if_missing", you can also express "only one value allowed for the same key---the first one wins", "replace" to mean "replace if there is one with the same key", and "replace_or_add" to mean "same as 'replace', but add if there is no existing entries with the same key". Will we lose expressiveness by simplifying the semantics, getting rid of this "under this condition" part and instead making "do this" part more intelligent?
Even if we assume, for the sake of discussion, that it *is* a good idea to separate "under this condition" part and "do this" part, I do not think the above is the only or the best way to express "distinct values allowed for the same key". How do we argue that this from your example
if_exists = add_if_different if_missing = add
is a better design than this, for example?
if_key_value_exists = ignore ; exact matching <key,val> exists if_key_exists = add ; otherwise if_missing = add
The latter splits remaining conditional logic from "do this" part (no more "add_if_different" that causes "add" action to see if there is the same key and act differently) and moves it to "under this condition" part.
I am trying to illustrate that the line to split the "under this condition" and "do this" looks arbitrary and fuzzy here, and because of this arbitrary-ness and fuzziness, it is not very obvious to me why it is a good idea to have "under this condition" as a separate concept from "do this" settings.
What is the advantage of having such an extra axis? Does it make it easier to manage? Does it allow us to express more?
I can see that the location where a new entry (or a duplicated one) is added (i.e. do we prepend? do we append?) can be orthogonal to any of the above; no need to bring up 'where' in the discussion.