diff options
author | Junio C Hamano <junkio@cox.net> | 2006-12-17 19:27:49 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-12-17 19:36:50 -0800 |
commit | 64fe031a7a78894955af217335b46059a36a582d (patch) | |
tree | f46b38f6a560546532dc34f5769fa5a0dfbe7472 /builtin-show-ref.c | |
parent | dd9142993c0954e2fd325431235bc7556189a01c (diff) | |
download | git-64fe031a7a78894955af217335b46059a36a582d.tar.gz git-64fe031a7a78894955af217335b46059a36a582d.tar.xz |
show-ref: fix --verify --hash=length
An earlier optimization for --verify broke a lot of stuff
because it did not take interaction with other flags into
account.
This also fixes an unrelated argument parsing error; --hash=8
should mean the same as "--hash --abbrev=8".
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'builtin-show-ref.c')
-rw-r--r-- | builtin-show-ref.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/builtin-show-ref.c b/builtin-show-ref.c index 0fd606f39..296070628 100644 --- a/builtin-show-ref.c +++ b/builtin-show-ref.c @@ -10,6 +10,15 @@ static int deref_tags = 0, show_head = 0, tags_only = 0, heads_only = 0, found_match = 0, verify = 0, quiet = 0, hash_only = 0, abbrev = 0; static const char **pattern; +static void show_one(const char *refname, const unsigned char *sha1) +{ + const char *hex = find_unique_abbrev(sha1, abbrev); + if (hash_only) + printf("%s\n", hex); + else + printf("%s %s\n", hex, refname); +} + static int show_ref(const char *refname, const unsigned char *sha1, int flag, void *cbdata) { struct object *obj; @@ -58,11 +67,7 @@ match: if (quiet) return 0; - hex = find_unique_abbrev(sha1, abbrev); - if (hash_only) - printf("%s\n", hex); - else - printf("%s %s\n", hex, refname); + show_one(refname, sha1); if (!deref_tags) return 0; @@ -175,13 +180,13 @@ int cmd_show_ref(int argc, const char **argv, const char *prefix) if (!strncmp(arg, "--hash=", 7) || (!strncmp(arg, "--abbrev", 8) && (arg[8] == '=' || arg[8] == '\0'))) { - if (arg[3] != 'h' && !arg[8]) + if (arg[2] != 'h' && !arg[8]) /* --abbrev only */ abbrev = DEFAULT_ABBREV; else { /* --hash= or --abbrev= */ char *end; - if (arg[3] == 'h') { + if (arg[2] == 'h') { hash_only = 1; arg += 7; } @@ -218,10 +223,10 @@ int cmd_show_ref(int argc, const char **argv, const char *prefix) unsigned char sha1[20]; while (*pattern) { - if (resolve_ref(*pattern, sha1, 1, NULL)) { + if (!strncmp(*pattern, "refs/", 5) && + resolve_ref(*pattern, sha1, 1, NULL)) { if (!quiet) - printf("%s %s\n", - sha1_to_hex(sha1), *pattern); + show_one(*pattern, sha1); } else if (!quiet) die("'%s' - not a valid ref", *pattern); |