зеркало из https://github.com/microsoft/git.git
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:
Родитель
e0a9280404
Коммит
511dca80cc
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче