[PATCH] Allow git-diff exit with codes similar to diff(1)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]