This introduces a new command-line option: --exit-code. The diff programs will return 1 for differences, return 0 for equality, and something else for errors. Signed-off-by: Alex Riesen <raa.lkml@xxxxxxxxx> --- Updated the patch: - added more tests: path limiter and -S - moved exit code into diff_options and used diffcore_std* for its evaluation On 3/14/07, Junio C Hamano <junkio@xxxxxxx> wrote:
> Challenging... Now, if someone just told me where to look for > differences in diff-tree case... As the resident git-diff expert I might hack on this myself as the --quiet options are useful, and --exit-code comes almost free when you properly do --quiet that implies --quick.
Thanks! That would _most_ welcome :)
> Can it eventually be wired to "-s" (DIFF_FORMAT_NO_OUTPUT)? I do not think so. When we run diff internally to pick the set of paths (i.e. run diffcore and check contents of diff_queue, just like you did for diff-index/diff-files), we internally use NO_OUTPUT. See merge-recursive.c for an example.
Right, is not that simple as it looks...
>> > diffcore_std(&revs->diffopt); >> > + ret = revs->diffopt.diff_exit_code && diff_queued_diff.nr ? 1: 0; >> > diff_flush(&revs->diffopt); >> > return ret; >> > } >> >> This side looks correct, as you are counting queued_diff.nr after >> letting diffcore_std() to filter the results. > > And it will continue to work if the diffing is left early because of > no output needed. Err, will it? To implement --quick correctly, you need to know when it is safe to leave early. Presence of -S (pickaxe) would most likely mean you shouldn't leave early.
Thanks, that got me thinking. Moved all exit code evaluation into diffcore_std, added a field for the code to diff_options, and use it if called with --exit-code. Documentation/diff-options.txt | 5 +++ builtin-diff-files.c | 4 ++- builtin-diff-index.c | 4 ++- builtin-diff-tree.c | 4 +- builtin-diff.c | 19 +++++++----- diff-lib.c | 5 ++- diff.c | 6 ++++ diff.h | 5 ++- t/t4017-diff-retval.sh | 64 ++++++++++++++++++++++++++++++++++++++++ 9 files changed, 102 insertions(+), 14 deletions(-) create mode 100755 t/t4017-diff-retval.sh
Attachment:
0001-Allow-git-diff-exit-with-codes-similar-to-diff-1.patch
Description: application/xxxxx