Merge branch 'jk/ref-array-push'
authorJunio C Hamano <gitster@pobox.com>
Wed, 25 Apr 2018 04:28:59 +0000 (13:28 +0900)
committerJunio C Hamano <gitster@pobox.com>
Wed, 25 Apr 2018 04:28:59 +0000 (13:28 +0900)
API clean-up aournd ref-filter code.

* jk/ref-array-push:
ref-filter: factor ref_array pushing into its own function
ref-filter: make ref_array_item allocation more consistent
ref-filter: use "struct object_id" consistently

1  2 
builtin/tag.c
ref-filter.c
diff --combined builtin/tag.c
index 8cff6d0b727a572a34adcfe72246953b93c79edd,42278f51672acae675785b90aad43eb415f3fb14..46a5c6a1da17fa12ff65f33889527ec76869c3cd
@@@ -99,8 -99,7 +99,8 @@@ static int delete_tag(const char *name
  {
        if (delete_ref(NULL, ref, oid, 0))
                return 1;
 -      printf(_("Deleted tag '%s' (was %s)\n"), name, find_unique_abbrev(oid->hash, DEFAULT_ABBREV));
 +      printf(_("Deleted tag '%s' (was %s)\n"), name,
 +             find_unique_abbrev(oid, DEFAULT_ABBREV));
        return 0;
  }
  
@@@ -118,7 -117,7 +118,7 @@@ static int verify_tag(const char *name
                return -1;
  
        if (format->format)
-               pretty_print_ref(name, oid->hash, format);
+               pretty_print_ref(name, oid, format);
  
        return 0;
  }
@@@ -168,7 -167,7 +168,7 @@@ static void write_tag_body(int fd, cons
        enum object_type type;
        char *buf, *sp;
  
 -      buf = read_sha1_file(oid->hash, &type, &size);
 +      buf = read_object_file(oid, &type, &size);
        if (!buf)
                return;
        /* skip header */
@@@ -212,7 -211,7 +212,7 @@@ static void create_tag(const struct obj
        struct strbuf header = STRBUF_INIT;
        char *path = NULL;
  
 -      type = sha1_object_info(object->hash, NULL);
 +      type = oid_object_info(object, NULL);
        if (type <= OBJ_NONE)
            die(_("bad object type."));
  
@@@ -294,17 -293,17 +294,17 @@@ static void create_reflog_msg(const str
                strbuf_addstr(sb, rla);
        } else {
                strbuf_addstr(sb, "tag: tagging ");
 -              strbuf_add_unique_abbrev(sb, oid->hash, DEFAULT_ABBREV);
 +              strbuf_add_unique_abbrev(sb, oid, DEFAULT_ABBREV);
        }
  
        strbuf_addstr(sb, " (");
 -      type = sha1_object_info(oid->hash, NULL);
 +      type = oid_object_info(oid, NULL);
        switch (type) {
        default:
                strbuf_addstr(sb, "object of unknown type");
                break;
        case OBJ_COMMIT:
 -              if ((buf = read_sha1_file(oid->hash, &type, &size)) != NULL) {
 +              if ((buf = read_object_file(oid, &type, &size)) != NULL) {
                        subject_len = find_commit_subject(buf, &subject_start);
                        strbuf_insert(sb, sb->len, subject_start, subject_len);
                } else {
@@@ -559,8 -558,7 +559,8 @@@ int cmd_tag(int argc, const char **argv
                die("%s", err.buf);
        ref_transaction_free(transaction);
        if (force && !is_null_oid(&prev) && oidcmp(&prev, &object))
 -              printf(_("Updated tag '%s' (was %s)\n"), tag, find_unique_abbrev(prev.hash, DEFAULT_ABBREV));
 +              printf(_("Updated tag '%s' (was %s)\n"), tag,
 +                     find_unique_abbrev(&prev, DEFAULT_ABBREV));
  
        UNLEAK(buf);
        UNLEAK(ref);
diff --combined ref-filter.c
index a8478384844bb17a50ba8aa1da463d54342d7f82,6e9328b274de7e4c8f7935ff289fba5b64dbd43f..ac82f9f21e15b26d1654d63e8cabb621175f7d34
@@@ -728,7 -728,7 +728,7 @@@ int verify_ref_format(struct ref_forma
  static void *get_obj(const struct object_id *oid, struct object **obj, unsigned long *sz, int *eaten)
  {
        enum object_type type;
 -      void *buf = read_sha1_file(oid->hash, &type, sz);
 +      void *buf = read_object_file(oid, &type, sz);
  
        if (buf)
                *obj = parse_object_buffer(oid, type, *sz, buf, eaten);
        return buf;
  }
  
 -static int grab_objectname(const char *name, const unsigned char *sha1,
 +static int grab_objectname(const char *name, const struct object_id *oid,
                           struct atom_value *v, struct used_atom *atom)
  {
        if (starts_with(name, "objectname")) {
                if (atom->u.objectname.option == O_SHORT) {
 -                      v->s = xstrdup(find_unique_abbrev(sha1, DEFAULT_ABBREV));
 +                      v->s = xstrdup(find_unique_abbrev(oid, DEFAULT_ABBREV));
                        return 1;
                } else if (atom->u.objectname.option == O_FULL) {
 -                      v->s = xstrdup(sha1_to_hex(sha1));
 +                      v->s = xstrdup(oid_to_hex(oid));
                        return 1;
                } else if (atom->u.objectname.option == O_LENGTH) {
 -                      v->s = xstrdup(find_unique_abbrev(sha1, atom->u.objectname.length));
 +                      v->s = xstrdup(find_unique_abbrev(oid, atom->u.objectname.length));
                        return 1;
                } else
                        die("BUG: unknown %%(objectname) option");
@@@ -775,7 -775,7 +775,7 @@@ static void grab_common_values(struct a
                        v->s = xstrfmt("%lu", sz);
                }
                else if (deref)
 -                      grab_objectname(name, obj->oid.hash, v, &used_atom[i]);
 +                      grab_objectname(name, &obj->oid, v, &used_atom[i]);
        }
  }
  
@@@ -1309,14 -1309,10 +1309,14 @@@ char *get_head_description(void
        memset(&state, 0, sizeof(state));
        wt_status_get_state(&state, 1);
        if (state.rebase_in_progress ||
 -          state.rebase_interactive_in_progress)
 -              strbuf_addf(&desc, _("(no branch, rebasing %s)"),
 -                          state.branch);
 -      else if (state.bisect_in_progress)
 +          state.rebase_interactive_in_progress) {
 +              if (state.branch)
 +                      strbuf_addf(&desc, _("(no branch, rebasing %s)"),
 +                                  state.branch);
 +              else
 +                      strbuf_addf(&desc, _("(no branch, rebasing detached HEAD %s)"),
 +                                  state.detached_from);
 +      } else if (state.bisect_in_progress)
                strbuf_addf(&desc, _("(no branch, bisect started on %s)"),
                            state.branch);
        else if (state.detached_from) {
@@@ -1459,7 -1455,7 +1459,7 @@@ static void populate_value(struct ref_a
                                v->s = xstrdup(buf + 1);
                        }
                        continue;
 -              } else if (!deref && grab_objectname(name, ref->objectname.hash, v, atom)) {
 +              } else if (!deref && grab_objectname(name, &ref->objectname, v, atom)) {
                        continue;
                } else if (!strcmp(name, "HEAD")) {
                        if (atom->u.head && !strcmp(ref->refname, atom->u.head))
@@@ -1828,15 -1824,30 +1828,30 @@@ static const struct object_id *match_po
        return NULL;
  }
  
- /* Allocate space for a new ref_array_item and copy the objectname and flag to it */
+ /*
+  * Allocate space for a new ref_array_item and copy the name and oid to it.
+  *
+  * Callers can then fill in other struct members at their leisure.
+  */
  static struct ref_array_item *new_ref_array_item(const char *refname,
-                                                const unsigned char *objectname,
-                                                int flag)
+                                                const struct object_id *oid)
  {
        struct ref_array_item *ref;
        FLEX_ALLOC_STR(ref, refname, refname);
-       hashcpy(ref->objectname.hash, objectname);
-       ref->flag = flag;
+       oidcpy(&ref->objectname, oid);
+       return ref;
+ }
+ struct ref_array_item *ref_array_push(struct ref_array *array,
+                                     const char *refname,
+                                     const struct object_id *oid)
+ {
+       struct ref_array_item *ref = new_ref_array_item(refname, oid);
+       ALLOC_GROW(array->items, array->nr + 1, array->alloc);
+       array->items[array->nr++] = ref;
  
        return ref;
  }
@@@ -1931,12 -1942,11 +1946,11 @@@ static int ref_filter_handler(const cha
         * to do its job and the resulting list may yet to be pruned
         * by maxcount logic.
         */
-       ref = new_ref_array_item(refname, oid->hash, flag);
+       ref = ref_array_push(ref_cbdata->array, refname, oid);
        ref->commit = commit;
-       REALLOC_ARRAY(ref_cbdata->array->items, ref_cbdata->array->nr + 1);
-       ref_cbdata->array->items[ref_cbdata->array->nr++] = ref;
+       ref->flag = flag;
        ref->kind = kind;
        return 0;
  }
  
@@@ -2169,11 -2179,11 +2183,11 @@@ void show_ref_array_item(struct ref_arr
        putchar('\n');
  }
  
- void pretty_print_ref(const char *name, const unsigned char *sha1,
+ void pretty_print_ref(const char *name, const struct object_id *oid,
                      const struct ref_format *format)
  {
        struct ref_array_item *ref_item;
-       ref_item = new_ref_array_item(name, sha1, 0);
+       ref_item = new_ref_array_item(name, oid);
        ref_item->kind = ref_kind_from_refname(name);
        show_ref_array_item(ref_item, format);
        free_array_item(ref_item);