mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
When queueing a reference in the "ref-filter" subsystem we end up creating a new ref array item that contains the reference's info. One bit of info that we always discard though is the peeled object ID, and because of that we are forced to use `peel_iterated_oid()`. Refactor the code to propagate the peeled object ID via the ref array, if available. This allows us to manually peel tags without having to go through the object database. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
74 lines
1.7 KiB
C
74 lines
1.7 KiB
C
/*
|
|
* Builtin "git verify-tag"
|
|
*
|
|
* Copyright (c) 2007 Carlos Rica <jasampler@gmail.com>
|
|
*
|
|
* Based on git-verify-tag.sh
|
|
*/
|
|
#include "builtin.h"
|
|
#include "config.h"
|
|
#include "environment.h"
|
|
#include "gettext.h"
|
|
#include "tag.h"
|
|
#include "object-name.h"
|
|
#include "parse-options.h"
|
|
#include "gpg-interface.h"
|
|
#include "ref-filter.h"
|
|
|
|
static const char * const verify_tag_usage[] = {
|
|
N_("git verify-tag [-v | --verbose] [--format=<format>] [--raw] <tag>..."),
|
|
NULL
|
|
};
|
|
|
|
int cmd_verify_tag(int argc,
|
|
const char **argv,
|
|
const char *prefix,
|
|
struct repository *repo)
|
|
{
|
|
int i = 1, verbose = 0, had_error = 0;
|
|
unsigned flags = 0;
|
|
struct ref_format format = REF_FORMAT_INIT;
|
|
const struct option verify_tag_options[] = {
|
|
OPT__VERBOSE(&verbose, N_("print tag contents")),
|
|
OPT_BIT(0, "raw", &flags, N_("print raw gpg status output"), GPG_VERIFY_RAW),
|
|
OPT_STRING(0, "format", &format.format, N_("format"), N_("format to use for the output")),
|
|
OPT_END()
|
|
};
|
|
|
|
repo_config(repo, git_default_config, NULL);
|
|
|
|
argc = parse_options(argc, argv, prefix, verify_tag_options,
|
|
verify_tag_usage, PARSE_OPT_KEEP_ARGV0);
|
|
if (argc <= i)
|
|
usage_with_options(verify_tag_usage, verify_tag_options);
|
|
|
|
if (verbose)
|
|
flags |= GPG_VERIFY_VERBOSE;
|
|
|
|
if (format.format) {
|
|
if (verify_ref_format(&format))
|
|
usage_with_options(verify_tag_usage,
|
|
verify_tag_options);
|
|
flags |= GPG_VERIFY_OMIT_STATUS;
|
|
}
|
|
|
|
while (i < argc) {
|
|
struct object_id oid;
|
|
const char *name = argv[i++];
|
|
|
|
if (repo_get_oid(repo, name, &oid)) {
|
|
had_error = !!error("tag '%s' not found.", name);
|
|
continue;
|
|
}
|
|
|
|
if (gpg_verify_tag(&oid, name, flags)) {
|
|
had_error = 1;
|
|
continue;
|
|
}
|
|
|
|
if (format.format)
|
|
pretty_print_ref(name, &oid, NULL, &format);
|
|
}
|
|
return had_error;
|
|
}
|