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
next 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).