git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: santiago@nyu.edu
To: git@vger.kernel.org
Cc: gitster@pobox.com, peff@peff.net, sunshine@sunshineco.com,
	walters@verbum.org, Lukas P <luk.puehringer@gmail.com>
Subject: [PATCH v2 5/5] builtin/tag: add --format argument for tag -v
Date: Mon, 26 Sep 2016 18:42:33 -0400	[thread overview]
Message-ID: <20160926224233.32702-6-santiago@nyu.edu> (raw)
In-Reply-To: <20160926224233.32702-1-santiago@nyu.edu>

From: Lukas P <luk.puehringer@gmail.com>

Adding --format to git tag -v mutes the default output of the GPG
verification and instead prints the formatted tag object.
This allows callers to cross-check the tagname from refs/tags with
the tagname from the tag object header upon GPG verification.

Caveat: The change adds a format specifier argument to the
(*each_tag_name_fn) function pointer, i.e. delete_tag now receives this
too, although it does not need it.

Signed-off-by: Lukas P <luk.puehringer@gmail.com>
---
 builtin/tag.c | 30 ++++++++++++++++++++----------
 1 file changed, 20 insertions(+), 10 deletions(-)

diff --git a/builtin/tag.c b/builtin/tag.c
index 14f3b48..f53227e 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -24,7 +24,7 @@ static const char * const git_tag_usage[] = {
 	N_("git tag -d <tagname>..."),
 	N_("git tag -l [-n[<num>]] [--contains <commit>] [--points-at <object>]"
 		"\n\t\t[--format=<format>] [--[no-]merged [<commit>]] [<pattern>...]"),
-	N_("git tag -v <tagname>..."),
+	N_("git tag -v [--format=<format>] <tagname>..."),
 	NULL
 };
 
@@ -66,9 +66,10 @@ static int list_tags(struct ref_filter *filter, struct ref_sorting *sorting, con
 }
 
 typedef int (*each_tag_name_fn)(const char *name, const char *ref,
-				const unsigned char *sha1);
+				const unsigned char *sha1, const char *fmt_pretty);
 
-static int for_each_tag_name(const char **argv, each_tag_name_fn fn)
+static int for_each_tag_name(const char **argv, each_tag_name_fn fn,
+		const char *fmt_pretty)
 {
 	const char **p;
 	char ref[PATH_MAX];
@@ -87,14 +88,14 @@ static int for_each_tag_name(const char **argv, each_tag_name_fn fn)
 			had_error = 1;
 			continue;
 		}
-		if (fn(*p, ref, sha1))
+		if (fn(*p, ref, sha1, fmt_pretty))
 			had_error = 1;
 	}
 	return had_error;
 }
 
 static int delete_tag(const char *name, const char *ref,
-				const unsigned char *sha1)
+				const unsigned char *sha1, const char *fmt_pretty)
 {
 	if (delete_ref(ref, sha1, 0))
 		return 1;
@@ -103,9 +104,15 @@ static int delete_tag(const char *name, const char *ref,
 }
 
 static int verify_tag(const char *name, const char *ref,
-				const unsigned char *sha1)
+				const unsigned char *sha1, const char *fmt_pretty)
 {
-	return verify_and_format_tag(sha1, name, NULL, GPG_VERIFY_VERBOSE);
+	int flags;
+	flags = GPG_VERIFY_VERBOSE;
+
+	if (fmt_pretty)
+		flags = GPG_VERIFY_QUIET;
+
+	return verify_and_format_tag(sha1, name, fmt_pretty, flags);
 }
 
 static int do_sign(struct strbuf *buffer)
@@ -424,9 +431,12 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 	if (filter.merge_commit)
 		die(_("--merged and --no-merged option are only allowed with -l"));
 	if (cmdmode == 'd')
-		return for_each_tag_name(argv, delete_tag);
-	if (cmdmode == 'v')
-		return for_each_tag_name(argv, verify_tag);
+		return for_each_tag_name(argv, delete_tag, NULL);
+	if (cmdmode == 'v') {
+		if (format)
+			verify_ref_format(format);
+		return for_each_tag_name(argv, verify_tag, format);
+	}
 
 	if (msg.given || msgfile) {
 		if (msg.given && msgfile)
-- 
2.10.0


  parent reply	other threads:[~2016-09-26 22:43 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-26 22:42 [PATCH v2 0/5] Add --format to tag verification santiago
2016-09-26 22:42 ` [PATCH v2 1/5] gpg-interface, tag: add GPG_VERIFY_QUIET flag santiago
2016-09-27 17:36   ` Junio C Hamano
2016-09-27 18:17     ` Lukas Pühringer
2016-09-27 18:22       ` Junio C Hamano
2016-09-27 18:25         ` Lukas Pühringer
2016-09-27 18:31           ` Stefan Beller
2016-09-27 18:37             ` Lukas Pühringer
2016-09-26 22:42 ` [PATCH v2 2/5] ref-filter: add function to print single ref_array_item santiago
2016-09-27 17:35   ` Junio C Hamano
2016-09-26 22:42 ` [PATCH v2 3/5] tag: add format specifier to gpg_verify_tag santiago
2016-09-26 22:42 ` [PATCH v2 4/5] builtin/verify-tag: add --format to verify-tag santiago
2016-09-27  7:44   ` Philip Oakley
2016-09-27 14:38     ` Santiago Torres
2016-09-27 17:41   ` Junio C Hamano
2016-09-26 22:42 ` santiago [this message]
2016-09-27 17:50   ` [PATCH v2 5/5] builtin/tag: add --format argument for tag -v Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160926224233.32702-6-santiago@nyu.edu \
    --to=santiago@nyu.edu \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=luk.puehringer@gmail.com \
    --cc=peff@peff.net \
    --cc=sunshine@sunshineco.com \
    --cc=walters@verbum.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).