提交 4d23660e 编写于 作者: T Thomas Rast 提交者: Junio C Hamano

describe: when failing, tell the user about options that work

Users seem to call git-describe without reading the manpage, and then
wonder why it doesn't work with unannotated tags by default.

Make a minimal effort towards seeing if there would have been
unannotated tags, and tell the user.  Specifically, we say that --tags
could work if we found any unannotated tags.  If not, we say that
--always would have given results.
Signed-off-by: NThomas Rast <trast@student.ethz.ch>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 cd0f8e6d
...@@ -96,8 +96,6 @@ static int get_name(const char *path, const unsigned char *sha1, int flag, void ...@@ -96,8 +96,6 @@ static int get_name(const char *path, const unsigned char *sha1, int flag, void
if (!all) { if (!all) {
if (!prio) if (!prio)
return 0; return 0;
if (!tags && prio < 2)
return 0;
} }
add_to_known_names(all ? path + 5 : path + 10, commit, prio, sha1); add_to_known_names(all ? path + 5 : path + 10, commit, prio, sha1);
return 0; return 0;
...@@ -184,6 +182,7 @@ static void describe(const char *arg, int last_one) ...@@ -184,6 +182,7 @@ static void describe(const char *arg, int last_one)
struct possible_tag all_matches[MAX_TAGS]; struct possible_tag all_matches[MAX_TAGS];
unsigned int match_cnt = 0, annotated_cnt = 0, cur_match; unsigned int match_cnt = 0, annotated_cnt = 0, cur_match;
unsigned long seen_commits = 0; unsigned long seen_commits = 0;
unsigned int unannotated_cnt = 0;
if (get_sha1(arg, sha1)) if (get_sha1(arg, sha1))
die("Not a valid object name %s", arg); die("Not a valid object name %s", arg);
...@@ -217,7 +216,9 @@ static void describe(const char *arg, int last_one) ...@@ -217,7 +216,9 @@ static void describe(const char *arg, int last_one)
seen_commits++; seen_commits++;
n = c->util; n = c->util;
if (n) { if (n) {
if (match_cnt < max_candidates) { if (!tags && !all && n->prio < 2) {
unannotated_cnt++;
} else if (match_cnt < max_candidates) {
struct possible_tag *t = &all_matches[match_cnt++]; struct possible_tag *t = &all_matches[match_cnt++];
t->name = n; t->name = n;
t->depth = seen_commits - 1; t->depth = seen_commits - 1;
...@@ -259,7 +260,14 @@ static void describe(const char *arg, int last_one) ...@@ -259,7 +260,14 @@ static void describe(const char *arg, int last_one)
printf("%s\n", find_unique_abbrev(sha1, abbrev)); printf("%s\n", find_unique_abbrev(sha1, abbrev));
return; return;
} }
die("cannot describe '%s'", sha1_to_hex(sha1)); if (unannotated_cnt)
die("No annotated tags can describe '%s'.\n"
"However, there were unannotated tags: try --tags.",
sha1_to_hex(sha1));
else
die("No tags can describe '%s'.\n"
"Try --always, or create some tags.",
sha1_to_hex(sha1));
} }
qsort(all_matches, match_cnt, sizeof(all_matches[0]), compare_pt); qsort(all_matches, match_cnt, sizeof(all_matches[0]), compare_pt);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册