builtin/name-rev: convert to struct object_id

Convert all the uses of unsigned char [20] to struct object_id.  Also,
convert some hard-coded integers into constants.

name_rev_line accepts a wide variety of free-form input and only
interprets 40-character hex values, passing through everything else.
Consequently, it is not a good candidate for parse_oid_hex, which is
much stricter.

This change is a prerequisite for converting parse_object.

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-01 02:28:57 +00:00 коммит произвёл Junio C Hamano
Родитель e0a9280404
Коммит 511dca80cc
1 изменённых файлов: 14 добавлений и 14 удалений

Просмотреть файл

@ -114,7 +114,7 @@ struct name_ref_data {
static struct tip_table {
struct tip_table_entry {
unsigned char sha1[20];
struct object_id oid;
const char *refname;
} *table;
int nr;
@ -122,13 +122,13 @@ static struct tip_table {
int sorted;
} tip_table;
static void add_to_tip_table(const unsigned char *sha1, const char *refname,
static void add_to_tip_table(const struct object_id *oid, const char *refname,
int shorten_unambiguous)
{
refname = name_ref_abbrev(refname, shorten_unambiguous);
ALLOC_GROW(tip_table.table, tip_table.nr + 1, tip_table.alloc);
hashcpy(tip_table.table[tip_table.nr].sha1, sha1);
oidcpy(&tip_table.table[tip_table.nr].oid, oid);
tip_table.table[tip_table.nr].refname = xstrdup(refname);
tip_table.nr++;
tip_table.sorted = 0;
@ -137,7 +137,7 @@ static void add_to_tip_table(const unsigned char *sha1, const char *refname,
static int tipcmp(const void *a_, const void *b_)
{
const struct tip_table_entry *a = a_, *b = b_;
return hashcmp(a->sha1, b->sha1);
return oidcmp(&a->oid, &b->oid);
}
static int name_ref(const char *path, const struct object_id *oid, int flags, void *cb_data)
@ -194,7 +194,7 @@ static int name_ref(const char *path, const struct object_id *oid, int flags, vo
return 0;
}
add_to_tip_table(oid->hash, path, can_abbreviate_output);
add_to_tip_table(oid, path, can_abbreviate_output);
while (o && o->type == OBJ_TAG) {
struct tag *t = (struct tag *) o;
@ -216,7 +216,7 @@ static int name_ref(const char *path, const struct object_id *oid, int flags, vo
static const unsigned char *nth_tip_table_ent(size_t ix, void *table_)
{
struct tip_table_entry *table = table_;
return table[ix].sha1;
return table[ix].oid.hash;
}
static const char *get_exact_ref_match(const struct object *o)
@ -301,9 +301,9 @@ static void name_rev_line(char *p, struct name_ref_data *data)
#define ishex(x) (isdigit((x)) || ((x) >= 'a' && (x) <= 'f'))
if (!ishex(*p))
forty = 0;
else if (++forty == 40 &&
else if (++forty == GIT_SHA1_HEXSZ &&
!ishex(*(p+1))) {
unsigned char sha1[40];
struct object_id oid;
const char *name = NULL;
char c = *(p+1);
int p_len = p - p_start + 1;
@ -311,9 +311,9 @@ static void name_rev_line(char *p, struct name_ref_data *data)
forty = 0;
*(p+1) = 0;
if (!get_sha1(p - 39, sha1)) {
if (!get_oid(p - (GIT_SHA1_HEXSZ - 1), &oid)) {
struct object *o =
lookup_object(sha1);
lookup_object(oid.hash);
if (o)
name = get_rev_name(o, &buf);
}
@ -323,7 +323,7 @@ static void name_rev_line(char *p, struct name_ref_data *data)
continue;
if (data->name_only)
printf("%.*s%s", p_len - 40, p_start, name);
printf("%.*s%s", p_len - GIT_SHA1_HEXSZ, p_start, name);
else
printf("%.*s (%s)", p_len, p_start, name);
p_start = p + 1;
@ -374,18 +374,18 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
cutoff = 0;
for (; argc; argc--, argv++) {
unsigned char sha1[20];
struct object_id oid;
struct object *object;
struct commit *commit;
if (get_sha1(*argv, sha1)) {
if (get_oid(*argv, &oid)) {
fprintf(stderr, "Could not get sha1 for %s. Skipping.\n",
*argv);
continue;
}
commit = NULL;
object = parse_object(sha1);
object = parse_object(oid.hash);
if (object) {
struct object *peeled = deref_tag(object, *argv, 0);
if (peeled && peeled->type == OBJ_COMMIT)