builtin/tag: convert to struct object_id

Parts of this module call lookup_commit_reference, which we want to
convert.  The module is small and mostly self-contained, so convert the
rest of it while we're at it.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
brian m. carlson 2017-05-06 22:10:08 +00:00 committed by Junio C Hamano
parent 33d66df34e
commit 7422ab50d1

View File

@ -66,7 +66,7 @@ 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, typedef int (*each_tag_name_fn)(const char *name, const char *ref,
const unsigned char *sha1, const void *cb_data); const struct object_id *oid, const 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,
const void *cb_data) const void *cb_data)
@ -74,17 +74,17 @@ static int for_each_tag_name(const char **argv, each_tag_name_fn fn,
const char **p; const char **p;
struct strbuf ref = STRBUF_INIT; struct strbuf ref = STRBUF_INIT;
int had_error = 0; int had_error = 0;
unsigned char sha1[20]; struct object_id oid;
for (p = argv; *p; p++) { for (p = argv; *p; p++) {
strbuf_reset(&ref); strbuf_reset(&ref);
strbuf_addf(&ref, "refs/tags/%s", *p); strbuf_addf(&ref, "refs/tags/%s", *p);
if (read_ref(ref.buf, sha1)) { if (read_ref(ref.buf, oid.hash)) {
error(_("tag '%s' not found."), *p); error(_("tag '%s' not found."), *p);
had_error = 1; had_error = 1;
continue; continue;
} }
if (fn(*p, ref.buf, sha1, cb_data)) if (fn(*p, ref.buf, &oid, cb_data))
had_error = 1; had_error = 1;
} }
strbuf_release(&ref); strbuf_release(&ref);
@ -92,16 +92,16 @@ static int for_each_tag_name(const char **argv, each_tag_name_fn fn,
} }
static int delete_tag(const char *name, const char *ref, static int delete_tag(const char *name, const char *ref,
const unsigned char *sha1, const void *cb_data) const struct object_id *oid, const void *cb_data)
{ {
if (delete_ref(NULL, ref, sha1, 0)) if (delete_ref(NULL, ref, oid->hash, 0))
return 1; return 1;
printf(_("Deleted tag '%s' (was %s)\n"), name, find_unique_abbrev(sha1, DEFAULT_ABBREV)); printf(_("Deleted tag '%s' (was %s)\n"), name, find_unique_abbrev(oid->hash, DEFAULT_ABBREV));
return 0; return 0;
} }
static int verify_tag(const char *name, const char *ref, static int verify_tag(const char *name, const char *ref,
const unsigned char *sha1, const void *cb_data) const struct object_id *oid, const void *cb_data)
{ {
int flags; int flags;
const char *fmt_pretty = cb_data; const char *fmt_pretty = cb_data;
@ -110,11 +110,11 @@ static int verify_tag(const char *name, const char *ref,
if (fmt_pretty) if (fmt_pretty)
flags = GPG_VERIFY_OMIT_STATUS; flags = GPG_VERIFY_OMIT_STATUS;
if (gpg_verify_tag(sha1, name, flags)) if (gpg_verify_tag(oid->hash, name, flags))
return -1; return -1;
if (fmt_pretty) if (fmt_pretty)
pretty_print_ref(name, sha1, fmt_pretty); pretty_print_ref(name, oid->hash, fmt_pretty);
return 0; return 0;
} }
@ -182,13 +182,13 @@ static int git_tag_config(const char *var, const char *value, void *cb)
return git_default_config(var, value, cb); return git_default_config(var, value, cb);
} }
static void write_tag_body(int fd, const unsigned char *sha1) static void write_tag_body(int fd, const struct object_id *oid)
{ {
unsigned long size; unsigned long size;
enum object_type type; enum object_type type;
char *buf, *sp; char *buf, *sp;
buf = read_sha1_file(sha1, &type, &size); buf = read_sha1_file(oid->hash, &type, &size);
if (!buf) if (!buf)
return; return;
/* skip header */ /* skip header */
@ -204,11 +204,11 @@ static void write_tag_body(int fd, const unsigned char *sha1)
free(buf); free(buf);
} }
static int build_tag_object(struct strbuf *buf, int sign, unsigned char *result) static int build_tag_object(struct strbuf *buf, int sign, struct object_id *result)
{ {
if (sign && do_sign(buf) < 0) if (sign && do_sign(buf) < 0)
return error(_("unable to sign the tag")); return error(_("unable to sign the tag"));
if (write_sha1_file(buf->buf, buf->len, tag_type, result) < 0) if (write_sha1_file(buf->buf, buf->len, tag_type, result->hash) < 0)
return error(_("unable to write tag file")); return error(_("unable to write tag file"));
return 0; return 0;
} }
@ -223,15 +223,15 @@ struct create_tag_options {
} cleanup_mode; } cleanup_mode;
}; };
static void create_tag(const unsigned char *object, const char *tag, static void create_tag(const struct object_id *object, const char *tag,
struct strbuf *buf, struct create_tag_options *opt, struct strbuf *buf, struct create_tag_options *opt,
unsigned char *prev, unsigned char *result) struct object_id *prev, struct object_id *result)
{ {
enum object_type type; enum object_type type;
struct strbuf header = STRBUF_INIT; struct strbuf header = STRBUF_INIT;
char *path = NULL; char *path = NULL;
type = sha1_object_info(object, NULL); type = sha1_object_info(object->hash, NULL);
if (type <= OBJ_NONE) if (type <= OBJ_NONE)
die(_("bad object type.")); die(_("bad object type."));
@ -240,7 +240,7 @@ static void create_tag(const unsigned char *object, const char *tag,
"type %s\n" "type %s\n"
"tag %s\n" "tag %s\n"
"tagger %s\n\n", "tagger %s\n\n",
sha1_to_hex(object), oid_to_hex(object),
typename(type), typename(type),
tag, tag,
git_committer_info(IDENT_STRICT)); git_committer_info(IDENT_STRICT));
@ -254,7 +254,7 @@ static void create_tag(const unsigned char *object, const char *tag,
if (fd < 0) if (fd < 0)
die_errno(_("could not create file '%s'"), path); die_errno(_("could not create file '%s'"), path);
if (!is_null_sha1(prev)) { if (!is_null_oid(prev)) {
write_tag_body(fd, prev); write_tag_body(fd, prev);
} else { } else {
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
@ -296,7 +296,7 @@ static void create_tag(const unsigned char *object, const char *tag,
} }
} }
static void create_reflog_msg(const unsigned char *sha1, struct strbuf *sb) static void create_reflog_msg(const struct object_id *oid, struct strbuf *sb)
{ {
enum object_type type; enum object_type type;
struct commit *c; struct commit *c;
@ -310,17 +310,17 @@ static void create_reflog_msg(const unsigned char *sha1, struct strbuf *sb)
strbuf_addstr(sb, rla); strbuf_addstr(sb, rla);
} else { } else {
strbuf_addstr(sb, _("tag: tagging ")); strbuf_addstr(sb, _("tag: tagging "));
strbuf_add_unique_abbrev(sb, sha1, DEFAULT_ABBREV); strbuf_add_unique_abbrev(sb, oid->hash, DEFAULT_ABBREV);
} }
strbuf_addstr(sb, " ("); strbuf_addstr(sb, " (");
type = sha1_object_info(sha1, NULL); type = sha1_object_info(oid->hash, NULL);
switch (type) { switch (type) {
default: default:
strbuf_addstr(sb, _("object of unknown type")); strbuf_addstr(sb, _("object of unknown type"));
break; break;
case OBJ_COMMIT: case OBJ_COMMIT:
if ((buf = read_sha1_file(sha1, &type, &size)) != NULL) { if ((buf = read_sha1_file(oid->hash, &type, &size)) != NULL) {
subject_len = find_commit_subject(buf, &subject_start); subject_len = find_commit_subject(buf, &subject_start);
strbuf_insert(sb, sb->len, subject_start, subject_len); strbuf_insert(sb, sb->len, subject_start, subject_len);
} else { } else {
@ -328,7 +328,7 @@ static void create_reflog_msg(const unsigned char *sha1, struct strbuf *sb)
} }
free(buf); free(buf);
if ((c = lookup_commit_reference(sha1)) != NULL) if ((c = lookup_commit_reference(oid->hash)) != NULL)
strbuf_addf(sb, ", %s", show_date(c->date, 0, DATE_MODE(SHORT))); strbuf_addf(sb, ", %s", show_date(c->date, 0, DATE_MODE(SHORT)));
break; break;
case OBJ_TREE: case OBJ_TREE:
@ -378,7 +378,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
struct strbuf ref = STRBUF_INIT; struct strbuf ref = STRBUF_INIT;
struct strbuf reflog_msg = STRBUF_INIT; struct strbuf reflog_msg = STRBUF_INIT;
unsigned char object[20], prev[20]; struct object_id object, prev;
const char *object_ref, *tag; const char *object_ref, *tag;
struct create_tag_options opt; struct create_tag_options opt;
char *cleanup_arg = NULL; char *cleanup_arg = NULL;
@ -528,14 +528,14 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
if (argc > 2) if (argc > 2)
die(_("too many params")); die(_("too many params"));
if (get_sha1(object_ref, object)) if (get_oid(object_ref, &object))
die(_("Failed to resolve '%s' as a valid ref."), object_ref); die(_("Failed to resolve '%s' as a valid ref."), object_ref);
if (strbuf_check_tag_ref(&ref, tag)) if (strbuf_check_tag_ref(&ref, tag))
die(_("'%s' is not a valid tag name."), tag); die(_("'%s' is not a valid tag name."), tag);
if (read_ref(ref.buf, prev)) if (read_ref(ref.buf, prev.hash))
hashclr(prev); oidclr(&prev);
else if (!force) else if (!force)
die(_("tag '%s' already exists"), tag); die(_("tag '%s' already exists"), tag);
@ -550,24 +550,24 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
else else
die(_("Invalid cleanup mode %s"), cleanup_arg); die(_("Invalid cleanup mode %s"), cleanup_arg);
create_reflog_msg(object, &reflog_msg); create_reflog_msg(&object, &reflog_msg);
if (create_tag_object) { if (create_tag_object) {
if (force_sign_annotate && !annotate) if (force_sign_annotate && !annotate)
opt.sign = 1; opt.sign = 1;
create_tag(object, tag, &buf, &opt, prev, object); create_tag(&object, tag, &buf, &opt, &prev, &object);
} }
transaction = ref_transaction_begin(&err); transaction = ref_transaction_begin(&err);
if (!transaction || if (!transaction ||
ref_transaction_update(transaction, ref.buf, object, prev, ref_transaction_update(transaction, ref.buf, object.hash, prev.hash,
create_reflog ? REF_FORCE_CREATE_REFLOG : 0, create_reflog ? REF_FORCE_CREATE_REFLOG : 0,
reflog_msg.buf, &err) || reflog_msg.buf, &err) ||
ref_transaction_commit(transaction, &err)) ref_transaction_commit(transaction, &err))
die("%s", err.buf); die("%s", err.buf);
ref_transaction_free(transaction); ref_transaction_free(transaction);
if (force && !is_null_sha1(prev) && hashcmp(prev, object)) if (force && !is_null_oid(&prev) && oidcmp(&prev, &object))
printf(_("Updated tag '%s' (was %s)\n"), tag, find_unique_abbrev(prev, DEFAULT_ABBREV)); printf(_("Updated tag '%s' (was %s)\n"), tag, find_unique_abbrev(prev.hash, DEFAULT_ABBREV));
strbuf_release(&err); strbuf_release(&err);
strbuf_release(&buf); strbuf_release(&buf);