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. Probably nobody actually cared at that time, me thinks. > > "Should --no-patch be changed" can be treated as a separate issue, > and whenever we can treat two things separately, I want to do so, to > keep the potential blast radius smaller. Sure it's a separate change. When I said "immediate" I meant that there is no need for some transition measures like config variables, not that it is to be included in the "fix -s". > That way, if an earlier change turns out OK but the other change > causes severe regression, we can only revert or rework the latter. An > exception is if committing to one change (e.g. "fix '-s'") makes the > other change (e.g. "redefine --no-patch") impossible, but we all know > it is not the case here. I gave an outline of how to go about it in > the log message of that "fix '-s'" patch. > > I do not think it will break established use cases too badly to fix > the behaviour of "-s" so that it does not get stuck. We saw an > existing breakage in one test, but asking the owners of scripts that > make the same mistake of assuming "-s" gets stuck for some but not > other options to fix that assumption based on an earlier faulty > implementation is much easier. > > 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. > 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! Thanks, -- Sergey Organov