From: santiago@nyu.edu To: git@vger.kernel.org Cc: gitster@pobox.com, peff@peff.net, sunshine@sunshineco.com, walters@verbum.org, Lukas Puehringer <luk.puehringer@gmail.com> Subject: [PATCH v6 4/6] builtin/tag: add --format argument for tag -v Date: Tue, 17 Jan 2017 18:37:21 -0500 [thread overview] Message-ID: <20170117233723.23897-5-santiago@nyu.edu> (raw) In-Reply-To: <20170117233723.23897-1-santiago@nyu.edu> From: Lukas Puehringer <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. The callback function for for_each_tag_name() didn't allow callers to pass custom data to their callback functions. Add a new opaque pointer to each_tag_name_fn's parameter to allow this. Signed-off-by: Lukas Puehringer <luk.puehringer@gmail.com> --- Documentation/git-tag.txt | 2 +- builtin/tag.c | 38 ++++++++++++++++++++++++++++---------- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt index 76cfe40d9..586aaa315 100644 --- a/Documentation/git-tag.txt +++ b/Documentation/git-tag.txt @@ -15,7 +15,7 @@ SYNOPSIS 'git tag' [-n[<num>]] -l [--contains <commit>] [--points-at <object>] [--column[=<options>] | --no-column] [--create-reflog] [--sort=<key>] [--format=<format>] [--[no-]merged [<commit>]] [<pattern>...] -'git tag' -v <tagname>... +'git tag' -v [--format=<format>] <tagname>... DESCRIPTION ----------- diff --git a/builtin/tag.c b/builtin/tag.c index 73df72811..b9da72761 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,15 +66,17 @@ 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, void *cb_data); -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, + void *cb_data) { const char **p; char ref[PATH_MAX]; int had_error = 0; unsigned char sha1[20]; + for (p = argv; *p; p++) { if (snprintf(ref, sizeof(ref), "refs/tags/%s", *p) >= sizeof(ref)) { @@ -87,14 +89,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, cb_data)) had_error = 1; } return had_error; } static int delete_tag(const char *name, const char *ref, - const unsigned char *sha1) + const unsigned char *sha1, void *cb_data) { if (delete_ref(ref, sha1, 0)) return 1; @@ -103,9 +105,22 @@ 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, void *cb_data) { - return gpg_verify_tag(sha1, name, GPG_VERIFY_VERBOSE); + int flags; + char *fmt_pretty = cb_data; + flags = GPG_VERIFY_VERBOSE; + + if (fmt_pretty) + flags = GPG_VERIFY_OMIT_STATUS; + + if (gpg_verify_tag(sha1, name, flags)) + return -1; + + if (fmt_pretty) + pretty_print_ref(name, sha1, fmt_pretty); + + return 0; } static int do_sign(struct strbuf *buffer) @@ -428,9 +443,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.11.0
next prev parent reply other threads:[~2017-01-17 23:39 UTC|newest] Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-01-17 23:37 [PATCH v6 0/6] Add --format to tag verification santiago 2017-01-17 23:37 ` [PATCH v6 1/6] gpg-interface,tag: add GPG_VERIFY_OMIT_STATUS flag santiago 2017-01-17 23:37 ` [PATCH v6 2/6] ref-filter: add function to print single ref_array_item santiago 2017-01-17 23:37 ` [PATCH v6 3/6] builtin/verify-tag: add --format to verify-tag santiago 2017-01-17 23:37 ` santiago [this message] 2017-01-18 0:02 ` [PATCH v6 4/6] builtin/tag: add --format argument for tag -v Junio C Hamano 2017-01-18 0:05 ` Junio C Hamano 2017-01-18 0:19 ` Junio C Hamano 2017-01-18 18:25 ` Junio C Hamano 2017-01-18 18:28 ` Santiago Torres 2017-01-18 18:44 ` Junio C Hamano 2017-01-18 18:50 ` Santiago Torres 2017-01-18 20:16 ` Eric Wong 2017-01-19 0:37 ` Eric Wong 2017-01-18 18:52 ` Junio C Hamano 2017-01-18 18:28 ` Jeff King 2017-01-18 18:49 ` Junio C Hamano 2017-01-17 23:37 ` [PATCH v6 5/6] t/t7030-verify-tag: Add --format specifier tests santiago 2017-01-17 23:37 ` [PATCH v6 6/6] t/t7004-tag: " santiago 2017-01-18 0:07 ` [PATCH v6 0/6] Add --format to tag verification 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=20170117233723.23897-5-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 \ --subject='Re: [PATCH v6 4/6] builtin/tag: add --format argument for tag -v' \ /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
Code repositories for project(s) associated with this 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).