Enable git rev-list to parse --quiet git rev-list never sees the --quiet option because --quiet is also an option for diff-files. Example: $ ./git rev-list --quiet ^HEAD~2 HEAD 1e102bf7c83281944ffd9202a7d35c514e4a5644 3bf0dd1f4e75ee1591169b687ce04dff00ae2e3e $ echo $? 0 The fix scans the argument list to detect --quiet before passing it to setup_revisions(). It also arranges to count the number of commits or objects (whether sent to STDOUT or not) so --quiet can return an appropriate exit code (1 if there were commits/objects, 0 otherwise). After fix: $ ./git rev-list --quiet ^HEAD~2 HEAD $ echo $? 1 --- builtin-rev-list.c | 28 ++++++++++++++++++++++++---- 1 files changed, 24 insertions(+), 4 deletions(-) diff --git a/builtin-rev-list.c b/builtin-rev-list.c index 8e1720c..e2e5e13 100644 --- a/builtin-rev-list.c +++ b/builtin-rev-list.c @@ -52,6 +52,11 @@ static const char rev_list_usage[] = static struct rev_info revs; +/* Count of number of commits or objects noticed (even if not output). + * Used by --quiet option to set an appropriate exit status. + */ +static int seen_count; + static int bisect_list; static int show_timestamp; static int hdr_termination; @@ -167,12 +172,14 @@ static void finish_commit(struct commit *commit) } free(commit->buffer); commit->buffer = NULL; + seen_count++; } static void finish_object(struct object_array_entry *p) { if (p->item->type == OBJ_BLOB && !has_sha1_file(p->item->sha1)) die("missing blob object '%s'", sha1_to_hex(p->item->sha1)); + seen_count++; } static void show_object(struct object_array_entry *p) @@ -588,6 +595,17 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) init_revisions(&revs, prefix); revs.abbrev = 0; revs.commit_format = CMIT_FMT_UNSPECIFIED; + + /* Parse options which are also recognised by git-diff-files */ + for (i = 1 ; i < argc; i++) { + const char *arg = argv[i]; + + if (!strcmp(arg, "--quiet")) { + quiet = 1; + continue; + } + } + argc = setup_revisions(argc, argv, &revs, NULL); for (i = 1 ; i < argc; i++) { @@ -621,10 +639,6 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) read_revisions_from_stdin(&revs); continue; } - if (!strcmp(arg, "--quiet")) { - quiet = 1; - continue; - } usage(rev_list_usage); } @@ -700,9 +714,15 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) } } + seen_count = 0; + traverse_commit_list(&revs, quiet ? finish_commit : show_commit, quiet ? finish_object : show_object); + if (quiet) { + return seen_count ? 1 : 0; + } + return 0; } -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html