git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Thomas Rast <trast@student.ethz.ch>
Date
Oct 22, 2009, 15:44 UTC
Message-ID
<f1e86b9095d63c6541d0a8df6a1cf8eadfe247bb.1256226187.git.trast@student.ethz.ch>
In-Reply-To
<76c5b8580910220810n389d065di349339ab38909ef7@mail.gmail.com>

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: Thomas Rast <trast@student.ethz.ch>
---
Eugene Sajine wrote:
Show 5 quoted lines
> [git-describe fails if you don't have annotated tags]
>  
> Thanks! It is working ok.
> Although it is probably not the best error handling.
> I believe git should fail with some meaningful message in this case...
We already had most of the information available, so hey, why not.
 builtin-describe.c |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/builtin-describe.c b/builtin-describe.c
index 2dcfd3d..1ffa0d8 100644
--- a/builtin-describe.c
+++ b/builtin-describe.c
@@ -96,8 +96,6 @@ static int get_name(const char *path, const unsigned char *sha1, int flag, void 
 	if (!all) {
 		if (!prio)
 			return 0;
-		if (!tags && prio < 2)
-			return 0;
 	}
 	add_to_known_names(all ? path + 5 : path + 10, commit, prio, sha1);
 	return 0;
@@ -184,6 +182,7 @@ static void describe(const char *arg, int last_one)
 	struct possible_tag all_matches[MAX_TAGS];
 	unsigned int match_cnt = 0, annotated_cnt = 0, cur_match;
 	unsigned long seen_commits = 0;
+	unsigned int unannotated_cnt = 0;
 
 	if (get_sha1(arg, sha1))
 		die("Not a valid object name %s", arg);
@@ -217,7 +216,9 @@ static void describe(const char *arg, int last_one)
 		seen_commits++;
 		n = c->util;
 		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++];
 				t->name = n;
 				t->depth = seen_commits - 1;
@@ -259,7 +260,14 @@ static void describe(const char *arg, int last_one)
 			printf("%s\n", find_unique_abbrev(sha1, abbrev));
 			return;
 		}
-		die("cannot describe '%s'", sha1_to_hex(sha1));
+		if (unannotated_cnt)
+			die("cannot describe '%s'"
+			    " with only\nannotated tags. Try --tags.",
+			    sha1_to_hex(sha1));
+		else
+			die("cannot describe '%s'"
+			    " with tags\nTry --always, or create some tags.",
+			    sha1_to_hex(sha1));
 	}
 
 	qsort(all_matches, match_cnt, sizeof(all_matches[0]), compare_pt);
-- 
1.6.5.1.70.g1383ae
Previous: Eugene SajineNext: Alex Riesen
Message 5 of 13 in “git describe is failing”
  1. Eugene SajineOct 22, 2009
  2. Mikael MagnussonOct 22, 2009
  3. Thomas RastOct 22, 2009
  4. Eugene SajineOct 22, 2009
  5. describe: when failing, tell the user about options that workThomas Rast, Oct 22, 2009
  6. Alex RiesenOct 22, 2009
  7. Junio C HamanoOct 22, 2009
  8. Nicolas PitreOct 23, 2009
  9. Junio C HamanoOct 23, 2009
  10. Junio C HamanoOct 23, 2009
  11. Thomas RastOct 23, 2009
  12. Junio C HamanoOct 23, 2009
  13. describe: when failing, tell the user about options that workThomas Rast, Oct 28, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.