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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Sergey Organov wrote:
> Junio C Hamano <gitster@xxxxxxxxx> writes:
> 
> > Sergey Organov <sorganov@xxxxxxxxx> writes:
> >
> >> I entirely agree with your conclusion: obviously, -s (--silent) and
> >> --no-patch are to be different for UI to be even remotely intuitive, and
> >> I'd vote for immediate fix of --no-patch semantics even though it's a
> >> backward-incompatible change.
> >
> > I forgot to write about this part.
> >
> > tl;dr.  While I do not think the current "--no-patch" that turns off
> > things other than "--patch" is intuitive, an "immediate" change is
> > not possible.  Let's do one fix at a time.
> >
> > The behaviour came in the v1.8.4 days with a series that was merged
> > by e2ecd252 (Merge branch 'mm/diff-no-patch-synonym-to-s',
> > 2013-07-22), which
> >
> >  * made "--no-patch" a synonym for "-s";
> >
> >  * fixed "-s --patch", in which the effect of "-s" got stuck and did
> >    not allow the patch output to be re-enabled again with "--patch";
> >
> >  * updated documentation to explain "--no-patch" as a synonym for
> >    "-s".
> >
> > While it is very clear that the intent of the author was to make it
> > a synonym for "-s" and not a "feature-wise enable/disable" option,
> > that is what we've run with for the past 10 years.  You identified
> > bugs related the "-s got stuck" problem and we recently fixed that.
> 
> I wonder, why this intention of the author has not been opposed at that
> time is beyond my understanding, sorry! What exactly did it bring to
> make --no-patch a synonym for -s? Not only it's illogical, it's even not
> useful as being more lengthy.

That's because it's not true.

The intention wasn't to make `--no-patch` a synonym, the intention was to make
disabling the patch output of `git diff` more accessible.

The cover letter makes it clear [1].

  "git show" will show the diff by default. For merge commits, it shows the
  --cc diff which is often empty, hence the behavior you see.

  You want to use "git show -s", which suppresses the patch output, and this
  "git show -s" is extraordinarily hard to discover, as it is only documented
  in "git log --help". Google has been my friend here, but we should really
  improve that.

The code at the time did not allow turning off only one output, using
DIFF_FORMAT_NO_OUTPUT was easy, so that's what they did.

> > But "git diff --stat --patch --no-patch", which suddenly starts
> > showing diffstat after you make "--no-patch" no longer a synonym for
> > "-s", has a much larger potential to break the existing workflows.
> > And I do not think asking the users who followed the documented
> > "--no-patch is a synonym for -s" to change their script because we
> > decided to make "--no-patch" no longer a synonym is much harder.
> 
> Why somebody would use --no-patch instead of -s when she means -s? Is't
> it obvious that
> 
>    git diff --stat --patch -s
> 
> is not only shorter but dramatically more clear than
> 
>    git diff --stat --patch --no-patch
> 
> ???
> 
> Taking this into account, I'd predict no breakage at all.

I agree.

I bet there's very few people relying on this behavior (if any), which is
precisely why nobody noticed the bug until now.

If we are going to break backwards-compatibility, we should break it correctly:
split `--no-patch` from `-s`, and make it only negate `--patch`.

> > So, no, I do not think we can immediately "fix".  I do not think
> > anybody knows if it can be done "immediately" or needs a careful
> > planning to transition, and I offhand do not know if it is even
> > possible to transition without fallout.
> 
> This has been expected, and this is one of the things that stops me from
> trying to "fix" anything in the Git UI recently. I think that perfectly
> legit carefulness from the maintainer to be conservative in accepting of
> such changes goes a bit too far, sorry!

And you were correct.

I did write a patch series that actually fixes the problem correctly, and the
maintainer completely ignored it in favor of his partial solution.

So you would have wasted your time trying to fix this correctly, as I probably
did.

Cheers.

[1] https://lore.kernel.org/git/1373893639-13413-1-git-send-email-Matthieu.Moy@xxxxxxx/

-- 
Felipe Contreras



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux