зеркало из https://github.com/microsoft/git.git
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:
Родитель
3023dc690f
Коммит
a6d97d49e2
|
@ -70,6 +70,13 @@ OPTIONS
|
|||
possible '{caret}' prefix); this option makes them output in a
|
||||
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::
|
||||
Show all refs found in `$GIT_DIR/refs`.
|
||||
|
|
|
@ -21,6 +21,9 @@ static const char *def;
|
|||
#define NORMAL 0
|
||||
#define REVERSED 1
|
||||
static int show_type = NORMAL;
|
||||
|
||||
#define SHOW_SYMBOLIC_ASIS 1
|
||||
#define SHOW_SYMBOLIC_FULL 2
|
||||
static int symbolic;
|
||||
static int abbrev;
|
||||
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)
|
||||
putchar('^');
|
||||
if (symbolic && name)
|
||||
show(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);
|
||||
}
|
||||
}
|
||||
else if (abbrev)
|
||||
show(find_unique_abbrev(sha1, abbrev));
|
||||
else
|
||||
|
@ -421,7 +448,11 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
|
|||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "--symbolic")) {
|
||||
symbolic = 1;
|
||||
symbolic = SHOW_SYMBOLIC_ASIS;
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "--symbolic-full-name")) {
|
||||
symbolic = SHOW_SYMBOLIC_FULL;
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "--all")) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче