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>

Olga Telezhnaya committed Feb 21, 2018 at 06:59 UTC 2bbc6e8a92e5bfe4f1db3836d7106aa0e9df9479
1 file changed +21 -24
ref-filter.c
+21 -24
@@ -1354,15 +1354,31 @@ static const char *get_refname(struct used_atom *atom, struct ref_array_item *re
1354 return show_ref(&atom->u.refname, ref->refname);
1355 }
1356
1357 +static void get_object(struct ref_array_item *ref, const struct object_id *oid,
1358 + int deref, struct object **obj)
1359 +{
1360 + int eaten;
1361 + unsigned long size;
1362 + void *buf = get_obj(oid, obj, &size, &eaten);
1363 + if (!buf)
1364 + die(_("missing object %s for %s"),
1365 + oid_to_hex(oid), ref->refname);
1366 + if (!*obj)
1367 + die(_("parse_object_buffer failed on %s for %s"),
1368 + oid_to_hex(oid), ref->refname);
1369 +
1370 + grab_values(ref->value, deref, *obj, buf, size);
1371 + if (!eaten)
1372 + free(buf);
1373 +}
1374 +
1375 /*
1376 * Parse the object referred by ref, and grab needed value.
1377 */
1378 static void populate_value(struct ref_array_item *ref)
1379 {
1362 - void *buf;
1380 struct object *obj;
1364 - int eaten, i;
1365 - unsigned long size;
1381 + int i;
1382 const struct object_id *tagged;
1383
1384 ref->value = xcalloc(used_atom_cnt, sizeof(struct atom_value));
@@ -1483,17 +1499,7 @@ static void populate_value(struct ref_array_item *ref)
1499 return;
1500
1501 need_obj:
1486 - buf = get_obj(&ref->objectname, &obj, &size, &eaten);
1487 - if (!buf)
1488 - die(_("missing object %s for %s"),
1489 - oid_to_hex(&ref->objectname), ref->refname);
1490 - if (!obj)
1491 - die(_("parse_object_buffer failed on %s for %s"),
1492 - oid_to_hex(&ref->objectname), ref->refname);
1493 -
1494 - grab_values(ref->value, 0, obj, buf, size);
1495 - if (!eaten)
1496 - free(buf);
1502 + get_object(ref, &ref->objectname, 0, &obj);
1503
1504 /*
1505 * If there is no atom that wants to know about tagged
@@ -1514,16 +1520,7 @@ static void populate_value(struct ref_array_item *ref)
1520 * is not consistent with what deref_tag() does
1521 * which peels the onion to the core.
1522 */
1517 - buf = get_obj(tagged, &obj, &size, &eaten);
1518 - if (!buf)
1519 - die(_("missing object %s for %s"),
1520 - oid_to_hex(tagged), ref->refname);
1521 - if (!obj)
1522 - die(_("parse_object_buffer failed on %s for %s"),
1523 - oid_to_hex(tagged), ref->refname);
1524 - grab_values(ref->value, 1, obj, buf, size);
1525 - if (!eaten)
1526 - free(buf);
1523 + get_object(ref, tagged, 1, &obj);
1524 }
1525
1526 /*