Skip to content

Commit

Permalink
rev-parse --verify: do not output anything on error
Browse files Browse the repository at this point in the history
Before this patch, when "git rev-parse --verify" was passed at least one
good rev and then anything, it would output something for the good rev
even if it would latter exit on error.

With this patch, we only output something if everything is ok.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Christian Couder authored and Junio C Hamano committed May 11, 2008
1 parent 28bfa14 commit dfd1b74
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 24 deletions.
38 changes: 23 additions & 15 deletions builtin-rev-parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@ static int symbolic;
static int abbrev;
static int output_sq;

static int revs_count;

/*
* Some arguments are relevant "revision" arguments,
* others are about output format or other details.
Expand Down Expand Up @@ -102,7 +100,6 @@ static void show_rev(int type, const unsigned char *sha1, const char *name)
if (!(filter & DO_REVS))
return;
def = NULL;
revs_count++;

if (type != show_type)
putchar('^');
Expand Down Expand Up @@ -150,7 +147,7 @@ static int show_flag(const char *arg)
return 0;
}

static void show_default(void)
static int show_default(void)
{
const char *s = def;

Expand All @@ -160,9 +157,10 @@ static void show_default(void)
def = NULL;
if (!get_sha1(s, sha1)) {
show_rev(NORMAL, sha1, s);
return;
return 1;
}
}
return 0;
}

static int show_reference(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
Expand Down Expand Up @@ -375,8 +373,9 @@ static void die_no_single_rev(int quiet)

int cmd_rev_parse(int argc, const char **argv, const char *prefix)
{
int i, as_is = 0, verify = 0, quiet = 0;
int i, as_is = 0, verify = 0, quiet = 0, revs_count = 0, type = 0;
unsigned char sha1[20];
const char *name = NULL;

if (argc > 1 && !strcmp("--parseopt", argv[1]))
return cmd_parseopt(argc - 1, argv + 1, prefix);
Expand Down Expand Up @@ -568,12 +567,17 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
/* Not a flag argument */
if (try_difference(arg))
continue;
if (!get_sha1(arg, sha1)) {
show_rev(NORMAL, sha1, arg);
continue;
name = arg;
type = NORMAL;
if (*arg == '^') {
name++;
type = REVERSED;
}
if (*arg == '^' && !get_sha1(arg+1, sha1)) {
show_rev(REVERSED, sha1, arg+1);
if (!get_sha1(name, sha1)) {
if (verify)
revs_count++;
else
show_rev(type, sha1, name);
continue;
}
if (verify)
Expand All @@ -583,10 +587,14 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
continue;
verify_filename(prefix, arg);
}
if (verify && revs_count == 1)
return 0;
show_default();
if (verify && revs_count != 1)
if (verify) {
if (revs_count == 1) {
show_rev(type, sha1, name);
return 0;
} else if (revs_count == 0 && show_default())
return 0;
die_no_single_rev(quiet);
} else
show_default();
return 0;
}
12 changes: 3 additions & 9 deletions t/t1503-rev-parse-verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,11 @@ test_expect_success 'fails silently when using -q' '
test -z "$(cat error)"
'

test_expect_success '1 no stdout output on error' '
test_expect_success 'no stdout output on error' '
test -z "$(git rev-parse --verify)" &&
test -z "$(git rev-parse --verify foo)" &&
test -z "$(git rev-parse --verify baz HEAD)"
'

test_expect_failure '2 no stdout output on error' '
test -z "$(git rev-parse --verify HEAD bar)"
'

test_expect_failure '3 no stdout output on error' '
test -z "$(git rev-parse --verify baz HEAD)" &&
test -z "$(git rev-parse --verify HEAD bar)" &&
test -z "$(git rev-parse --verify $HASH2 HEAD)"
'

Expand Down

0 comments on commit dfd1b74

Please sign in to comment.