git-describe: --long shows the object name even for a tagged commit

This is useful when you want to see parts of the commit object name
in "describe" output, even when the commit in question happens to be
a tagged version.  Instead of just emitting the tag name, it will
describe such a commit as v1.2-0-deadbeef (0th commit since tag v1.2
that points at object deadbeef....).

Signed-off-by: Santi Béjar <sbejar@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Santi Béjar 2008-02-25 10:43:33 +01:00 коммит произвёл Junio C Hamano
Родитель 99d8ea2c5c
Коммит 518120e348
3 изменённых файлов: 21 добавлений и 1 удалений

Просмотреть файл

@ -51,6 +51,15 @@ OPTIONS
being employed to standard error. The tag name will still being employed to standard error. The tag name will still
be printed to standard out. be printed to standard out.
--long::
Always output the long format (the tag, the number of commits
and the abbreviated commit name) even when it matches a tag.
This is useful when you want to see parts of the commit object name
in "describe" output, even when the commit in question happens to be
a tagged version. Instead of just emitting the tag name, it will
describe such a commit as v1.2-0-deadbeef (0th commit since tag v1.2
that points at object deadbeef....).
--match <pattern>:: --match <pattern>::
Only consider tags matching the given pattern (can be used to avoid Only consider tags matching the given pattern (can be used to avoid
leaking private tags made from the repository). leaking private tags made from the repository).

Просмотреть файл

@ -17,6 +17,7 @@ static const char * const describe_usage[] = {
static int debug; /* Display lots of verbose info */ static int debug; /* Display lots of verbose info */
static int all; /* Default to annotated tags only */ static int all; /* Default to annotated tags only */
static int tags; /* But allow any tags if --tags is specified */ static int tags; /* But allow any tags if --tags is specified */
static int longformat;
static int abbrev = DEFAULT_ABBREV; static int abbrev = DEFAULT_ABBREV;
static int max_candidates = 10; static int max_candidates = 10;
const char *pattern = NULL; const char *pattern = NULL;
@ -155,7 +156,11 @@ static void describe(const char *arg, int last_one)
n = cmit->util; n = cmit->util;
if (n) { if (n) {
printf("%s\n", n->path); if (!longformat)
printf("%s\n", n->path);
else
printf("%s-0-g%s\n", n->path,
find_unique_abbrev(cmit->object.sha1, abbrev));
return; return;
} }
@ -254,6 +259,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
OPT_BOOLEAN(0, "debug", &debug, "debug search strategy on stderr"), OPT_BOOLEAN(0, "debug", &debug, "debug search strategy on stderr"),
OPT_BOOLEAN(0, "all", &all, "use any ref in .git/refs"), OPT_BOOLEAN(0, "all", &all, "use any ref in .git/refs"),
OPT_BOOLEAN(0, "tags", &tags, "use any tag in .git/refs/tags"), OPT_BOOLEAN(0, "tags", &tags, "use any tag in .git/refs/tags"),
OPT_BOOLEAN(0, "long", &longformat, "always use long format"),
OPT__ABBREV(&abbrev), OPT__ABBREV(&abbrev),
OPT_INTEGER(0, "candidates", &max_candidates, OPT_INTEGER(0, "candidates", &max_candidates,
"consider <n> most recent tags (default: 10)"), "consider <n> most recent tags (default: 10)"),
@ -270,6 +276,9 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
save_commit_buffer = 0; save_commit_buffer = 0;
if (longformat && abbrev == 0)
die("--long is incompatible with --abbrev=0");
if (contains) { if (contains) {
const char **args = xmalloc((6 + argc) * sizeof(char*)); const char **args = xmalloc((6 + argc) * sizeof(char*));
int i = 0; int i = 0;

Просмотреть файл

@ -94,4 +94,6 @@ check_describe D-* --tags HEAD^^
check_describe A-* --tags HEAD^^2 check_describe A-* --tags HEAD^^2
check_describe B --tags HEAD^^2^ check_describe B --tags HEAD^^2^
check_describe B-0-* --long HEAD^^2^
test_done test_done