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

[PATCH v1 0/7] diff: fix -s and --no-patch

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
May 12, 2023, 08:03 UTC
Message-ID
<20230512080339.2186324-1-felipe.contreras@gmail.com>

The diff code assumes 0 means the default, and --no-patch means NO_OUTPUT.

The problem with this approach is that it doesn't allow distinguishing `git diff --no-patch`, `git diff --patch --no-patch`, and `git diff`.

By introducing a DIFF_FORMAT_DEFAULT (which is not 0) it's now possible to properly distinguish these arguments, and get rid of DIFF_FORMAT_NO_OUTPUT which should have never been considered a format, but the absence of a format.

This fixes an issue Sergey Organov reported.

Up to patch #2 (diff: introduce DIFF_FORMAT_DEFAULT) there are no functional changes, patch #3 (diff: make DIFF_FORMAT_NO_OUTPUT 0) achieves the same as a series from Junio Hamano [1] except more properly. Patch #4 adds a simplified version of Junio's test cases.

Then in patch #5 --no-patch is split from -s, making it work as intended: negates --patch, but not other formats.

The rest are some niceties.
Now all these work correctly:
 1. git diff --raw
 2. git diff -s --raw
 3. git diff --no-patch
 4. git diff --no-patch --raw
 5. git diff --patch --no-patch --raw
 6. git diff --raw --patch --no-patch
[1] https://lore.kernel.org/git/20230505165952.335256-1-gitster@pobox.com/
Felipe Contreras (7):
  line-log: set patch format explicitly by default
  diff: introduce DIFF_FORMAT_DEFAULT
  diff: make DIFF_FORMAT_NO_OUTPUT 0
  test: add various tests for diff formats with -s
  diff: split --no-patch from -s
  diff: add --silent as alias of -s
  diff: remove DIFF_FORMAT_NO_OUTPUT
 Documentation/diff-options.txt |  6 ++--
 blame.c                        |  6 ++--
 builtin/diff-files.c           |  2 +-
 builtin/diff-index.c           |  2 +-
 builtin/diff-tree.c            |  2 +-
 builtin/diff.c                 |  2 +-
 builtin/log.c                  | 16 +++++++---
 builtin/stash.c                |  4 +--
 builtin/submodule--helper.c    |  2 +-
 combine-diff.c                 | 10 +++---
 diff-merges.c                  |  2 +-
 diff-no-index.c                |  2 +-
 diff.c                         | 56 ++++++++++++++++++----------------
 diff.h                         |  6 +---
 line-log.c                     |  2 +-
 log-tree.c                     |  4 +--
 merge-ort.c                    |  4 +--
 merge-recursive.c              |  4 +--
 notes-merge.c                  |  4 +--
 range-diff.c                   |  4 +--
 revision.c                     |  6 ++--
 t/t4000-diff-format.sh         | 26 ++++++++++++++--
 tree-diff.c                    |  2 +-
 23 files changed, 99 insertions(+), 75 deletions(-)
-- 
2.40.0+fc1
Next: Felipe Contreras
Message 1 of 10 in “diff: fix -s and --no-patch”
  1. 0/7 diff: fix -s and --no-patchFelipe Contreras, May 12, 2023
  2. 1/7 line-log: set patch format explicitly by defaultFelipe Contreras, May 12, 2023
  3. 2/7 diff: introduce DIFF_FORMAT_DEFAULTFelipe Contreras, May 12, 2023
  4. 3/7 diff: make DIFF_FORMAT_NO_OUTPUT 0Felipe Contreras, May 12, 2023
  5. 4/7 test: add various tests for diff formats with -sFelipe Contreras, May 12, 2023
  6. 5/7 diff: split --no-patch from -sFelipe Contreras, May 12, 2023
  7. 6/7 diff: add --silent as alias of -sFelipe Contreras, May 12, 2023
  8. 7/7 diff: remove DIFF_FORMAT_NO_OUTPUTFelipe Contreras, May 12, 2023
  9. Felipe ContrerasMay 12, 2023
  10. Sergey OrganovMay 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.