mirror of
https://github.com/git/git.git
synced 2024-11-28 04:23:30 +08:00
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:
parent
33d66df34e
commit
7422ab50d1
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user