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

Re: Can we clarify the purpose of `git diff -s`?

From
Sergey Organov <sorganov@gmail.com>
Date
May 11, 2023, 20:24 UTC
Message-ID
<87mt2azkdp.fsf@osv.gnss.ru>
In-Reply-To
<645d480be344d_260ff5294c@chronos.notmuch>
Felipe Contreras <felipe.contreras@gmail.com> writes:
Show 101 quoted lines
> Sergey Organov wrote:
>> Felipe Contreras <felipe.contreras@gmail.com> writes:
>> 
>> > Sergey Organov wrote:
>> >> Felipe Contreras <felipe.contreras@gmail.com> writes:
>> >> > Sergey Organov wrote:
>> >> >
>> >> >> I'd rather think about generic interface for setting/clearing
>> >> >> (multiple) bits through CI than resorting to such convenience
>> >> >> tricks. Once that is in place, one will be able to say "I need these
>> >> >> bits only", "I need to turn these bit(s) on", and "I need to turn
>> >> >> these bit(s) off" conveniently and universally in any part of Git CI
>> >> >> where it's needed.
>> >> >
>> >> > It's possible to achieve both.
>> >> >
>> >> > Imagine your ideal explicit interface. In that interface the default
>> >> > is no output, so you *have* to specify all the bits, for example:
>> >> >
>> >> >   git show --patch
>> >> 
>> >> No, that's not what I meant. There is no point in making "git show" to
>> >> have no output by default, please see below.
>> >> 
>> >> >
>> >> > Or:
>> >> >
>> >> >   git show --raw
>> >> >
>> >> > In this ideal interface it's clear what the user wants to do, because
>> >> > it's explicit.
>> >> >
>> >> >   git show --patch --raw --no-patch
>> >> >
>> >> > Agreed?
>> >> >
>> >> > My proposal achieves your ideal explicit interface, except when no
>> >> > format is specified (e.g. `git show`), a default format is chosen for
>> >> > the user, but that's *only* if the user hasn't specified any format.
>> >> 
>> >> My point is that the default format should be selected as if it has been
>> >> provided by existing options, rather than by some magic hidden in the
>> >> code.
>> >
>> > But why?
>> >
>> > I don't see any benefit, only drawbacks.
>> >
>> >> > If you explicitely specify the output format that you want, then the
>> >> > default is irrelevant to you, thus you have your ideal explicit
>> >> > interface.
>> >> 
>> >> That's not what I had in mind, sorry. It'd rather be something like:
>> >> 
>> >>   --raw: set "raw" bit and clear all the rest
>> >>   --+raw set "raw" bit  (== current --raw)
>> >>   ---raw clear "raw" bit (== --no-raw)
>> >> 
>> >> In this model
>> >> 
>> >>   git show
>> >> 
>> >> would be just an alias for
>> >> 
>> >>   git log -n1 --patch --cc
>> >> 
>> >> and no support for a separate command would be need in the first place.
>> >> 
>> >>   git show --raw
>> >> 
>> >> would then produce expected output that makes sense due to the common
>> >> option processing rules, not because somebody had implemented some
>> >> arbitrary "defaults" for the command.
>> >
>> > But now you are at the mercy of those "arbitrary defaults".
>> 
>> No, see below.
>> 
>> >
>> > Let's say those defaults change, and now the default output of `git show` is
>> > `--stat`.
>> >
>> > Now to generate the same output you have to do:
>> >
>> >   git show --raw
>> >
>> > in one version of git, and:
>> >
>> >   git show --no-stat --patch --raw
>> >
>> > in another.
>> 
>> No: --raw in my model clears all the flags but --raw, so
>> 
>>   git show --raw
>> 
>> will produce exactly the same result: raw output only.
>
> But that {--,--+,---} notion doesn't exist, and I think it's safe to say it
> will never exist. So, could we limit or solution-space to those solutions that
> could have the potential to be merged?

I didn't expect it to exist any time soon, just showed a different way of options design.

Show 7 quoted lines
>
> What you suggest could be easily achieved with:
>
>   git show --silent --raw
>
> But because no other format is explicitely specified, following my notion of
> defaults, that's the same as:

The problem that I tried to fight is this notion of defaults that is somewhat special, so, if I allow for it, the rest of my suggestions becomes pointless, and without the "defaults" with non-trivial behavior[*]

   git show --raw

won't work as expected provided --raw still just sets "raw" bit and doesn't clear all the rest.

What I described was not meant as an immediate proposal to quickly fix current CI. Please don't try to get that as such.

[*] Defaults with trivial behavior is just initializing of internal variable holding flags with specific value, that is exactly the same as putting corresponding option(s) at the beginning.

Thanks, -- Sergey Organov

Previous: Felipe ContrerasNext: Felipe Contreras
Message 14 of 39 in “Can we clarify the purpose of `git diff -s`?”
  1. Felipe ContrerasMay 11, 2023
  2. Sergey OrganovMay 11, 2023
  3. Junio C HamanoMay 11, 2023
  4. Junio C HamanoMay 11, 2023
  5. Sergey OrganovMay 11, 2023
  6. Junio C HamanoMay 11, 2023
  7. Felipe ContrerasMay 11, 2023
  8. Felipe ContrerasMay 11, 2023
  9. Felipe ContrerasMay 11, 2023
  10. Sergey OrganovMay 11, 2023
  11. Felipe ContrerasMay 11, 2023
  12. Sergey OrganovMay 11, 2023
  13. Felipe ContrerasMay 11, 2023
  14. Sergey OrganovMay 11, 2023
  15. Felipe ContrerasMay 11, 2023
  16. Sergey OrganovMay 11, 2023
  17. Felipe ContrerasMay 11, 2023
  18. Sergey OrganovMay 12, 2023
  19. Felipe ContrerasMay 12, 2023
  20. Matthieu MoyMay 12, 2023
  21. Junio C HamanoMay 12, 2023
  22. Sergey OrganovMay 12, 2023
  23. Junio C HamanoMay 12, 2023
  24. Junio C HamanoMay 12, 2023
  25. Felipe ContrerasMay 12, 2023
  26. Junio C HamanoMay 12, 2023
  27. Felipe ContrerasMay 12, 2023
  28. Junio C HamanoMay 12, 2023
  29. Junio C HamanoMay 12, 2023
  30. Felipe ContrerasMay 12, 2023
  31. Sergey OrganovMay 12, 2023
  32. Junio C HamanoMay 12, 2023
  33. Sergey OrganovMay 12, 2023
  34. Felipe ContrerasMay 12, 2023
  35. Philip OakleyMay 13, 2023
  36. Sergey OrganovMay 13, 2023
  37. Felipe ContrerasMay 12, 2023
  38. Felipe ContrerasMay 12, 2023
  39. Felipe ContrerasMay 12, 2023

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.