Browse Source

rev-parse: --abbrev-ref option to shorten ref name

This applies the shorten_unambiguous_ref function to the object name.
Default mode is controlled by core.warnAmbiguousRefs. Else it is given as
optional argument to --abbrev-ref={strict|loose}.

This should be faster than 'git for-each-ref --format="%(refname:short)" <ref>'
for single refs.

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Bert Wesarg 16 years ago committed by Junio C Hamano
parent
commit
a45d34691e
  1. 5
      Documentation/git-rev-parse.txt
  2. 23
      builtin-rev-parse.c

5
Documentation/git-rev-parse.txt

@ -84,6 +84,11 @@ OPTIONS @@ -84,6 +84,11 @@ OPTIONS
unfortunately named tag "master"), and show them as full
refnames (e.g. "refs/heads/master").

--abbrev-ref[={strict|loose}]::
A non-ambiguous short name of the objects name.
The option core.warnAmbiguousRefs is used to select the strict
abbreviation mode.

--all::
Show all refs found in `$GIT_DIR/refs`.


23
builtin-rev-parse.c

@ -26,6 +26,8 @@ static int show_type = NORMAL; @@ -26,6 +26,8 @@ static int show_type = NORMAL;
#define SHOW_SYMBOLIC_FULL 2
static int symbolic;
static int abbrev;
static int abbrev_ref;
static int abbrev_ref_strict;
static int output_sq;

/*
@ -109,8 +111,8 @@ static void show_rev(int type, const unsigned char *sha1, const char *name) @@ -109,8 +111,8 @@ static void show_rev(int type, const unsigned char *sha1, const char *name)
return;
def = NULL;

if (symbolic && name) {
if (symbolic == SHOW_SYMBOLIC_FULL) {
if ((symbolic || abbrev_ref) && name) {
if (symbolic == SHOW_SYMBOLIC_FULL || abbrev_ref) {
unsigned char discard[20];
char *full;

@ -125,6 +127,9 @@ static void show_rev(int type, const unsigned char *sha1, const char *name) @@ -125,6 +127,9 @@ static void show_rev(int type, const unsigned char *sha1, const char *name)
*/
break;
case 1: /* happy */
if (abbrev_ref)
full = shorten_unambiguous_ref(full,
abbrev_ref_strict);
show_with_type(type, full);
break;
default: /* ambiguous */
@ -506,6 +511,20 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) @@ -506,6 +511,20 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
symbolic = SHOW_SYMBOLIC_FULL;
continue;
}
if (!prefixcmp(arg, "--abbrev-ref") &&
(!arg[12] || arg[12] == '=')) {
abbrev_ref = 1;
abbrev_ref_strict = warn_ambiguous_refs;
if (arg[12] == '=') {
if (!strcmp(arg + 13, "strict"))
abbrev_ref_strict = 1;
else if (!strcmp(arg + 13, "loose"))
abbrev_ref_strict = 0;
else
die("unknown mode for %s", arg);
}
continue;
}
if (!strcmp(arg, "--all")) {
for_each_ref(show_reference, NULL);
continue;

Loading…
Cancel
Save