Carlos Rica | 2ae68fc | 2007-07-27 06:07:34 +0200 | [diff] [blame] | 1 | /* |
| 2 | * Builtin "git verify-tag" |
| 3 | * |
| 4 | * Copyright (c) 2007 Carlos Rica <jasampler@gmail.com> |
| 5 | * |
| 6 | * Based on git-verify-tag.sh |
| 7 | */ |
| 8 | #include "cache.h" |
Brandon Williams | b2141fc | 2017-06-14 11:07:36 -0700 | [diff] [blame] | 9 | #include "config.h" |
Carlos Rica | 2ae68fc | 2007-07-27 06:07:34 +0200 | [diff] [blame] | 10 | #include "builtin.h" |
| 11 | #include "tag.h" |
| 12 | #include "run-command.h" |
| 13 | #include <signal.h> |
Stephen Boyd | 4855b2a | 2009-07-07 22:15:39 -0700 | [diff] [blame] | 14 | #include "parse-options.h" |
Junio C Hamano | 2f47eae | 2011-09-07 21:19:47 -0700 | [diff] [blame] | 15 | #include "gpg-interface.h" |
Santiago Torres | ff3c8c8 | 2017-01-17 18:37:20 -0500 | [diff] [blame] | 16 | #include "ref-filter.h" |
Carlos Rica | 2ae68fc | 2007-07-27 06:07:34 +0200 | [diff] [blame] | 17 | |
Stephen Boyd | 4855b2a | 2009-07-07 22:15:39 -0700 | [diff] [blame] | 18 | static const char * const verify_tag_usage[] = { |
Santiago Torres | ff3c8c8 | 2017-01-17 18:37:20 -0500 | [diff] [blame] | 19 | N_("git verify-tag [-v | --verbose] [--format=<format>] <tag>..."), |
Stephen Boyd | 4855b2a | 2009-07-07 22:15:39 -0700 | [diff] [blame] | 20 | NULL |
| 21 | }; |
Carlos Rica | 2ae68fc | 2007-07-27 06:07:34 +0200 | [diff] [blame] | 22 | |
Alex Zepeda | a2c2506 | 2012-03-08 12:07:20 -0800 | [diff] [blame] | 23 | static int git_verify_tag_config(const char *var, const char *value, void *cb) |
| 24 | { |
| 25 | int status = git_gpg_config(var, value, cb); |
| 26 | if (status) |
| 27 | return status; |
| 28 | return git_default_config(var, value, cb); |
| 29 | } |
| 30 | |
Carlos Rica | 2ae68fc | 2007-07-27 06:07:34 +0200 | [diff] [blame] | 31 | int cmd_verify_tag(int argc, const char **argv, const char *prefix) |
| 32 | { |
| 33 | int i = 1, verbose = 0, had_error = 0; |
brian m. carlson | e18443e | 2015-06-21 23:14:43 +0000 | [diff] [blame] | 34 | unsigned flags = 0; |
Jeff King | 4a68e36 | 2017-07-13 11:01:18 -0400 | [diff] [blame] | 35 | struct ref_format format = REF_FORMAT_INIT; |
Stephen Boyd | 4855b2a | 2009-07-07 22:15:39 -0700 | [diff] [blame] | 36 | const struct option verify_tag_options[] = { |
Nguyễn Thái Ngọc Duy | f6008eb | 2012-08-20 19:32:52 +0700 | [diff] [blame] | 37 | OPT__VERBOSE(&verbose, N_("print tag contents")), |
brian m. carlson | e18443e | 2015-06-21 23:14:43 +0000 | [diff] [blame] | 38 | OPT_BIT(0, "raw", &flags, N_("print raw gpg status output"), GPG_VERIFY_RAW), |
Jeff King | 4a68e36 | 2017-07-13 11:01:18 -0400 | [diff] [blame] | 39 | OPT_STRING(0, "format", &format.format, N_("format"), N_("format to use for the output")), |
Stephen Boyd | 4855b2a | 2009-07-07 22:15:39 -0700 | [diff] [blame] | 40 | OPT_END() |
| 41 | }; |
Carlos Rica | 2ae68fc | 2007-07-27 06:07:34 +0200 | [diff] [blame] | 42 | |
Alex Zepeda | a2c2506 | 2012-03-08 12:07:20 -0800 | [diff] [blame] | 43 | git_config(git_verify_tag_config, NULL); |
Carlos Rica | 2ae68fc | 2007-07-27 06:07:34 +0200 | [diff] [blame] | 44 | |
Stephen Boyd | 4855b2a | 2009-07-07 22:15:39 -0700 | [diff] [blame] | 45 | argc = parse_options(argc, argv, prefix, verify_tag_options, |
| 46 | verify_tag_usage, PARSE_OPT_KEEP_ARGV0); |
Olivier Marin | d276189 | 2008-07-28 12:48:44 +0200 | [diff] [blame] | 47 | if (argc <= i) |
Stephen Boyd | 4855b2a | 2009-07-07 22:15:39 -0700 | [diff] [blame] | 48 | usage_with_options(verify_tag_usage, verify_tag_options); |
Olivier Marin | d276189 | 2008-07-28 12:48:44 +0200 | [diff] [blame] | 49 | |
brian m. carlson | e18443e | 2015-06-21 23:14:43 +0000 | [diff] [blame] | 50 | if (verbose) |
| 51 | flags |= GPG_VERIFY_VERBOSE; |
| 52 | |
Jeff King | 4a68e36 | 2017-07-13 11:01:18 -0400 | [diff] [blame] | 53 | if (format.format) { |
| 54 | if (verify_ref_format(&format)) |
Jeff King | 2eda010 | 2017-07-13 10:56:10 -0400 | [diff] [blame] | 55 | usage_with_options(verify_tag_usage, |
| 56 | verify_tag_options); |
Santiago Torres | ff3c8c8 | 2017-01-17 18:37:20 -0500 | [diff] [blame] | 57 | flags |= GPG_VERIFY_OMIT_STATUS; |
| 58 | } |
| 59 | |
Santiago Torres | 78ccd44 | 2016-04-19 13:47:19 -0400 | [diff] [blame] | 60 | while (i < argc) { |
Stefan Beller | 8457176 | 2017-07-12 17:44:15 -0700 | [diff] [blame] | 61 | struct object_id oid; |
Santiago Torres | 78ccd44 | 2016-04-19 13:47:19 -0400 | [diff] [blame] | 62 | const char *name = argv[i++]; |
Stefan Beller | 8457176 | 2017-07-12 17:44:15 -0700 | [diff] [blame] | 63 | |
| 64 | if (get_oid(name, &oid)) { |
Santiago Torres | 78ccd44 | 2016-04-19 13:47:19 -0400 | [diff] [blame] | 65 | had_error = !!error("tag '%s' not found.", name); |
Santiago Torres | ff3c8c8 | 2017-01-17 18:37:20 -0500 | [diff] [blame] | 66 | continue; |
| 67 | } |
| 68 | |
Stefan Beller | 8457176 | 2017-07-12 17:44:15 -0700 | [diff] [blame] | 69 | if (gpg_verify_tag(&oid, name, flags)) { |
Carlos Rica | 2ae68fc | 2007-07-27 06:07:34 +0200 | [diff] [blame] | 70 | had_error = 1; |
Santiago Torres | ff3c8c8 | 2017-01-17 18:37:20 -0500 | [diff] [blame] | 71 | continue; |
| 72 | } |
| 73 | |
Jeff King | 4a68e36 | 2017-07-13 11:01:18 -0400 | [diff] [blame] | 74 | if (format.format) |
Jeff King | 53df97a | 2018-04-06 14:58:32 -0400 | [diff] [blame] | 75 | pretty_print_ref(name, &oid, &format); |
Santiago Torres | 78ccd44 | 2016-04-19 13:47:19 -0400 | [diff] [blame] | 76 | } |
Carlos Rica | 2ae68fc | 2007-07-27 06:07:34 +0200 | [diff] [blame] | 77 | return had_error; |
| 78 | } |