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

From: Sergey Organov <[email-masked]>
Date: Thu, 11 May 2023 21:31:05 +0300

Felipe Contreras <[email-masked]> 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.

>
> 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.

Then one can even think about supporting some niceties like

  git log --patch+raw

In other words, if we provide full orthogonal access to (the diff
output) bits using CL options, no special code wold be ever needed to
implement some niceties and shortcuts.

Disclaimer: please keep this with a grain of salt as this is not a
carefully thought-through proposal. Not yet anyway. Just me thinking
aloud.

For *nix guys, the closest analogy to the above is probably:

    chmod og-wx

Thanks,
-- Sergey Organov