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
/*