ref-filter: get rid of duplicate code

Make one function from 2 duplicate pieces and invoke it twice.

Signed-off-by: Olga Telezhnaia <olyatelezhnaya@gmail.com>
Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Olga Telezhnaya 2018-02-21 06:59:00 +00:00 коммит произвёл Junio C Hamano
Родитель 6bd396be0f
Коммит 2bbc6e8a92
1 изменённых файлов: 21 добавлений и 24 удалений

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

@ -1354,15 +1354,31 @@ static const char *get_refname(struct used_atom *atom, struct ref_array_item *re
return show_ref(&atom->u.refname, ref->refname);
}
static void get_object(struct ref_array_item *ref, const struct object_id *oid,
int deref, struct object **obj)
{
int eaten;
unsigned long size;
void *buf = get_obj(oid, obj, &size, &eaten);
if (!buf)
die(_("missing object %s for %s"),
oid_to_hex(oid), ref->refname);
if (!*obj)
die(_("parse_object_buffer failed on %s for %s"),
oid_to_hex(oid), ref->refname);
grab_values(ref->value, deref, *obj, buf, size);
if (!eaten)
free(buf);
}
/*
* Parse the object referred by ref, and grab needed value.
*/
static void populate_value(struct ref_array_item *ref)
{
void *buf;
struct object *obj;
int eaten, i;
unsigned long size;
int i;
const struct object_id *tagged;
ref->value = xcalloc(used_atom_cnt, sizeof(struct atom_value));
@ -1483,17 +1499,7 @@ static void populate_value(struct ref_array_item *ref)
return;
need_obj:
buf = get_obj(&ref->objectname, &obj, &size, &eaten);
if (!buf)
die(_("missing object %s for %s"),
oid_to_hex(&ref->objectname), ref->refname);
if (!obj)
die(_("parse_object_buffer failed on %s for %s"),
oid_to_hex(&ref->objectname), ref->refname);
grab_values(ref->value, 0, obj, buf, size);
if (!eaten)
free(buf);
get_object(ref, &ref->objectname, 0, &obj);
/*
* If there is no atom that wants to know about tagged
@ -1514,16 +1520,7 @@ static void populate_value(struct ref_array_item *ref)
* is not consistent with what deref_tag() does
* which peels the onion to the core.
*/
buf = get_obj(tagged, &obj, &size, &eaten);
if (!buf)
die(_("missing object %s for %s"),
oid_to_hex(tagged), ref->refname);
if (!obj)
die(_("parse_object_buffer failed on %s for %s"),
oid_to_hex(tagged), ref->refname);
grab_values(ref->value, 1, obj, buf, size);
if (!eaten)
free(buf);
get_object(ref, tagged, 1, &obj);
}
/*