So here is the reworked series. The previous attempt mostly correspond to [4/5] of this series, but the approach has been quite updated, so here is marked as "v2" but I omitted the interdiff as it would be more or less useless. The first patch is not part of the main theme, but because I'll be adding the first use of "--dirstat" to t4015 that has been leak sanitizer clean, and the "--dirstat" codepath has known leaks, I am plugging the leaks as a preliminary step to avoid having to mark t4015 as leak sanitizer unclean again. The second patch flips around order of processing without changing the meaning. After this change, blocks that compute output that also take contents into account are grouped together, before the fallback code for output formats that do not look at the contents to compute their result. It is purely done as a clean-up. The earlier series claimed that "--exit-code -w" is reliable as long as "--patch" output is used, but it turns out that there are corner case holes in the "--patch" codepath. The third patch fixes them. The fourth patch teachs "--stat" codepath to help "--exit-code -w"; as it looks at contents to produce its output, we note the fact that we found (or did not find) differences, and use that for the exit code computation. The fifth patch deals with other output modes that do not look at contents for their output to reuse the fallback code. Junio C Hamano (5): diff: --dirstat leakfix diff: move the fallback "--exit-code" code down diff: mode-only change should be noticed by "--patch -w --exit-code" diff: teach "--stat -w --exit-code" to notice differences diff: teach "--name-status" and friends to honor "--exit-code -w" diff.c | 71 +++++++++++++++++++++++++++----------- t/t4015-diff-whitespace.sh | 36 ++++++++++++++++++- t/t4047-diff-dirstat.sh | 2 ++ 3 files changed, 87 insertions(+), 22 deletions(-) -- 2.42.0-rc2