Browse Source

show-ref --hash=len, --abbrev=len, and --abbrev

This teaches show-ref to abbreviate the object name.

Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Junio C Hamano 19 years ago
parent
commit
2eaf22242f
  1. 12
      Documentation/git-show-ref.txt
  2. 35
      builtin-show-ref.c

12
Documentation/git-show-ref.txt

@ -9,7 +9,7 @@ SYNOPSIS
-------- --------
[verse] [verse]
'git-show-ref' [-q|--quiet] [--verify] [-h|--head] [-d|--dereference] 'git-show-ref' [-q|--quiet] [--verify] [-h|--head] [-d|--dereference]
[-s|--hash] [--tags] [--heads] [--] <pattern>... [-s|--hash] [--abbrev] [--tags] [--heads] [--] <pattern>...


DESCRIPTION DESCRIPTION
----------- -----------
@ -37,14 +37,13 @@ OPTIONS


-d, --dereference:: -d, --dereference::


Dereference tags into object IDs. They will be shown with "^{}" Dereference tags into object IDs as well. They will be shown with "^{}"
appended. appended.


-s, --hash:: -s, --hash::


Only show the SHA1 hash, not the reference name. When also using Only show the SHA1 hash, not the reference name. When also using
--dereference the dereferenced tag will still be shown after the SHA1, --dereference the dereferenced tag will still be shown after the SHA1.
this maybe a bug.


--verify:: --verify::


@ -52,6 +51,11 @@ OPTIONS
Aside from returning an error code of 1, it will also print an error Aside from returning an error code of 1, it will also print an error
message if '--quiet' was not specified. message if '--quiet' was not specified.


--abbrev, --abbrev=len::

Abbreviate the object name. When using `--hash`, you do
not have to say `--hash --abbrev`; `--hash=len` would do.

-q, --quiet:: -q, --quiet::


Do not print any results to stdout. When combined with '--verify' this Do not print any results to stdout. When combined with '--verify' this

35
builtin-show-ref.c

@ -6,12 +6,13 @@
static const char show_ref_usage[] = "git show-ref [-q|--quiet] [--verify] [-h|--head] [-d|--dereference] [-s|--hash] [--tags] [--heads] [--] [pattern*]"; static const char show_ref_usage[] = "git show-ref [-q|--quiet] [--verify] [-h|--head] [-d|--dereference] [-s|--hash] [--tags] [--heads] [--] [pattern*]";


static int deref_tags = 0, show_head = 0, tags_only = 0, heads_only = 0, static int deref_tags = 0, show_head = 0, tags_only = 0, heads_only = 0,
found_match = 0, verify = 0, quiet = 0, hash_only = 0; found_match = 0, verify = 0, quiet = 0, hash_only = 0, abbrev = 0;
static const char **pattern; static const char **pattern;


static int show_ref(const char *refname, const unsigned char *sha1, int flag, void *cbdata) static int show_ref(const char *refname, const unsigned char *sha1, int flag, void *cbdata)
{ {
struct object *obj; struct object *obj;
const char *hex;


if (tags_only || heads_only) { if (tags_only || heads_only) {
int match; int match;
@ -51,13 +52,16 @@ match:
} }
if (quiet) if (quiet)
return 0; return 0;

hex = find_unique_abbrev(sha1, abbrev);
if (hash_only) if (hash_only)
printf("%s\n", sha1_to_hex(sha1)); printf("%s\n", hex);
else else
printf("%s %s\n", sha1_to_hex(sha1), refname); printf("%s %s\n", hex, refname);
if (deref_tags && obj->type == OBJ_TAG) { if (deref_tags && obj->type == OBJ_TAG) {
obj = deref_tag(obj, refname, 0); obj = deref_tag(obj, refname, 0);
printf("%s %s^{}\n", sha1_to_hex(obj->sha1), refname); hex = find_unique_abbrev(obj->sha1, abbrev);
printf("%s %s^{}\n", hex, refname);
} }
return 0; return 0;
} }
@ -94,6 +98,29 @@ int cmd_show_ref(int argc, const char **argv, const char *prefix)
hash_only = 1; hash_only = 1;
continue; continue;
} }
if (!strncmp(arg, "--hash=", 7) ||
(!strncmp(arg, "--abbrev", 8) &&
(arg[8] == '=' || arg[8] == '\0'))) {
if (arg[3] != 'h' && !arg[8])
/* --abbrev only */
abbrev = DEFAULT_ABBREV;
else {
/* --hash= or --abbrev= */
char *end;
if (arg[3] == 'h') {
hash_only = 1;
arg += 7;
}
else
arg += 9;
abbrev = strtoul(arg, &end, 10);
if (*end || abbrev > 40)
usage(show_ref_usage);
if (abbrev < MINIMUM_ABBREV)
abbrev = MINIMUM_ABBREV;
}
continue;
}
if (!strcmp(arg, "--verify")) { if (!strcmp(arg, "--verify")) {
verify = 1; verify = 1;
continue; continue;

Loading…
Cancel
Save