]>
Commit | Line | Data |
---|---|---|
2ae68fcb CR |
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" | |
b2141fc1 | 9 | #include "config.h" |
2ae68fcb CR |
10 | #include "builtin.h" |
11 | #include "tag.h" | |
12 | #include "run-command.h" | |
13 | #include <signal.h> | |
4855b2a2 | 14 | #include "parse-options.h" |
2f47eae2 | 15 | #include "gpg-interface.h" |
ff3c8c8f | 16 | #include "ref-filter.h" |
2ae68fcb | 17 | |
4855b2a2 | 18 | static const char * const verify_tag_usage[] = { |
ff3c8c8f | 19 | N_("git verify-tag [-v | --verbose] [--format=<format>] <tag>..."), |
4855b2a2 SB |
20 | NULL |
21 | }; | |
2ae68fcb | 22 | |
a2c25061 AZ |
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 | ||
2ae68fcb CR |
31 | int cmd_verify_tag(int argc, const char **argv, const char *prefix) |
32 | { | |
33 | int i = 1, verbose = 0, had_error = 0; | |
e18443ec | 34 | unsigned flags = 0; |
4a68e36d | 35 | struct ref_format format = REF_FORMAT_INIT; |
4855b2a2 | 36 | const struct option verify_tag_options[] = { |
f6008eb2 | 37 | OPT__VERBOSE(&verbose, N_("print tag contents")), |
e18443ec | 38 | OPT_BIT(0, "raw", &flags, N_("print raw gpg status output"), GPG_VERIFY_RAW), |
4a68e36d | 39 | OPT_STRING(0, "format", &format.format, N_("format"), N_("format to use for the output")), |
4855b2a2 SB |
40 | OPT_END() |
41 | }; | |
2ae68fcb | 42 | |
a2c25061 | 43 | git_config(git_verify_tag_config, NULL); |
2ae68fcb | 44 | |
4855b2a2 SB |
45 | argc = parse_options(argc, argv, prefix, verify_tag_options, |
46 | verify_tag_usage, PARSE_OPT_KEEP_ARGV0); | |
d2761895 | 47 | if (argc <= i) |
4855b2a2 | 48 | usage_with_options(verify_tag_usage, verify_tag_options); |
d2761895 | 49 | |
e18443ec | 50 | if (verbose) |
51 | flags |= GPG_VERIFY_VERBOSE; | |
52 | ||
4a68e36d JK |
53 | if (format.format) { |
54 | if (verify_ref_format(&format)) | |
2eda0102 JK |
55 | usage_with_options(verify_tag_usage, |
56 | verify_tag_options); | |
ff3c8c8f ST |
57 | flags |= GPG_VERIFY_OMIT_STATUS; |
58 | } | |
59 | ||
78ccd441 ST |
60 | while (i < argc) { |
61 | unsigned char sha1[20]; | |
62 | const char *name = argv[i++]; | |
ff3c8c8f | 63 | if (get_sha1(name, sha1)) { |
78ccd441 | 64 | had_error = !!error("tag '%s' not found.", name); |
ff3c8c8f ST |
65 | continue; |
66 | } | |
67 | ||
68 | if (gpg_verify_tag(sha1, name, flags)) { | |
2ae68fcb | 69 | had_error = 1; |
ff3c8c8f ST |
70 | continue; |
71 | } | |
72 | ||
4a68e36d JK |
73 | if (format.format) |
74 | pretty_print_ref(name, sha1, &format); | |
78ccd441 | 75 | } |
2ae68fcb CR |
76 | return had_error; |
77 | } |