verify-tag: move tag verification code to tag.c

The PGP verification routine for tags could be accessed by other modules that require to do so. Publish the verify_tag function in tag.c and rename it to gpg_verify_tag so it does not conflict with builtin/mktag's static function. Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Santiago Torres <santiago@nyu.edu> Reviewed-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Santiago Torres committed Apr 22, 2016 at 10:52 UTC 45a227ef769df9fc0d198f323d2f919aa74375e1
3 files changed +56 -54
builtin/verify-tag.c
+1 -54
@@ -18,59 +18,6 @@ static const char * const verify_tag_usage[] = {
18 NULL
19 };
20
21 -static int run_gpg_verify(const char *buf, unsigned long size, unsigned flags)
22 -{
23 - struct signature_check sigc;
24 - size_t payload_size;
25 - int ret;
26 -
27 - memset(&sigc, 0, sizeof(sigc));
28 -
29 - payload_size = parse_signature(buf, size);
30 -
31 - if (size == payload_size) {
32 - if (flags & GPG_VERIFY_VERBOSE)
33 - write_in_full(1, buf, payload_size);
34 - return error("no signature found");
35 - }
36 -
37 - ret = check_signature(buf, payload_size, buf + payload_size,
38 - size - payload_size, &sigc);
39 - print_signature_buffer(&sigc, flags);
40 -
41 - signature_check_clear(&sigc);
42 - return ret;
43 -}
44 -
45 -static int verify_tag(const unsigned char *sha1, const char *name_to_report,
46 - unsigned flags)
47 -{
48 - enum object_type type;
49 - char *buf;
50 - unsigned long size;
51 - int ret;
52 -
53 - type = sha1_object_info(sha1, NULL);
54 - if (type != OBJ_TAG)
55 - return error("%s: cannot verify a non-tag object of type %s.",
56 - name_to_report ?
57 - name_to_report :
58 - find_unique_abbrev(sha1, DEFAULT_ABBREV),
59 - typename(type));
60 -
61 - buf = read_sha1_file(sha1, &type, &size);
62 - if (!buf)
63 - return error("%s: unable to read file.",
64 - name_to_report ?
65 - name_to_report :
66 - find_unique_abbrev(sha1, DEFAULT_ABBREV));
67 -
68 - ret = run_gpg_verify(buf, size, flags);
69 -
70 - free(buf);
71 - return ret;
72 -}
73 -
21 static int git_verify_tag_config(const char *var, const char *value, void *cb)
22 {
23 int status = git_gpg_config(var, value, cb);
@@ -104,7 +51,7 @@ int cmd_verify_tag(int argc, const char **argv, const char *prefix)
51 const char *name = argv[i++];
52 if (get_sha1(name, sha1))
53 had_error = !!error("tag '%s' not found.", name);
107 - else if (verify_tag(sha1, name, flags))
54 + else if (gpg_verify_tag(sha1, name, flags))
55 had_error = 1;
56 }
57 return had_error;
tag.c
+53
@@ -6,6 +6,59 @@
6
7 const char *tag_type = "tag";
8
9 +static int run_gpg_verify(const char *buf, unsigned long size, unsigned flags)
10 +{
11 + struct signature_check sigc;
12 + size_t payload_size;
13 + int ret;
14 +
15 + memset(&sigc, 0, sizeof(sigc));
16 +
17 + payload_size = parse_signature(buf, size);
18 +
19 + if (size == payload_size) {
20 + if (flags & GPG_VERIFY_VERBOSE)
21 + write_in_full(1, buf, payload_size);
22 + return error("no signature found");
23 + }
24 +
25 + ret = check_signature(buf, payload_size, buf + payload_size,
26 + size - payload_size, &sigc);
27 + print_signature_buffer(&sigc, flags);
28 +
29 + signature_check_clear(&sigc);
30 + return ret;
31 +}
32 +
33 +int gpg_verify_tag(const unsigned char *sha1, const char *name_to_report,
34 + unsigned flags)
35 +{
36 + enum object_type type;
37 + char *buf;
38 + unsigned long size;
39 + int ret;
40 +
41 + type = sha1_object_info(sha1, NULL);
42 + if (type != OBJ_TAG)
43 + return error("%s: cannot verify a non-tag object of type %s.",
44 + name_to_report ?
45 + name_to_report :
46 + find_unique_abbrev(sha1, DEFAULT_ABBREV),
47 + typename(type));
48 +
49 + buf = read_sha1_file(sha1, &type, &size);
50 + if (!buf)
51 + return error("%s: unable to read file.",
52 + name_to_report ?
53 + name_to_report :
54 + find_unique_abbrev(sha1, DEFAULT_ABBREV));
55 +
56 + ret = run_gpg_verify(buf, size, flags);
57 +
58 + free(buf);
59 + return ret;
60 +}
61 +
62 struct object *deref_tag(struct object *o, const char *warn, int warnlen)
63 {
64 while (o && o->type == OBJ_TAG)
tag.h
+2
@@ -17,5 +17,7 @@ extern int parse_tag_buffer(struct tag *item, const void *data, unsigned long si
17 extern int parse_tag(struct tag *item);
18 extern struct object *deref_tag(struct object *, const char *, int);
19 extern struct object *deref_tag_noverify(struct object *);
20 +extern int gpg_verify_tag(const unsigned char *sha1,
21 + const char *name_to_report, unsigned flags);
22
23 #endif /* TAG_H */