All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonas Gehring <jonas.gehring@boolsoft.org>
To: git@vger.kernel.org
Cc: gitster@pobox.com
Subject: [PATCH/RFC] Implemented return value for rev-list --quiet
Date: Wed, 27 Apr 2011 00:36:37 +0200	[thread overview]
Message-ID: <4DB748F5.4050300@boolsoft.org> (raw)

If --quiet is given, the program will return non-zero if the traversed
commit set was empty. This way, rev-list can be used to check commit
ancestry as described by the documentation for --quiet.

"Non-zero" is implemented as 1 in order to avoid confusion with the
usual 128 for die_builtin().

Signed-off-by: Jonas Gehring <jonas.gehring@boolsoft.org>
---
 builtin/rev-list.c        |    8 ++++++++
 revision.h                |    1 +
 t/t6041-rev-list-quiet.sh |   27 +++++++++++++++++++++++++++
 3 files changed, 36 insertions(+), 0 deletions(-)
 create mode 100755 t/t6041-rev-list-quiet.sh

diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index 9bfb942..001d6af 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -157,12 +157,17 @@ static void show_commit(struct commit *commit, void *data)
 
 static void finish_commit(struct commit *commit, void *data)
 {
+	struct rev_list_info *info = data;
+	struct rev_info *revs = info->revs;
+
 	if (commit->parents) {
 		free_commit_list(commit->parents);
 		commit->parents = NULL;
 	}
 	free(commit->buffer);
 	commit->buffer = NULL;
+
+	revs->count_finished++;
 }
 
 static void finish_object(struct object *obj, const struct name_path *path, const char *name)
@@ -412,5 +417,8 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
 			printf("%d\n", revs.count_left + revs.count_right);
 	}
 
+	if (quiet)
+		/* Return non-zero if no commits have been traversed. */
+		return (revs.count_finished == 0 ? 1 : 0);
 	return 0;
 }
diff --git a/revision.h b/revision.h
index 9fd8f30..ddc35d2 100644
--- a/revision.h
+++ b/revision.h
@@ -141,6 +141,7 @@ struct rev_info {
 	/* commit counts */
 	int count_left;
 	int count_right;
+	int count_finished;
 };
 
 #define REV_TREE_SAME		0
diff --git a/t/t6041-rev-list-quiet.sh b/t/t6041-rev-list-quiet.sh
new file mode 100755
index 0000000..6cb9120
--- /dev/null
+++ b/t/t6041-rev-list-quiet.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+test_description='Non-zero return value for empty commit sets and --quiet'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+	echo >fileA fileA
+	git add fileA
+	git commit -a -m "Initial"
+	echo >fileA fileA modified
+	git commit -a -m "fileA modified"
+'
+
+test_expect_success 'not quiet' '
+	test $(git rev-list master | wc -l) = 2 &&
+	test $(git rev-list master..master^ | wc -l) = 0 &&
+	test $(git rev-list master^..master | wc -l) = 1
+'
+
+test_expect_success '--quiet' '
+	test $(git rev-list --quiet master; echo $?) = 0 &&
+	test $(git rev-list --quiet master..master^; echo $?) != 0 &&
+	test $(git rev-list --quiet master^..master; echo $?) = 0
+'
+
+test_done
-- 
1.7.4.4

             reply	other threads:[~2011-04-26 22:40 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-26 22:36 Jonas Gehring [this message]
2011-04-26 23:02 ` [PATCH/RFC] Implemented return value for rev-list --quiet Junio C Hamano
2011-04-26 23:31   ` Jonas Gehring
2011-04-26 23:47     ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4DB748F5.4050300@boolsoft.org \
    --to=jonas.gehring@boolsoft.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.