Merge branch 'ot/ref-filter-cleanup'
authorJunio C Hamano <gitster@pobox.com>
Thu, 8 Mar 2018 20:36:24 +0000 (12:36 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 8 Mar 2018 20:36:24 +0000 (12:36 -0800)
Code cleanup.

* ot/ref-filter-cleanup:
ref-filter: get rid of goto
ref-filter: get rid of duplicate code

ref-filter.c
index ac9ac6b0c136ae7cdf463abb9638feb6610250cd..45fc56216aaa8fd084a10514f6f4912878ab1627 100644 (file)
@@ -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));
@@ -1478,22 +1494,12 @@ static void populate_value(struct ref_array_item *ref)
        for (i = 0; i < used_atom_cnt; i++) {
                struct atom_value *v = &ref->value[i];
                if (v->s == NULL)
-                       goto need_obj;
+                       break;
        }
-       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);
+       if (used_atom_cnt <= i)
+               return;
 
-       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);
 }
 
 /*