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

[PATCH 2/2] tag: send fully qualified refnames to verify_tag_and_format

From
Jeff King <peff@peff.net>
Date
Oct 19, 2016, 20:39 UTC
Message-ID
<20161019203943.epjxnfci7vcqg4xv@sigill.intra.peff.net>
In-Reply-To
<20161019203520.zevkb75at2nrogdm@sigill.intra.peff.net>

The ref-filter code generally expects to see fully qualified refs, so that things like "%(refname)" and "%(refname:short)" work as expected. We can do so easily from git-tag, which always works with refnames in the refs/tags namespace. As a bonus, we can drop the "kind" parameter from pretty_print_ref() and just deduce it automatically.

Unfortunately, things are not so simple for verify-tag, which takes an arbitrary sha1 expression. It has no clue if a refname as used or not, and whether it was in the refs/tags namespace.

In an ideal world, get_sha1_with_context() would optionally tell us about any refs we resolved while it was working, and we could just feed that refname (and then in cases where we didn't use a ref at all, like a bare sha1, we could fallback to just showing the sha1 name the user gave us).

Signed-off-by: Jeff King <peff@peff.net>
---
I think you'd really just squash the various bits of this into your
series at the right spots, though I don't mind it on top, either.

The big question is to what degree we should care about the verify-tag case. I don't think it's any worse off with this change than it is with your series (its "kind" becomes "OTHER", but I don't think that is actually used for display at all; the name remains the same). I'd be OK with leaving it like this, as a known bug, until get_sha1_with_context() learns to tell us about the ref. It's an unhandled corner case in a brand-new feature, not a regression in an existing one.

 builtin/tag.c | 2 +-
 ref-filter.c  | 4 ++--
 ref-filter.h  | 6 +++++-
 tag.c         | 2 +-
 4 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/builtin/tag.c b/builtin/tag.c
index 49aeb50..18eab7e 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -114,7 +114,7 @@ static int verify_tag(const char *name, const char *ref,
 	if (fmt_pretty)
 		flags = GPG_VERIFY_QUIET;
 
-	return verify_and_format_tag(sha1, name, fmt_pretty, flags);
+	return verify_and_format_tag(sha1, ref, fmt_pretty, flags);
 }
 
 static int do_sign(struct strbuf *buffer)
diff --git a/ref-filter.c b/ref-filter.c
index 77ec9de..74da17a 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -1643,11 +1643,11 @@ void show_ref_array_item(struct ref_array_item *info, const char *format, int qu
 }
 
 void pretty_print_ref(const char *name, const unsigned char *sha1,
-		const char *format, unsigned kind)
+		      const char *format)
 {
 	struct ref_array_item *ref_item;
 	ref_item = new_ref_array_item(name, sha1, 0);
-	ref_item->kind = kind;
+	ref_item->kind = ref_kind_from_refname(name);
 	show_ref_array_item(ref_item, format, 0);
 	free_array_item(ref_item);
 }
diff --git a/ref-filter.h b/ref-filter.h
index 3d23090..fed2f5e 100644
--- a/ref-filter.h
+++ b/ref-filter.h
@@ -107,7 +107,11 @@ struct ref_sorting *ref_default_sorting(void);
 /*  Function to parse --merged and --no-merged options */
 int parse_opt_merge_filter(const struct option *opt, const char *arg, int unset);
 
+/*
+ * Print a single ref, outside of any ref-filter. Note that the
+ * name must be a fully qualified refname.
+ */
 void pretty_print_ref(const char *name, const unsigned char *sha1,
-		const char *format, unsigned kind);
+		      const char *format);
 
 #endif /*  REF_FILTER_H  */
diff --git a/tag.c b/tag.c
index d3512c0..d5a7cfb 100644
--- a/tag.c
+++ b/tag.c
@@ -62,7 +62,7 @@ int verify_and_format_tag(const unsigned char *sha1, const char *name,
 	free(buf);
 
 	if (fmt_pretty)
-		pretty_print_ref(name, sha1, fmt_pretty, FILTER_REFS_TAGS);
+		pretty_print_ref(name, sha1, fmt_pretty);
 
 	return ret;
 }
-- 
2.10.1.619.g16351a7
Previous: Jeff KingNext: Santiago Torres
Message 5 of 7 in “Re: [PATCH v4 2/7] ref-filter: add function to print single ref_array_item”
  1. Jeff KingOct 19, 2016
  2. 1/2 ref-filter: split ref_kind_from_filterJeff King, Oct 19, 2016
  3. Junio C HamanoOct 19, 2016
  4. Jeff KingOct 19, 2016
  5. 2/2 tag: send fully qualified refnames to verify_tag_and_formatJeff King, Oct 19, 2016
  6. Santiago TorresOct 20, 2016
  7. Jeff KingOct 20, 2016

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.