git-rev-parse --symbolic-full-name
The plumbing level can understand that the user meant "refs/heads/master" when the user says "master" or "heads/master", but there is no easy way for the scripts to figure it out without duplicating the dwim_ref() logic. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
@ -70,6 +70,13 @@ OPTIONS
|
|||||||
possible '{caret}' prefix); this option makes them output in a
|
possible '{caret}' prefix); this option makes them output in a
|
||||||
form as close to the original input as possible.
|
form as close to the original input as possible.
|
||||||
|
|
||||||
|
--symbolic-full-name::
|
||||||
|
This is similar to \--symbolic, but it omits input that
|
||||||
|
are not refs (i.e. branch or tag names; or more
|
||||||
|
explicitly disambiguating "heads/master" form, when you
|
||||||
|
want to name the "master" branch when there is an
|
||||||
|
unfortunately named tag "master"), and show them as full
|
||||||
|
refnames (e.g. "refs/heads/master").
|
||||||
|
|
||||||
--all::
|
--all::
|
||||||
Show all refs found in `$GIT_DIR/refs`.
|
Show all refs found in `$GIT_DIR/refs`.
|
||||||
|
@ -21,6 +21,9 @@ static const char *def;
|
|||||||
#define NORMAL 0
|
#define NORMAL 0
|
||||||
#define REVERSED 1
|
#define REVERSED 1
|
||||||
static int show_type = NORMAL;
|
static int show_type = NORMAL;
|
||||||
|
|
||||||
|
#define SHOW_SYMBOLIC_ASIS 1
|
||||||
|
#define SHOW_SYMBOLIC_FULL 2
|
||||||
static int symbolic;
|
static int symbolic;
|
||||||
static int abbrev;
|
static int abbrev;
|
||||||
static int output_sq;
|
static int output_sq;
|
||||||
@ -103,8 +106,32 @@ static void show_rev(int type, const unsigned char *sha1, const char *name)
|
|||||||
|
|
||||||
if (type != show_type)
|
if (type != show_type)
|
||||||
putchar('^');
|
putchar('^');
|
||||||
if (symbolic && name)
|
if (symbolic && name) {
|
||||||
|
if (symbolic == SHOW_SYMBOLIC_FULL) {
|
||||||
|
unsigned char discard[20];
|
||||||
|
char *full;
|
||||||
|
|
||||||
|
switch (dwim_ref(name, strlen(name), discard, &full)) {
|
||||||
|
case 0:
|
||||||
|
/*
|
||||||
|
* Not found -- not a ref. We could
|
||||||
|
* emit "name" here, but symbolic-full
|
||||||
|
* users are interested in finding the
|
||||||
|
* refs spelled in full, and they would
|
||||||
|
* need to filter non-refs if we did so.
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
case 1: /* happy */
|
||||||
|
show(full);
|
||||||
|
break;
|
||||||
|
default: /* ambiguous */
|
||||||
|
error("refname '%s' is ambiguous", name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
show(name);
|
show(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (abbrev)
|
else if (abbrev)
|
||||||
show(find_unique_abbrev(sha1, abbrev));
|
show(find_unique_abbrev(sha1, abbrev));
|
||||||
else
|
else
|
||||||
@ -421,7 +448,11 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!strcmp(arg, "--symbolic")) {
|
if (!strcmp(arg, "--symbolic")) {
|
||||||
symbolic = 1;
|
symbolic = SHOW_SYMBOLIC_ASIS;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!strcmp(arg, "--symbolic-full-name")) {
|
||||||
|
symbolic = SHOW_SYMBOLIC_FULL;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!strcmp(arg, "--all")) {
|
if (!strcmp(arg, "--all")) {
|
||||||
|
Reference in New Issue
Block a user