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 of a format, but the absense of the DIFF_FORMAT_PATCH format. This fixes an issue Sergey Organov reported. Now all these 3 work correctly: 1. git diff --raw 2. git diff --patch --no-patch --raw 3. git diff --raw --patch --no-patch Felipe Contreras (3): line-log: set patch format explicitly by default diff: introduce DIFF_FORMAT_DEFAULT diff: remove DIFF_FORMAT_NO_OUTPUT Sergey Organov (1): t4013: add expected failure for "log --patch --no-patch" 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 | 53 ++++++++++++++++++------------------- 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/t4013-diff-various.sh | 8 ++++++ tree-diff.c | 2 +- 22 files changed, 78 insertions(+), 69 deletions(-) -- 2.40.0+fc1