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

Re: [PATCH] diff: fix behaviour of the "-s" option

From
Junio C Hamano <gitster@pobox.com>
Date
May 5, 2023, 16:51 UTC
Message-ID
<xmqqlei2en6t.fsf@gitster.g>
In-Reply-To
<xmqq4joribyv.fsf@gitster.g>
Junio C Hamano <gitster@pobox.com> writes:
Show 12 quoted lines
> ...  I think the "historical
> reasons" why we did not do that was because we wanted to be able to
> do a flexible defaulting. ...
> This would almost work, except that it would
> make it hard to tell "no command line options" case and "'-s' cleared
> all bits" case apart (the former wants to default to "--patch",
> while the latter wants to stay "no output"), and it probably was the
> reason why we gave an extra NO_OUTPUT bit to the "-s" option.  In
> hindsight, the arrangement certainly made other things harder and
> prone to unnecessary bugs.
>
> Anyway...

The distinction between the presense of NO_OUTPUT bit and absolutely empty output_format word indeed is used by "git show", in the builtin/log.c::show_setup_revisions_tweak() function.

We could lose DIFF_FORMAT_NO_OUTPUT bit, but then we need to replace it with something else (i.e. DIFF_FORMAT_OPTION_GIVEN bit), and

 * "--patch", "--raw", etc. will set DIFF_FORMAT_$format bit and
   DIFF_FORMAT_OPTION_GIVEN bit on for each format.  "--no-raw", 
   etc. will set off DIFF_FORMAT_$format bit but still record the
   fact that we saw an option from the command line by setting
   DIFF_FORMAT_OPTION_GIVEN bit.
 * "-s" (and its synonym "--no-patch") will set the
   DIFF_FORMAT_OPTION_GIVEN bit on, and clear all other bits.

which I suspect would make the code much cleaner without breaking any end-user expectations.

Once that is in place, transitioning "--no-patch" to mean the counterpart of "--patch", just like "--no-raw" only defeats an earlier "--raw", would be quite simple at the code level. The social cost of migrating the end-user expectations might be too great for it to be worth, but at least the "GIVEN" bit clean-up alone may be worth it.

Not that I would be starting the process right away...
Previous: Junio C HamanoNext: Felipe Contreras
Message 13 of 42 in “t4013: add expected failure for "log --patch --no-patch"”
  1. t4013: add expected failure for "log --patch --no-patch"Sergey Organov, May 3, 2023
  2. Junio C HamanoMay 3, 2023
  3. Sergey OrganovMay 3, 2023
  4. Junio C HamanoMay 3, 2023
  5. Felipe ContrerasMay 3, 2023
  6. Sergey OrganovMay 3, 2023
  7. Junio C HamanoMay 4, 2023
  8. Sergey OrganovMay 4, 2023
  9. Junio C HamanoMay 4, 2023
  10. Re* [PATCH] t4013: add expected failure for "log --patch --no-patch"Junio C Hamano, May 4, 2023
  11. diff: fix behaviour of the "-s" optionJunio C Hamano, May 4, 2023
  12. Junio C HamanoMay 5, 2023
  13. Junio C HamanoMay 5, 2023
  14. Felipe ContrerasMay 9, 2023
  15. Sergey OrganovMay 5, 2023
  16. Junio C HamanoMay 5, 2023
  17. Sergey OrganovMay 5, 2023
  18. diff: fix interaction between the "-s" option and other optionsJunio C Hamano, May 5, 2023
  19. Eric SunshineMay 5, 2023
  20. Junio C HamanoMay 5, 2023
  21. 0/2 dirstat: leakfixJunio C Hamano, May 5, 2023
  22. 2/2 diff: plug leaks in dirstatJunio C Hamano, May 5, 2023
  23. 1/2 diff: refactor common tail part of dirstat computationJunio C Hamano, May 5, 2023
  24. Felipe ContrerasMay 9, 2023
  25. Junio C HamanoMay 9, 2023
  26. Felipe ContrerasMay 9, 2023
  27. Junio C HamanoMay 10, 2023
  28. Felipe ContrerasMay 10, 2023
  29. Felipe ContrerasMay 10, 2023
  30. Jeff KingMay 11, 2023
  31. Felipe ContrerasMay 13, 2023
  32. Junio C HamanoMay 11, 2023
  33. Felipe ContrerasMay 13, 2023
  34. Felipe ContrerasMay 9, 2023
  35. Sergey OrganovMay 10, 2023
  36. Felipe ContrerasMay 10, 2023
  37. Felipe ContrerasMay 9, 2023
  38. Junio C HamanoMay 4, 2023
  39. Sergey OrganovMay 4, 2023
  40. Felipe ContrerasMay 9, 2023
  41. Sergey OrganovMay 10, 2023
  42. Felipe ContrerasMay 10, 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.