{"thread":{"id":"39421","subject":"[PATCH v3 01/56] refs: convert struct ref_entry to use struct object_id","startedAt":"2015-05-25T18:38:26Z","lastAt":"2015-06-05T14:48:20Z","messageCount":63,"participants":["brian m. carlson","Junio C Hamano","Stefan Beller","Michael Haggerty"],"isPatch":true,"patchVersion":3,"patchTotal":56},"messages":[{"id":"262037","messageId":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":null,"subject":"[PATCH v3 00/56] Convert parts of refs.c to struct object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:26Z","receivedAt":"2015-05-25T18:38:26Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"This is a conversion of parts of refs.c to use struct object_id.\n\nrefs.c, and the for_each_ref series of functions explicitly, is the\nsource for many instances of object IDs in the codebase.  Therefore, it\nmakes sense to convert this series of functions to provide a basis for\nfurther conversions.\n\nChanges from v2:\n* Adopt Michael Haggerty's patch series that uses an adapter function.\n* Squash some of these patches together where it makes sense in order to\n  reduce the quantity of patches.\n\nThis does only slightly more than my original series, just in a\ndifferent way, with a larger number of much smaller patches.  If the\nquantity of patches is too large for people's tastes, I can do a v4\nbased off of v2 that has less of this problem.\n\nConverting most of the for_each_ref series of functions all at once is\nimportant to avoid confusing interface mismatches.  I intend to send\nsmaller patch series in the future to make reviewers' lives easier.\n\nThis passes the testsuite at each step and is based off of master.\n\nAlso available in branch oid-refs-adapter-squashed at:\n\n  https://git.crustytoothpaste.net/git/bmc/git.git\n  https://github.com/bk2204/git.git\n\nMichael Haggerty (55):\n  each_ref_fn: change to take an object_id parameter\n  builtin/rev-parse: rewrite to take an object_id argument\n  handle_one_ref(): rewrite to take an object_id argument\n  register_ref(): rewrite to take an object_id argument\n  append_ref(): rewrite to take an object_id argument\n  add_pending_uninteresting_ref(): rewrite to take an object_id argument\n  get_name(): rewrite to take an object_id argument\n  builtin/fetch: rewrite to take an object_id argument\n  grab_single_ref(): rewrite to take an object_id argument\n  name_ref(): rewrite to take an object_id argument\n  builtin/pack-objects: rewrite to take an object_id argument\n  show_ref_cb(): rewrite to take an object_id argument\n  builtin/reflog: rewrite ref functions to take an object_id argument\n  add_branch_for_removal(): rewrite to take an object_id argument\n  add_branch_for_removal(): don't set \"util\" field of string_list\n    entries\n  builtin/remote: rewrite functions to take object_id arguments\n  show_reference(): rewrite to take an object_id argument\n  append_matching_ref(): rewrite to take an object_id argument\n  builtin/show-branch: rewrite functions to take object_id arguments\n  append_one_rev(): rewrite to work with object_id\n  builtin/show-branch: rewrite functions to work with object_id\n  cmd_show_branch(): fix error message\n  fsck: change functions to use object_id\n  builtin/show-ref: rewrite to use object_id\n  show_ref(): convert local variable peeled to object_id\n  builtin/show-ref: rewrite to take an object_id argument\n  append_similar_ref(): rewrite to take an object_id argument\n  http-backend: rewrite to take an object_id argument\n  show_head_ref(): convert local variable \"unused\" to object_id\n  add_ref_decoration(): rewrite to take an object_id argument\n  add_ref_decoration(): convert local variable original_sha1 to\n    object_id\n  string_list_add_one_ref(): rewrite to take an object_id argument\n  add_one_ref(): rewrite to take an object_id argument\n  remote: rewrite functions to take object_id arguments\n  register_replace_ref(): rewrite to take an object_id argument\n  handle_one_reflog(): rewrite to take an object_id argument\n  add_info_ref(): rewrite to take an object_id argument\n  handle_one_ref(): rewrite to take an object_id argument\n  shallow: rewrite functions to take object_id arguments\n  submodule: rewrite to take an object_id argument\n  write_refs_to_temp_dir(): convert local variable sha1 to object_id\n  write_one_ref(): rewrite to take an object_id argument\n  find_symref(): rewrite to take an object_id argument\n  find_symref(): convert local variable \"unused\" to object_id\n  upload-pack: rewrite functions to take object_id arguments\n  send_ref(): convert local variable \"peeled\" to object_id\n  mark_complete(): rewrite to take an object_id argument\n  clear_marks(): rewrite to take an object_id argument\n  mark_complete_oid(): new function, taking an object_oid\n  mark_complete(): remove unneeded arguments\n  rev_list_insert_ref_oid(): new function, taking an object_oid\n  rev_list_insert_ref(): remove unneeded arguments\n  each_ref_fn_adapter(): remove adapter\n  warn_if_dangling_symref(): convert local variable \"junk\" to object_id\n  struct ref_lock: convert old_sha1 member to object_id\n\nbrian m. carlson (1):\n  refs: convert struct ref_entry to use struct object_id\n\n Documentation/technical/api-ref-iteration.txt |   2 +-\n bisect.c                                      |   8 +-\n builtin/branch.c                              |   4 +-\n builtin/checkout.c                            |   4 +-\n builtin/describe.c                            |  12 +--\n builtin/fetch.c                               |  15 ++--\n builtin/for-each-ref.c                        |   5 +-\n builtin/fsck.c                                |  20 ++---\n builtin/name-rev.c                            |   6 +-\n builtin/pack-objects.c                        |  14 ++--\n builtin/receive-pack.c                        |   5 +-\n builtin/reflog.c                              |   9 ++-\n builtin/remote.c                              |  21 +++---\n builtin/replace.c                             |  16 ++--\n builtin/rev-parse.c                           |   8 +-\n builtin/show-branch.c                         |  73 ++++++++++--------\n builtin/show-ref.c                            |  28 +++----\n builtin/tag.c                                 |  18 ++---\n fetch-pack.c                                  |  29 +++++--\n help.c                                        |   2 +-\n http-backend.c                                |  18 ++---\n log-tree.c                                    |  12 +--\n notes.c                                       |   2 +-\n reachable.c                                   |   5 +-\n refs.c                                        | 104 +++++++++++++-------------\n refs.h                                        |   2 +-\n remote.c                                      |  13 ++--\n replace_object.c                              |   4 +-\n revision.c                                    |  11 ++-\n server-info.c                                 |   7 +-\n sha1_name.c                                   |   7 +-\n shallow.c                                     |  12 +--\n submodule.c                                   |   7 +-\n transport.c                                   |  14 ++--\n upload-pack.c                                 |  32 ++++----\n walker.c                                      |   6 +-\n 36 files changed, 300 insertions(+), 255 deletions(-)\n\n-- \n2.4.0\n"},{"id":"262036","messageId":"1432579162-411464-2-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 01/56] refs: convert struct ref_entry to use struct object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:27Z","receivedAt":"2015-05-25T18:38:27Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\n---\n refs.c | 44 ++++++++++++++++++++++----------------------\n 1 file changed, 22 insertions(+), 22 deletions(-)\n\ndiff --git a/refs.c b/refs.c\nindex 8480d8d..9ca4651 100644\n--- a/refs.c\n+++ b/refs.c\n@@ -161,7 +161,7 @@ struct ref_value {\n \t * null.  If REF_ISSYMREF, then this is the name of the object\n \t * referred to by the last reference in the symlink chain.\n \t */\n-\tunsigned char sha1[20];\n+\tstruct object_id oid;\n \n \t/*\n \t * If REF_KNOWS_PEELED, then this field holds the peeled value\n@@ -169,7 +169,7 @@ struct ref_value {\n \t * be peelable.  See the documentation for peel_ref() for an\n \t * exact definition of \"peelable\".\n \t */\n-\tunsigned char peeled[20];\n+\tstruct object_id peeled;\n };\n \n struct ref_cache;\n@@ -351,8 +351,8 @@ static struct ref_entry *create_ref_entry(const char *refname,\n \t\tdie(\"Reference has invalid format: '%s'\", refname);\n \tlen = strlen(refname) + 1;\n \tref = xmalloc(sizeof(struct ref_entry) + len);\n-\thashcpy(ref->u.value.sha1, sha1);\n-\thashclr(ref->u.value.peeled);\n+\thashcpy(ref->u.value.oid.hash, sha1);\n+\toidclr(&ref->u.value.peeled);\n \tmemcpy(ref->name, refname, len);\n \tref->flag = flag;\n \treturn ref;\n@@ -626,7 +626,7 @@ static int is_dup_ref(const struct ref_entry *ref1, const struct ref_entry *ref2\n \t\t/* This is impossible by construction */\n \t\tdie(\"Reference directory conflict: %s\", ref1->name);\n \n-\tif (hashcmp(ref1->u.value.sha1, ref2->u.value.sha1))\n+\tif (oidcmp(&ref1->u.value.oid, &ref2->u.value.oid))\n \t\tdie(\"Duplicated ref, and SHA1s don't match: %s\", ref1->name);\n \n \twarning(\"Duplicated ref: %s\", ref1->name);\n@@ -674,7 +674,7 @@ static int ref_resolves_to_object(struct ref_entry *entry)\n {\n \tif (entry->flag & REF_ISBROKEN)\n \t\treturn 0;\n-\tif (!has_sha1_file(entry->u.value.sha1)) {\n+\tif (!has_sha1_file(entry->u.value.oid.hash)) {\n \t\terror(\"%s does not point to a valid object!\", entry->name);\n \t\treturn 0;\n \t}\n@@ -722,7 +722,7 @@ static int do_one_ref(struct ref_entry *entry, void *cb_data)\n \t/* Store the old value, in case this is a recursive call: */\n \told_current_ref = current_ref;\n \tcurrent_ref = entry;\n-\tretval = data->fn(entry->name + data->trim, entry->u.value.sha1,\n+\tretval = data->fn(entry->name + data->trim, entry->u.value.oid.hash,\n \t\t\t  entry->flag, data->cb_data);\n \tcurrent_ref = old_current_ref;\n \treturn retval;\n@@ -1258,7 +1258,7 @@ static void read_packed_refs(FILE *f, struct ref_dir *dir)\n \t\t    line.len == PEELED_LINE_LENGTH &&\n \t\t    line.buf[PEELED_LINE_LENGTH - 1] == '\\n' &&\n \t\t    !get_sha1_hex(line.buf + 1, sha1)) {\n-\t\t\thashcpy(last->u.value.peeled, sha1);\n+\t\t\thashcpy(last->u.value.peeled.hash, sha1);\n \t\t\t/*\n \t\t\t * Regardless of what the file header said,\n \t\t\t * we definitely know the value of *this*\n@@ -1439,7 +1439,7 @@ static int resolve_gitlink_packed_ref(struct ref_cache *refs,\n \tif (ref == NULL)\n \t\treturn -1;\n \n-\thashcpy(sha1, ref->u.value.sha1);\n+\thashcpy(sha1, ref->u.value.oid.hash);\n \treturn 0;\n }\n \n@@ -1526,7 +1526,7 @@ static int resolve_missing_loose_ref(const char *refname,\n \t */\n \tentry = get_packed_ref(refname);\n \tif (entry) {\n-\t\thashcpy(sha1, entry->u.value.sha1);\n+\t\thashcpy(sha1, entry->u.value.oid.hash);\n \t\tif (flags)\n \t\t\t*flags |= REF_ISPACKED;\n \t\treturn 0;\n@@ -1836,9 +1836,9 @@ static enum peel_status peel_entry(struct ref_entry *entry, int repeel)\n \tif (entry->flag & REF_KNOWS_PEELED) {\n \t\tif (repeel) {\n \t\t\tentry->flag &= ~REF_KNOWS_PEELED;\n-\t\t\thashclr(entry->u.value.peeled);\n+\t\t\toidclr(&entry->u.value.peeled);\n \t\t} else {\n-\t\t\treturn is_null_sha1(entry->u.value.peeled) ?\n+\t\t\treturn is_null_oid(&entry->u.value.peeled) ?\n \t\t\t\tPEEL_NON_TAG : PEEL_PEELED;\n \t\t}\n \t}\n@@ -1847,7 +1847,7 @@ static enum peel_status peel_entry(struct ref_entry *entry, int repeel)\n \tif (entry->flag & REF_ISSYMREF)\n \t\treturn PEEL_IS_SYMREF;\n \n-\tstatus = peel_object(entry->u.value.sha1, entry->u.value.peeled);\n+\tstatus = peel_object(entry->u.value.oid.hash, entry->u.value.peeled.hash);\n \tif (status == PEEL_PEELED || status == PEEL_NON_TAG)\n \t\tentry->flag |= REF_KNOWS_PEELED;\n \treturn status;\n@@ -1862,7 +1862,7 @@ int peel_ref(const char *refname, unsigned char *sha1)\n \t\t\t    || !strcmp(current_ref->name, refname))) {\n \t\tif (peel_entry(current_ref, 0))\n \t\t\treturn -1;\n-\t\thashcpy(sha1, current_ref->u.value.peeled);\n+\t\thashcpy(sha1, current_ref->u.value.peeled.hash);\n \t\treturn 0;\n \t}\n \n@@ -1882,7 +1882,7 @@ int peel_ref(const char *refname, unsigned char *sha1)\n \t\tif (r) {\n \t\t\tif (peel_entry(r, 0))\n \t\t\t\treturn -1;\n-\t\t\thashcpy(sha1, r->u.value.peeled);\n+\t\t\thashcpy(sha1, r->u.value.peeled.hash);\n \t\t\treturn 0;\n \t\t}\n \t}\n@@ -2496,9 +2496,9 @@ static int write_packed_entry_fn(struct ref_entry *entry, void *cb_data)\n \tif (peel_status != PEEL_PEELED && peel_status != PEEL_NON_TAG)\n \t\terror(\"internal error: %s is not a valid packed reference!\",\n \t\t      entry->name);\n-\twrite_packed_entry(cb_data, entry->name, entry->u.value.sha1,\n+\twrite_packed_entry(cb_data, entry->name, entry->u.value.oid.hash,\n \t\t\t   peel_status == PEEL_PEELED ?\n-\t\t\t   entry->u.value.peeled : NULL);\n+\t\t\t   entry->u.value.peeled.hash : NULL);\n \treturn 0;\n }\n \n@@ -2615,24 +2615,24 @@ static int pack_if_possible_fn(struct ref_entry *entry, void *cb_data)\n \tpeel_status = peel_entry(entry, 1);\n \tif (peel_status != PEEL_PEELED && peel_status != PEEL_NON_TAG)\n \t\tdie(\"internal error peeling reference %s (%s)\",\n-\t\t    entry->name, sha1_to_hex(entry->u.value.sha1));\n+\t\t    entry->name, oid_to_hex(&entry->u.value.oid));\n \tpacked_entry = find_ref(cb->packed_refs, entry->name);\n \tif (packed_entry) {\n \t\t/* Overwrite existing packed entry with info from loose entry */\n \t\tpacked_entry->flag = REF_ISPACKED | REF_KNOWS_PEELED;\n-\t\thashcpy(packed_entry->u.value.sha1, entry->u.value.sha1);\n+\t\toidcpy(&packed_entry->u.value.oid, &entry->u.value.oid);\n \t} else {\n-\t\tpacked_entry = create_ref_entry(entry->name, entry->u.value.sha1,\n+\t\tpacked_entry = create_ref_entry(entry->name, entry->u.value.oid.hash,\n \t\t\t\t\t\tREF_ISPACKED | REF_KNOWS_PEELED, 0);\n \t\tadd_ref(cb->packed_refs, packed_entry);\n \t}\n-\thashcpy(packed_entry->u.value.peeled, entry->u.value.peeled);\n+\toidcpy(&packed_entry->u.value.peeled, &entry->u.value.peeled);\n \n \t/* Schedule the loose reference for pruning if requested. */\n \tif ((cb->flags & PACK_REFS_PRUNE)) {\n \t\tint namelen = strlen(entry->name) + 1;\n \t\tstruct ref_to_prune *n = xcalloc(1, sizeof(*n) + namelen);\n-\t\thashcpy(n->sha1, entry->u.value.sha1);\n+\t\thashcpy(n->sha1, entry->u.value.oid.hash);\n \t\tstrcpy(n->name, entry->name);\n \t\tn->next = cb->ref_to_prune;\n \t\tcb->ref_to_prune = n;\n-- \n2.4.0\n"},{"id":"262092","messageId":"1432579162-411464-3-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 02/56] each_ref_fn: change to take an object_id parameter","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:28Z","receivedAt":"2015-05-25T18:38:28Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nChange typedef each_ref_fn to take a \"const struct object_id *oid\"\nparameter instead of \"const unsigned char *sha1\".\n\nTo aid this transition, implement an adapter that can be used to wrap\nold-style functions matching the old typedef, which is now called\n\"each_ref_sha1_fn\"), and make such functions callable via the new\ninterface. This requires the old function and its cb_data to be\nwrapped in a \"struct each_ref_fn_sha1_adapter\", and that object to be\nused as the cb_data for an adapter function, each_ref_fn_adapter().\n\nThis is an enormous diff, but most of it consists of simple,\nmechanical changes to the sites that call any of the \"for_each_ref\"\nfamily of functions. Subsequent to this change, the call sites can be\nrewritten one by one to use the new interface.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n Documentation/technical/api-ref-iteration.txt |  2 +-\n bisect.c                                      |  5 +++-\n builtin/branch.c                              |  4 ++-\n builtin/checkout.c                            |  4 ++-\n builtin/describe.c                            |  4 ++-\n builtin/fetch.c                               |  8 +++--\n builtin/for-each-ref.c                        |  4 ++-\n builtin/fsck.c                                |  9 ++++--\n builtin/name-rev.c                            |  4 ++-\n builtin/pack-objects.c                        | 12 ++++++--\n builtin/receive-pack.c                        |  5 +++-\n builtin/reflog.c                              |  9 ++++--\n builtin/remote.c                              | 13 +++++++--\n builtin/replace.c                             |  4 ++-\n builtin/rev-parse.c                           | 33 ++++++++++++---------\n builtin/show-branch.c                         | 15 ++++++++--\n builtin/show-ref.c                            | 11 +++++--\n builtin/tag.c                                 |  4 ++-\n fetch-pack.c                                  | 17 ++++++++---\n help.c                                        |  4 ++-\n http-backend.c                                |  9 ++++--\n log-tree.c                                    |  7 +++--\n notes.c                                       |  5 +++-\n reachable.c                                   |  6 ++--\n refs.c                                        | 42 +++++++++++++++++----------\n refs.h                                        | 13 ++++++++-\n remote.c                                      | 10 +++++--\n replace_object.c                              |  4 ++-\n revision.c                                    | 33 +++++++++++++++++----\n server-info.c                                 |  5 +++-\n sha1_name.c                                   |  5 +++-\n shallow.c                                     | 19 ++++++++----\n submodule.c                                   | 15 ++++++++--\n transport.c                                   |  5 +++-\n upload-pack.c                                 | 18 ++++++++----\n walker.c                                      |  5 +++-\n 36 files changed, 275 insertions(+), 97 deletions(-)\n\ndiff --git a/Documentation/technical/api-ref-iteration.txt b/Documentation/technical/api-ref-iteration.txt\nindex 02adfd4..37379d8 100644\n--- a/Documentation/technical/api-ref-iteration.txt\n+++ b/Documentation/technical/api-ref-iteration.txt\n@@ -6,7 +6,7 @@ Iteration of refs is done by using an iterate function which will call a\n callback function for every ref. The callback function has this\n signature:\n \n-\tint handle_one_ref(const char *refname, const unsigned char *sha1,\n+\tint handle_one_ref(const char *refname, const struct object_id *oid,\n \t\t\t   int flags, void *cb_data);\n \n There are different kinds of iterate functions which all take a\ndiff --git a/bisect.c b/bisect.c\nindex 10f5e57..0848d91 100644\n--- a/bisect.c\n+++ b/bisect.c\n@@ -417,7 +417,10 @@ static int register_ref(const char *refname, const unsigned char *sha1,\n \n static int read_bisect_refs(void)\n {\n-\treturn for_each_ref_in(\"refs/bisect/\", register_ref, NULL);\n+\tstruct each_ref_fn_sha1_adapter wrapped_register_ref =\n+\t\t{register_ref, NULL};\n+\n+\treturn for_each_ref_in(\"refs/bisect/\", each_ref_fn_adapter, &wrapped_register_ref);\n }\n \n static void read_bisect_paths(struct argv_array *array)\ndiff --git a/builtin/branch.c b/builtin/branch.c\nindex 9cbab18..b27adcb 100644\n--- a/builtin/branch.c\n+++ b/builtin/branch.c\n@@ -631,6 +631,8 @@ static int print_ref_list(int kinds, int detached, int verbose, int abbrev, stru\n \tint i;\n \tstruct append_ref_cb cb;\n \tstruct ref_list ref_list;\n+\tstruct each_ref_fn_sha1_adapter wrapped_append_ref =\n+\t\t{append_ref, &cb};\n \n \tmemset(&ref_list, 0, sizeof(ref_list));\n \tref_list.kinds = kinds;\n@@ -642,7 +644,7 @@ static int print_ref_list(int kinds, int detached, int verbose, int abbrev, stru\n \tcb.ref_list = &ref_list;\n \tcb.pattern = pattern;\n \tcb.ret = 0;\n-\tfor_each_rawref(append_ref, &cb);\n+\tfor_each_rawref(each_ref_fn_adapter, &wrapped_append_ref);\n \tif (merge_filter != NO_FILTER) {\n \t\tstruct commit *filter;\n \t\tfilter = lookup_commit_reference_gently(merge_filter_ref, 0);\ndiff --git a/builtin/checkout.c b/builtin/checkout.c\nindex 2f92328..9416aa2 100644\n--- a/builtin/checkout.c\n+++ b/builtin/checkout.c\n@@ -784,6 +784,8 @@ static void orphaned_commit_warning(struct commit *old, struct commit *new)\n \tstruct rev_info revs;\n \tstruct object *object = &old->object;\n \tstruct object_array refs;\n+\tstruct each_ref_fn_sha1_adapter wrapped_add_pending_uninteresting_ref =\n+\t\t{add_pending_uninteresting_ref, &revs};\n \n \tinit_revisions(&revs, NULL);\n \tsetup_revisions(0, NULL, &revs, NULL);\n@@ -791,7 +793,7 @@ static void orphaned_commit_warning(struct commit *old, struct commit *new)\n \tobject->flags &= ~UNINTERESTING;\n \tadd_pending_object(&revs, object, sha1_to_hex(object->sha1));\n \n-\tfor_each_ref(add_pending_uninteresting_ref, &revs);\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_pending_uninteresting_ref);\n \tadd_pending_sha1(&revs, \"HEAD\", new->object.sha1, UNINTERESTING);\n \n \trefs = revs.pending;\ndiff --git a/builtin/describe.c b/builtin/describe.c\nindex e00a75b..7d0c855 100644\n--- a/builtin/describe.c\n+++ b/builtin/describe.c\n@@ -413,6 +413,8 @@ int cmd_describe(int argc, const char **argv, const char *prefix)\n \t\t\tPARSE_OPT_OPTARG, NULL, (intptr_t) \"-dirty\"},\n \t\tOPT_END(),\n \t};\n+\tstruct each_ref_fn_sha1_adapter wrapped_get_name =\n+\t\t{get_name, NULL};\n \n \tgit_config(git_default_config, NULL);\n \targc = parse_options(argc, argv, prefix, options, describe_usage, 0);\n@@ -451,7 +453,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)\n \t}\n \n \thashmap_init(&names, (hashmap_cmp_fn) commit_name_cmp, 0);\n-\tfor_each_rawref(get_name, NULL);\n+\tfor_each_rawref(each_ref_fn_adapter, &wrapped_get_name);\n \tif (!names.size && !always)\n \t\tdie(_(\"No names found, cannot describe anything.\"));\n \ndiff --git a/builtin/fetch.c b/builtin/fetch.c\nindex 7910419..4878c3d 100644\n--- a/builtin/fetch.c\n+++ b/builtin/fetch.c\n@@ -208,8 +208,10 @@ static void find_non_local_tags(struct transport *transport,\n \tstruct string_list remote_refs = STRING_LIST_INIT_NODUP;\n \tconst struct ref *ref;\n \tstruct string_list_item *item = NULL;\n+\tstruct each_ref_fn_sha1_adapter wrapped_add_existing =\n+\t\t{add_existing, &existing_refs};\n \n-\tfor_each_ref(add_existing, &existing_refs);\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_existing);\n \tfor (ref = transport_get_remote_refs(transport); ref; ref = ref->next) {\n \t\tif (!starts_with(ref->name, \"refs/tags/\"))\n \t\t\tcontinue;\n@@ -884,8 +886,10 @@ static int do_fetch(struct transport *transport,\n \tstruct ref *rm;\n \tint autotags = (transport->remote->fetch_tags == 1);\n \tint retcode = 0;\n+\tstruct each_ref_fn_sha1_adapter wrapped_add_existing =\n+\t\t{add_existing, &existing_refs};\n \n-\tfor_each_ref(add_existing, &existing_refs);\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_existing);\n \n \tif (tags == TAGS_DEFAULT) {\n \t\tif (transport->remote->fetch_tags == 2)\ndiff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c\nindex 83f9cf9..caccd93 100644\n--- a/builtin/for-each-ref.c\n+++ b/builtin/for-each-ref.c\n@@ -1072,6 +1072,8 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)\n \tint maxcount = 0, quote_style = 0;\n \tstruct refinfo **refs;\n \tstruct grab_ref_cbdata cbdata;\n+\tstruct each_ref_fn_sha1_adapter wrapped_grab_single_ref =\n+\t\t{grab_single_ref, &cbdata};\n \n \tstruct option opts[] = {\n \t\tOPT_BIT('s', \"shell\", &quote_style,\n@@ -1111,7 +1113,7 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)\n \n \tmemset(&cbdata, 0, sizeof(cbdata));\n \tcbdata.grab_pattern = argv;\n-\tfor_each_rawref(grab_single_ref, &cbdata);\n+\tfor_each_rawref(each_ref_fn_adapter, &wrapped_grab_single_ref);\n \trefs = cbdata.grab_array;\n \tnum_refs = cbdata.grab_cnt;\n \ndiff --git a/builtin/fsck.c b/builtin/fsck.c\nindex 4783896..48d0c2e 100644\n--- a/builtin/fsck.c\n+++ b/builtin/fsck.c\n@@ -504,11 +504,16 @@ static int fsck_handle_ref(const char *refname, const unsigned char *sha1, int f\n \n static void get_default_heads(void)\n {\n+\tstruct each_ref_fn_sha1_adapter wrapped_fsck_handle_ref =\n+\t\t{fsck_handle_ref, NULL};\n+\tstruct each_ref_fn_sha1_adapter wrapped_fsck_handle_reflog =\n+\t\t{fsck_handle_reflog, NULL};\n+\n \tif (head_points_at && !is_null_sha1(head_sha1))\n \t\tfsck_handle_ref(\"HEAD\", head_sha1, 0, NULL);\n-\tfor_each_rawref(fsck_handle_ref, NULL);\n+\tfor_each_rawref(each_ref_fn_adapter, &wrapped_fsck_handle_ref);\n \tif (include_reflogs)\n-\t\tfor_each_reflog(fsck_handle_reflog, NULL);\n+\t\tfor_each_reflog(each_ref_fn_adapter, &wrapped_fsck_handle_reflog);\n \n \t/*\n \t * Not having any default heads isn't really fatal, but\ndiff --git a/builtin/name-rev.c b/builtin/name-rev.c\nindex 9736d44..41bdf0a 100644\n--- a/builtin/name-rev.c\n+++ b/builtin/name-rev.c\n@@ -305,6 +305,8 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)\n \tstruct object_array revs = OBJECT_ARRAY_INIT;\n \tint all = 0, transform_stdin = 0, allow_undefined = 1, always = 0, peel_tag = 0;\n \tstruct name_ref_data data = { 0, 0, NULL };\n+\tstruct each_ref_fn_sha1_adapter wrapped_name_ref =\n+\t\t{name_ref, &data};\n \tstruct option opts[] = {\n \t\tOPT_BOOL(0, \"name-only\", &data.name_only, N_(\"print only names (no SHA-1)\")),\n \t\tOPT_BOOL(0, \"tags\", &data.tags_only, N_(\"only use tags to name the commits\")),\n@@ -377,7 +379,7 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)\n \n \tif (cutoff)\n \t\tcutoff = cutoff - CUTOFF_DATE_SLOP;\n-\tfor_each_ref(name_ref, &data);\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_name_ref);\n \n \tif (transform_stdin) {\n \t\tchar buffer[2048];\ndiff --git a/builtin/pack-objects.c b/builtin/pack-objects.c\nindex c067107..81f0e57 100644\n--- a/builtin/pack-objects.c\n+++ b/builtin/pack-objects.c\n@@ -626,6 +626,8 @@ static struct object_entry **compute_write_order(void)\n \n \tstruct object_entry **wo = xmalloc(to_pack.nr_objects * sizeof(*wo));\n \tstruct object_entry *objects = to_pack.objects;\n+\tstruct each_ref_fn_sha1_adapter wrapped_mark_tagged =\n+\t\t{mark_tagged, NULL};\n \n \tfor (i = 0; i < to_pack.nr_objects; i++) {\n \t\tobjects[i].tagged = 0;\n@@ -651,7 +653,7 @@ static struct object_entry **compute_write_order(void)\n \t/*\n \t * Mark objects that are at the tip of tags.\n \t */\n-\tfor_each_tag_ref(mark_tagged, NULL);\n+\tfor_each_tag_ref(each_ref_fn_adapter, &wrapped_mark_tagged);\n \n \t/*\n \t * Give the objects in the original recency order until\n@@ -2784,8 +2786,12 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)\n \t\targv_array_clear(&rp);\n \t}\n \tcleanup_preferred_base();\n-\tif (include_tag && nr_result)\n-\t\tfor_each_ref(add_ref_tag, NULL);\n+\tif (include_tag && nr_result) {\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_add_ref_tag =\n+\t\t\t{add_ref_tag, NULL};\n+\n+\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_ref_tag);\n+\t}\n \tstop_progress(&progress_state);\n \n \tif (non_empty && !nr_result)\ndiff --git a/builtin/receive-pack.c b/builtin/receive-pack.c\nindex d2ec52b..12ecacd 100644\n--- a/builtin/receive-pack.c\n+++ b/builtin/receive-pack.c\n@@ -228,10 +228,13 @@ static void collect_one_alternate_ref(const struct ref *ref, void *data)\n static void write_head_info(void)\n {\n \tstruct sha1_array sa = SHA1_ARRAY_INIT;\n+\tstruct each_ref_fn_sha1_adapter wrapped_show_ref_cb =\n+\t\t{show_ref_cb, NULL};\n+\n \tfor_each_alternate_ref(collect_one_alternate_ref, &sa);\n \tsha1_array_for_each_unique(&sa, show_one_alternate_sha1, NULL);\n \tsha1_array_clear(&sa);\n-\tfor_each_ref(show_ref_cb, NULL);\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_show_ref_cb);\n \tif (!sent_capabilities)\n \t\tshow_ref(\"capabilities^{}\", null_sha1);\n \ndiff --git a/builtin/reflog.c b/builtin/reflog.c\nindex 8182b64..1163dd6 100644\n--- a/builtin/reflog.c\n+++ b/builtin/reflog.c\n@@ -352,7 +352,10 @@ static void reflog_expiry_prepare(const char *refname,\n \tif (cb->unreachable_expire_kind != UE_ALWAYS) {\n \t\tif (cb->unreachable_expire_kind == UE_HEAD) {\n \t\t\tstruct commit_list *elem;\n-\t\t\tfor_each_ref(push_tip_to_list, &cb->tips);\n+\t\t\tstruct each_ref_fn_sha1_adapter wrapped_push_tip_to_list =\n+\t\t\t\t{push_tip_to_list, &cb->tips};\n+\n+\t\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_push_tip_to_list);\n \t\t\tfor (elem = cb->tips; elem; elem = elem->next)\n \t\t\t\tcommit_list_insert(elem->item, &cb->mark_list);\n \t\t} else {\n@@ -588,9 +591,11 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)\n \tif (do_all) {\n \t\tstruct collect_reflog_cb collected;\n \t\tint i;\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_collect_reflog =\n+\t\t\t{collect_reflog, &collected};\n \n \t\tmemset(&collected, 0, sizeof(collected));\n-\t\tfor_each_reflog(collect_reflog, &collected);\n+\t\tfor_each_reflog(each_ref_fn_adapter, &wrapped_collect_reflog);\n \t\tfor (i = 0; i < collected.nr; i++) {\n \t\t\tstruct collected_reflog *e = collected.e[i];\n \t\t\tset_reflog_expiry_param(&cb.cmd, explicit_expiry, e->reflog);\ndiff --git a/builtin/remote.c b/builtin/remote.c\nindex ad57fc9..27a611b 100644\n--- a/builtin/remote.c\n+++ b/builtin/remote.c\n@@ -623,6 +623,8 @@ static int mv(int argc, const char **argv)\n \tstruct string_list remote_branches = STRING_LIST_INIT_NODUP;\n \tstruct rename_info rename;\n \tint i, refspec_updated = 0;\n+\tstruct each_ref_fn_sha1_adapter wrapped_read_remote_branches =\n+\t\t{read_remote_branches, &rename};\n \n \tif (argc != 3)\n \t\tusage_with_options(builtin_remote_rename_usage, options);\n@@ -700,7 +702,7 @@ static int mv(int argc, const char **argv)\n \t * First remove symrefs, then rename the rest, finally create\n \t * the new symrefs.\n \t */\n-\tfor_each_ref(read_remote_branches, &rename);\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_read_remote_branches);\n \tfor (i = 0; i < remote_branches.nr; i++) {\n \t\tstruct string_list_item *item = remote_branches.items + i;\n \t\tint flag = 0;\n@@ -781,6 +783,8 @@ static int rm(int argc, const char **argv)\n \tstruct string_list skipped = STRING_LIST_INIT_DUP;\n \tstruct branches_for_remote cb_data;\n \tint i, result;\n+\tstruct each_ref_fn_sha1_adapter wrapped_add_branch_for_removal =\n+\t\t{add_branch_for_removal, &cb_data};\n \n \tmemset(&cb_data, 0, sizeof(cb_data));\n \tcb_data.branches = &branches;\n@@ -821,7 +825,7 @@ static int rm(int argc, const char **argv)\n \t * refs, which are invalidated when deleting a branch.\n \t */\n \tcb_data.remote = remote;\n-\tresult = for_each_ref(add_branch_for_removal, &cb_data);\n+\tresult = for_each_ref(each_ref_fn_adapter, &wrapped_add_branch_for_removal);\n \tstrbuf_release(&buf);\n \n \tif (!result)\n@@ -910,7 +914,10 @@ static int get_remote_ref_states(const char *name,\n \t\tif (query & GET_PUSH_REF_STATES)\n \t\t\tget_push_ref_states(remote_refs, states);\n \t} else {\n-\t\tfor_each_ref(append_ref_to_tracked_list, states);\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_append_ref_to_tracked_list =\n+\t\t\t{append_ref_to_tracked_list, states};\n+\n+\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_append_ref_to_tracked_list);\n \t\tstring_list_sort(&states->tracked);\n \t\tget_push_ref_states_noquery(states);\n \t}\ndiff --git a/builtin/replace.c b/builtin/replace.c\nindex 54bf01a..bcf1508 100644\n--- a/builtin/replace.c\n+++ b/builtin/replace.c\n@@ -66,6 +66,8 @@ static int show_reference(const char *refname, const unsigned char *sha1,\n static int list_replace_refs(const char *pattern, const char *format)\n {\n \tstruct show_data data;\n+\tstruct each_ref_fn_sha1_adapter wrapped_show_reference =\n+\t\t{show_reference, (void *) &data};\n \n \tif (pattern == NULL)\n \t\tpattern = \"*\";\n@@ -82,7 +84,7 @@ static int list_replace_refs(const char *pattern, const char *format)\n \t\t    \"valid formats are 'short', 'medium' and 'long'\\n\",\n \t\t    format);\n \n-\tfor_each_replace_ref(show_reference, (void *) &data);\n+\tfor_each_replace_ref(each_ref_fn_adapter, &wrapped_show_reference);\n \n \treturn 0;\n }\ndiff --git a/builtin/rev-parse.c b/builtin/rev-parse.c\nindex 4d10dd9..e75ce75 100644\n--- a/builtin/rev-parse.c\n+++ b/builtin/rev-parse.c\n@@ -511,6 +511,10 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)\n \tunsigned int flags = 0;\n \tconst char *name = NULL;\n \tstruct object_context unused;\n+\tstruct each_ref_fn_sha1_adapter wrapped_show_reference =\n+\t\t{show_reference, NULL};\n+\tstruct each_ref_fn_sha1_adapter wrapped_anti_reference =\n+\t\t{anti_reference, NULL};\n \n \tif (argc > 1 && !strcmp(\"--parseopt\", argv[1]))\n \t\treturn cmd_parseopt(argc - 1, argv + 1, prefix);\n@@ -652,7 +656,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (!strcmp(arg, \"--all\")) {\n-\t\t\t\tfor_each_ref(show_reference, NULL);\n+\t\t\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_show_reference);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (starts_with(arg, \"--disambiguate=\")) {\n@@ -660,45 +664,48 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (!strcmp(arg, \"--bisect\")) {\n-\t\t\t\tfor_each_ref_in(\"refs/bisect/bad\", show_reference, NULL);\n-\t\t\t\tfor_each_ref_in(\"refs/bisect/good\", anti_reference, NULL);\n+\t\t\t\tfor_each_ref_in(\"refs/bisect/bad\",\n+\t\t\t\t\t\teach_ref_fn_adapter, &wrapped_show_reference);\n+\t\t\t\tfor_each_ref_in(\"refs/bisect/good\",\n+\t\t\t\t\t\teach_ref_fn_adapter, &wrapped_anti_reference);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (starts_with(arg, \"--branches=\")) {\n-\t\t\t\tfor_each_glob_ref_in(show_reference, arg + 11,\n-\t\t\t\t\t\"refs/heads/\", NULL);\n+\t\t\t\tfor_each_glob_ref_in(each_ref_fn_adapter, arg + 11,\n+\t\t\t\t\t\"refs/heads/\", &wrapped_show_reference);\n \t\t\t\tclear_ref_exclusion(&ref_excludes);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (!strcmp(arg, \"--branches\")) {\n-\t\t\t\tfor_each_branch_ref(show_reference, NULL);\n+\t\t\t\tfor_each_branch_ref(each_ref_fn_adapter, &wrapped_show_reference);\n \t\t\t\tclear_ref_exclusion(&ref_excludes);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (starts_with(arg, \"--tags=\")) {\n-\t\t\t\tfor_each_glob_ref_in(show_reference, arg + 7,\n-\t\t\t\t\t\"refs/tags/\", NULL);\n+\t\t\t\tfor_each_glob_ref_in(each_ref_fn_adapter, arg + 7,\n+\t\t\t\t\t\"refs/tags/\", &wrapped_show_reference);\n \t\t\t\tclear_ref_exclusion(&ref_excludes);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (!strcmp(arg, \"--tags\")) {\n-\t\t\t\tfor_each_tag_ref(show_reference, NULL);\n+\t\t\t\tfor_each_tag_ref(each_ref_fn_adapter, &wrapped_show_reference);\n \t\t\t\tclear_ref_exclusion(&ref_excludes);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (starts_with(arg, \"--glob=\")) {\n-\t\t\t\tfor_each_glob_ref(show_reference, arg + 7, NULL);\n+\t\t\t\tfor_each_glob_ref(each_ref_fn_adapter, arg + 7,\n+\t\t\t\t\t\t  &wrapped_show_reference);\n \t\t\t\tclear_ref_exclusion(&ref_excludes);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (starts_with(arg, \"--remotes=\")) {\n-\t\t\t\tfor_each_glob_ref_in(show_reference, arg + 10,\n-\t\t\t\t\t\"refs/remotes/\", NULL);\n+\t\t\t\tfor_each_glob_ref_in(each_ref_fn_adapter, arg + 10,\n+\t\t\t\t\t\"refs/remotes/\", &wrapped_show_reference);\n \t\t\t\tclear_ref_exclusion(&ref_excludes);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (!strcmp(arg, \"--remotes\")) {\n-\t\t\t\tfor_each_remote_ref(show_reference, NULL);\n+\t\t\t\tfor_each_remote_ref(each_ref_fn_adapter, &wrapped_show_reference);\n \t\t\t\tclear_ref_exclusion(&ref_excludes);\n \t\t\t\tcontinue;\n \t\t\t}\ndiff --git a/builtin/show-branch.c b/builtin/show-branch.c\nindex e69fb7c..cf918f4 100644\n--- a/builtin/show-branch.c\n+++ b/builtin/show-branch.c\n@@ -466,12 +466,18 @@ static void snarf_refs(int head, int remotes)\n {\n \tif (head) {\n \t\tint orig_cnt = ref_name_cnt;\n-\t\tfor_each_ref(append_head_ref, NULL);\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_append_head_ref =\n+\t\t\t{append_head_ref, NULL};\n+\n+\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_append_head_ref);\n \t\tsort_ref_range(orig_cnt, ref_name_cnt);\n \t}\n \tif (remotes) {\n \t\tint orig_cnt = ref_name_cnt;\n-\t\tfor_each_ref(append_remote_ref, NULL);\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_append_remote_ref =\n+\t\t\t{append_remote_ref, NULL};\n+\n+\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_append_remote_ref);\n \t\tsort_ref_range(orig_cnt, ref_name_cnt);\n \t}\n }\n@@ -538,9 +544,12 @@ static void append_one_rev(const char *av)\n \tif (strchr(av, '*') || strchr(av, '?') || strchr(av, '[')) {\n \t\t/* glob style match */\n \t\tint saved_matches = ref_name_cnt;\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_append_matching_ref =\n+\t\t\t{append_matching_ref, NULL};\n+\n \t\tmatch_ref_pattern = av;\n \t\tmatch_ref_slash = count_slash(av);\n-\t\tfor_each_ref(append_matching_ref, NULL);\n+\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_append_matching_ref);\n \t\tif (saved_matches == ref_name_cnt &&\n \t\t    ref_name_cnt < MAX_REVS)\n \t\t\terror(\"no matching refs with %s\", av);\ndiff --git a/builtin/show-ref.c b/builtin/show-ref.c\nindex afb1030..8e25536 100644\n--- a/builtin/show-ref.c\n+++ b/builtin/show-ref.c\n@@ -109,8 +109,10 @@ static int exclude_existing(const char *match)\n \tstatic struct string_list existing_refs = STRING_LIST_INIT_DUP;\n \tchar buf[1024];\n \tint matchlen = match ? strlen(match) : 0;\n+\tstruct each_ref_fn_sha1_adapter wrapped_add_existing =\n+\t\t{add_existing, &existing_refs};\n \n-\tfor_each_ref(add_existing, &existing_refs);\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_existing);\n \twhile (fgets(buf, sizeof(buf), stdin)) {\n \t\tchar *ref;\n \t\tint len = strlen(buf);\n@@ -191,6 +193,9 @@ static const struct option show_ref_options[] = {\n \n int cmd_show_ref(int argc, const char **argv, const char *prefix)\n {\n+\tstruct each_ref_fn_sha1_adapter wrapped_show_ref =\n+\t\t{show_ref, NULL};\n+\n \tif (argc == 2 && !strcmp(argv[1], \"-h\"))\n \t\tusage_with_options(show_ref_usage, show_ref_options);\n \n@@ -225,8 +230,8 @@ int cmd_show_ref(int argc, const char **argv, const char *prefix)\n \t}\n \n \tif (show_head)\n-\t\thead_ref(show_ref, NULL);\n-\tfor_each_ref(show_ref, NULL);\n+\t\thead_ref(each_ref_fn_adapter, &wrapped_show_ref);\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_show_ref);\n \tif (!found_match) {\n \t\tif (verify && !quiet)\n \t\t\tdie(\"No match\");\ndiff --git a/builtin/tag.c b/builtin/tag.c\nindex 6f07ac6..7d8cd8c 100644\n--- a/builtin/tag.c\n+++ b/builtin/tag.c\n@@ -260,6 +260,8 @@ static int list_tags(const char **patterns, int lines,\n \t\t     struct commit_list *with_commit, int sort)\n {\n \tstruct tag_filter filter;\n+\tstruct each_ref_fn_sha1_adapter wrapped_show_reference =\n+\t\t{show_reference, (void *)&filter};\n \n \tfilter.patterns = patterns;\n \tfilter.lines = lines;\n@@ -268,7 +270,7 @@ static int list_tags(const char **patterns, int lines,\n \tmemset(&filter.tags, 0, sizeof(filter.tags));\n \tfilter.tags.strdup_strings = 1;\n \n-\tfor_each_tag_ref(show_reference, (void *) &filter);\n+\tfor_each_tag_ref(each_ref_fn_adapter, &wrapped_show_reference);\n \tif (sort) {\n \t\tint i;\n \t\tif ((sort & SORT_MASK) == VERCMP_SORT)\ndiff --git a/fetch-pack.c b/fetch-pack.c\nindex 48526aa..5380b1b 100644\n--- a/fetch-pack.c\n+++ b/fetch-pack.c\n@@ -256,14 +256,20 @@ static int find_common(struct fetch_pack_args *args,\n \tint got_ready = 0;\n \tstruct strbuf req_buf = STRBUF_INIT;\n \tsize_t state_len = 0;\n+\tstruct each_ref_fn_sha1_adapter wrapped_rev_list_insert_ref =\n+\t\t{rev_list_insert_ref, NULL};\n \n \tif (args->stateless_rpc && multi_ack == 1)\n \t\tdie(\"--stateless-rpc requires multi_ack_detailed\");\n-\tif (marked)\n-\t\tfor_each_ref(clear_marks, NULL);\n+\tif (marked) {\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_clear_marks =\n+\t\t\t{clear_marks, NULL};\n+\n+\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_clear_marks);\n+\t}\n \tmarked = 1;\n \n-\tfor_each_ref(rev_list_insert_ref, NULL);\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_rev_list_insert_ref);\n \tfor_each_alternate_ref(insert_one_alternate_ref, NULL);\n \n \tfetching = 0;\n@@ -599,7 +605,10 @@ static int everything_local(struct fetch_pack_args *args,\n \t}\n \n \tif (!args->depth) {\n-\t\tfor_each_ref(mark_complete, NULL);\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_mark_complete =\n+\t\t\t{mark_complete, NULL};\n+\n+\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_mark_complete);\n \t\tfor_each_alternate_ref(mark_alternate_complete, NULL);\n \t\tcommit_list_sort_by_date(&complete);\n \t\tif (cutoff)\ndiff --git a/help.c b/help.c\nindex 2072a87..f813093 100644\n--- a/help.c\n+++ b/help.c\n@@ -425,10 +425,12 @@ static struct string_list guess_refs(const char *ref)\n {\n \tstruct similar_ref_cb ref_cb;\n \tstruct string_list similar_refs = STRING_LIST_INIT_NODUP;\n+\tstruct each_ref_fn_sha1_adapter wrapped_append_similar_ref =\n+\t\t{append_similar_ref, &ref_cb};\n \n \tref_cb.base_ref = ref;\n \tref_cb.similar_refs = &similar_refs;\n-\tfor_each_ref(append_similar_ref, &ref_cb);\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_append_similar_ref);\n \treturn similar_refs;\n }\n \ndiff --git a/http-backend.c b/http-backend.c\nindex b6c0484..e4f3de3 100644\n--- a/http-backend.c\n+++ b/http-backend.c\n@@ -395,8 +395,11 @@ static void get_info_refs(char *arg)\n \t\trun_service(argv);\n \n \t} else {\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_show_text_ref =\n+\t\t\t{show_text_ref, &buf};\n+\n \t\tselect_getanyfile();\n-\t\tfor_each_namespaced_ref(show_text_ref, &buf);\n+\t\tfor_each_namespaced_ref(each_ref_fn_adapter, &wrapped_show_text_ref);\n \t\tsend_strbuf(\"text/plain\", &buf);\n \t}\n \tstrbuf_release(&buf);\n@@ -425,9 +428,11 @@ static int show_head_ref(const char *refname, const unsigned char *sha1,\n static void get_head(char *arg)\n {\n \tstruct strbuf buf = STRBUF_INIT;\n+\tstruct each_ref_fn_sha1_adapter wrapped_show_head_ref =\n+\t\t{show_head_ref, &buf};\n \n \tselect_getanyfile();\n-\thead_ref_namespaced(show_head_ref, &buf);\n+\thead_ref_namespaced(each_ref_fn_adapter, &wrapped_show_head_ref);\n \tsend_strbuf(\"text/plain\", &buf);\n \tstrbuf_release(&buf);\n }\ndiff --git a/log-tree.c b/log-tree.c\nindex 8dba7be..1a0e170 100644\n--- a/log-tree.c\n+++ b/log-tree.c\n@@ -149,10 +149,13 @@ static int add_graft_decoration(const struct commit_graft *graft, void *cb_data)\n void load_ref_decorations(int flags)\n {\n \tif (!decoration_loaded) {\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_add_ref_decoration =\n+\t\t\t{add_ref_decoration, NULL};\n+\n \t\tdecoration_loaded = 1;\n \t\tdecoration_flags = flags;\n-\t\tfor_each_ref(add_ref_decoration, NULL);\n-\t\thead_ref(add_ref_decoration, NULL);\n+\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_ref_decoration);\n+\t\thead_ref(each_ref_fn_adapter, &wrapped_add_ref_decoration);\n \t\tfor_each_commit_graft(add_graft_decoration, NULL);\n \t}\n }\ndiff --git a/notes.c b/notes.c\nindex 2be4d7f..baa1c41 100644\n--- a/notes.c\n+++ b/notes.c\n@@ -932,9 +932,12 @@ static int string_list_add_one_ref(const char *refname, const unsigned char *sha\n  */\n void string_list_add_refs_by_glob(struct string_list *list, const char *glob)\n {\n+\tstruct each_ref_fn_sha1_adapter wrapped_string_list_add_one_ref =\n+\t\t{string_list_add_one_ref, list};\n+\n \tassert(list->strdup_strings);\n \tif (has_glob_specials(glob)) {\n-\t\tfor_each_glob_ref(string_list_add_one_ref, glob, list);\n+\t\tfor_each_glob_ref(each_ref_fn_adapter, glob, &wrapped_string_list_add_one_ref);\n \t} else {\n \t\tunsigned char sha1[20];\n \t\tif (get_sha1(glob, sha1))\ndiff --git a/reachable.c b/reachable.c\nindex 69fa685..acac86a 100644\n--- a/reachable.c\n+++ b/reachable.c\n@@ -155,6 +155,8 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog,\n \t\t\t    struct progress *progress)\n {\n \tstruct connectivity_progress cp;\n+\tstruct each_ref_fn_sha1_adapter wrapped_add_one_ref =\n+\t\t{add_one_ref, revs};\n \n \t/*\n \t * Set up revision parsing, and mark us as being interested\n@@ -168,10 +170,10 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog,\n \tadd_index_objects_to_pending(revs, 0);\n \n \t/* Add all external refs */\n-\tfor_each_ref(add_one_ref, revs);\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_one_ref);\n \n \t/* detached HEAD is not included in the list above */\n-\thead_ref(add_one_ref, revs);\n+\thead_ref(each_ref_fn_adapter, &wrapped_add_one_ref);\n \n \t/* Add all reflog info */\n \tif (mark_reflog)\ndiff --git a/refs.c b/refs.c\nindex 9ca4651..43dce01 100644\n--- a/refs.c\n+++ b/refs.c\n@@ -722,7 +722,7 @@ static int do_one_ref(struct ref_entry *entry, void *cb_data)\n \t/* Store the old value, in case this is a recursive call: */\n \told_current_ref = current_ref;\n \tcurrent_ref = entry;\n-\tretval = data->fn(entry->name + data->trim, entry->u.value.oid.hash,\n+\tretval = data->fn(entry->name + data->trim, &entry->u.value.oid,\n \t\t\t  entry->flag, data->cb_data);\n \tcurrent_ref = old_current_ref;\n \treturn retval;\n@@ -1756,13 +1756,14 @@ int ref_exists(const char *refname)\n \treturn !!resolve_ref_unsafe(refname, RESOLVE_REF_READING, sha1, NULL);\n }\n \n-static int filter_refs(const char *refname, const unsigned char *sha1, int flags,\n-\t\t       void *data)\n+static int filter_refs(const char *refname, const struct object_id *oid,\n+\t\t       int flags, void *data)\n {\n \tstruct ref_filter *filter = (struct ref_filter *)data;\n+\n \tif (wildmatch(filter->pattern, refname, 0, NULL))\n \t\treturn 0;\n-\treturn filter->fn(refname, sha1, flags, filter->cb_data);\n+\treturn filter->fn(refname, oid, flags, filter->cb_data);\n }\n \n enum peel_status {\n@@ -1897,7 +1898,7 @@ struct warn_if_dangling_data {\n \tconst char *msg_fmt;\n };\n \n-static int warn_if_dangling_symref(const char *refname, const unsigned char *sha1,\n+static int warn_if_dangling_symref(const char *refname, const struct object_id *oid,\n \t\t\t\t   int flags, void *cb_data)\n {\n \tstruct warn_if_dangling_data *d = cb_data;\n@@ -2027,18 +2028,18 @@ static int do_for_each_ref(struct ref_cache *refs, const char *base,\n \n static int do_head_ref(const char *submodule, each_ref_fn fn, void *cb_data)\n {\n-\tunsigned char sha1[20];\n+\tstruct object_id oid;\n \tint flag;\n \n \tif (submodule) {\n-\t\tif (resolve_gitlink_ref(submodule, \"HEAD\", sha1) == 0)\n-\t\t\treturn fn(\"HEAD\", sha1, 0, cb_data);\n+\t\tif (resolve_gitlink_ref(submodule, \"HEAD\", oid.hash) == 0)\n+\t\t\treturn fn(\"HEAD\", &oid, 0, cb_data);\n \n \t\treturn 0;\n \t}\n \n-\tif (!read_ref_full(\"HEAD\", RESOLVE_REF_READING, sha1, &flag))\n-\t\treturn fn(\"HEAD\", sha1, flag, cb_data);\n+\tif (!read_ref_full(\"HEAD\", RESOLVE_REF_READING, oid.hash, &flag))\n+\t\treturn fn(\"HEAD\", &oid, flag, cb_data);\n \n \treturn 0;\n }\n@@ -2113,12 +2114,12 @@ int head_ref_namespaced(each_ref_fn fn, void *cb_data)\n {\n \tstruct strbuf buf = STRBUF_INIT;\n \tint ret = 0;\n-\tunsigned char sha1[20];\n+\tstruct object_id oid;\n \tint flag;\n \n \tstrbuf_addf(&buf, \"%sHEAD\", get_git_namespace());\n-\tif (!read_ref_full(buf.buf, RESOLVE_REF_READING, sha1, &flag))\n-\t\tret = fn(buf.buf, sha1, flag, cb_data);\n+\tif (!read_ref_full(buf.buf, RESOLVE_REF_READING, oid.hash, &flag))\n+\t\tret = fn(buf.buf, &oid, flag, cb_data);\n \tstrbuf_release(&buf);\n \n \treturn ret;\n@@ -2175,6 +2176,14 @@ int for_each_rawref(each_ref_fn fn, void *cb_data)\n \t\t\t       DO_FOR_EACH_INCLUDE_BROKEN, cb_data);\n }\n \n+int each_ref_fn_adapter(const char *refname,\n+\t\t\tconst struct object_id *oid, int flags, void *cb_data)\n+{\n+\tstruct each_ref_fn_sha1_adapter *cb = cb_data;\n+\n+\treturn cb->original_fn(refname, oid->hash, flags, cb->original_cb_data);\n+}\n+\n const char *prettify_refname(const char *name)\n {\n \treturn name + (\n@@ -3616,11 +3625,12 @@ static int do_for_each_reflog(struct strbuf *name, each_ref_fn fn, void *cb_data\n \t\t\t\tstrbuf_addch(name, '/');\n \t\t\t\tretval = do_for_each_reflog(name, fn, cb_data);\n \t\t\t} else {\n-\t\t\t\tunsigned char sha1[20];\n-\t\t\t\tif (read_ref_full(name->buf, 0, sha1, NULL))\n+\t\t\t\tstruct object_id oid;\n+\n+\t\t\t\tif (read_ref_full(name->buf, 0, oid.hash, NULL))\n \t\t\t\t\tretval = error(\"bad ref for %s\", name->buf);\n \t\t\t\telse\n-\t\t\t\t\tretval = fn(name->buf, sha1, 0, cb_data);\n+\t\t\t\t\tretval = fn(name->buf, &oid, 0, cb_data);\n \t\t\t}\n \t\t\tif (retval)\n \t\t\t\tbreak;\ndiff --git a/refs.h b/refs.h\nindex 6d7d9b4..4042109 100644\n--- a/refs.h\n+++ b/refs.h\n@@ -67,7 +67,18 @@ struct ref_transaction;\n  * single callback invocation.\n  */\n typedef int each_ref_fn(const char *refname,\n-\t\t\tconst unsigned char *sha1, int flags, void *cb_data);\n+\t\t\tconst struct object_id *oid, int flags, void *cb_data);\n+\n+typedef int each_ref_sha1_fn(const char *refname,\n+\t\t\t     const unsigned char *sha1, int flags, void *cb_data);\n+\n+struct each_ref_fn_sha1_adapter {\n+\teach_ref_sha1_fn *original_fn;\n+\tvoid *original_cb_data;\n+};\n+\n+extern int each_ref_fn_adapter(const char *refname,\n+\t\t\t       const struct object_id *oid, int flags, void *cb_data);\n \n /*\n  * The following functions invoke the specified callback function for\ndiff --git a/remote.c b/remote.c\nindex 68901b0..6d66ec1 100644\n--- a/remote.c\n+++ b/remote.c\n@@ -2046,7 +2046,10 @@ static int one_local_ref(const char *refname, const unsigned char *sha1, int fla\n struct ref *get_local_heads(void)\n {\n \tstruct ref *local_refs = NULL, **local_tail = &local_refs;\n-\tfor_each_ref(one_local_ref, &local_tail);\n+\tstruct each_ref_fn_sha1_adapter wrapped_one_local_ref =\n+\t\t{one_local_ref, &local_tail};\n+\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_one_local_ref);\n \treturn local_refs;\n }\n \n@@ -2141,6 +2144,9 @@ struct ref *get_stale_heads(struct refspec *refs, int ref_count, struct ref *fet\n \tstruct ref *ref, *stale_refs = NULL;\n \tstruct string_list ref_names = STRING_LIST_INIT_NODUP;\n \tstruct stale_heads_info info;\n+\tstruct each_ref_fn_sha1_adapter wrapped_get_stale_heads_cb =\n+\t\t{get_stale_heads_cb, &info};\n+\n \tinfo.ref_names = &ref_names;\n \tinfo.stale_refs_tail = &stale_refs;\n \tinfo.refs = refs;\n@@ -2148,7 +2154,7 @@ struct ref *get_stale_heads(struct refspec *refs, int ref_count, struct ref *fet\n \tfor (ref = fetch_map; ref; ref = ref->next)\n \t\tstring_list_append(&ref_names, ref->name);\n \tstring_list_sort(&ref_names);\n-\tfor_each_ref(get_stale_heads_cb, &info);\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_get_stale_heads_cb);\n \tstring_list_clear(&ref_names, 0);\n \treturn stale_refs;\n }\ndiff --git a/replace_object.c b/replace_object.c\nindex 0ab2dc1..a8a2da9 100644\n--- a/replace_object.c\n+++ b/replace_object.c\n@@ -80,11 +80,13 @@ static int register_replace_ref(const char *refname,\n static void prepare_replace_object(void)\n {\n \tstatic int replace_object_prepared;\n+\tstruct each_ref_fn_sha1_adapter wrapped_register_replace_ref =\n+\t\t{register_replace_ref, NULL};\n \n \tif (replace_object_prepared)\n \t\treturn;\n \n-\tfor_each_replace_ref(register_replace_ref, NULL);\n+\tfor_each_replace_ref(each_ref_fn_adapter, &wrapped_register_replace_ref);\n \treplace_object_prepared = 1;\n \tif (!replace_object_nr)\n \t\tcheck_replace_refs = 0;\ndiff --git a/revision.c b/revision.c\nindex 7ddbaa0..93b23a6 100644\n--- a/revision.c\n+++ b/revision.c\n@@ -1261,8 +1261,11 @@ static void handle_refs(const char *submodule, struct rev_info *revs, unsigned f\n \t\tint (*for_each)(const char *, each_ref_fn, void *))\n {\n \tstruct all_refs_cb cb;\n+\tstruct each_ref_fn_sha1_adapter wrapped_handle_one_ref =\n+\t\t{handle_one_ref, &cb};\n+\n \tinit_all_refs_cb(&cb, revs, flags);\n-\tfor_each(submodule, handle_one_ref, &cb);\n+\tfor_each(submodule, each_ref_fn_adapter, &wrapped_handle_one_ref);\n }\n \n static void handle_one_reflog_commit(unsigned char *sha1, void *cb_data)\n@@ -1304,9 +1307,12 @@ static int handle_one_reflog(const char *path, const unsigned char *sha1, int fl\n void add_reflogs_to_pending(struct rev_info *revs, unsigned flags)\n {\n \tstruct all_refs_cb cb;\n+\tstruct each_ref_fn_sha1_adapter wrapped_handle_one_reflog =\n+\t\t{handle_one_reflog, &cb};\n+\n \tcb.all_revs = revs;\n \tcb.all_flags = flags;\n-\tfor_each_reflog(handle_one_reflog, &cb);\n+\tfor_each_reflog(each_ref_fn_adapter, &wrapped_handle_one_reflog);\n }\n \n static void add_cache_tree(struct cache_tree *it, struct rev_info *revs,\n@@ -2120,8 +2126,11 @@ static int handle_revision_pseudo_opt(const char *submodule,\n \t\tclear_ref_exclusion(&revs->ref_excludes);\n \t} else if ((argcount = parse_long_opt(\"glob\", argv, &optarg))) {\n \t\tstruct all_refs_cb cb;\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_handle_one_ref =\n+\t\t\t{handle_one_ref, &cb};\n+\n \t\tinit_all_refs_cb(&cb, revs, *flags);\n-\t\tfor_each_glob_ref(handle_one_ref, optarg, &cb);\n+\t\tfor_each_glob_ref(each_ref_fn_adapter, optarg, &wrapped_handle_one_ref);\n \t\tclear_ref_exclusion(&revs->ref_excludes);\n \t\treturn argcount;\n \t} else if ((argcount = parse_long_opt(\"exclude\", argv, &optarg))) {\n@@ -2129,18 +2138,30 @@ static int handle_revision_pseudo_opt(const char *submodule,\n \t\treturn argcount;\n \t} else if (starts_with(arg, \"--branches=\")) {\n \t\tstruct all_refs_cb cb;\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_handle_one_ref =\n+\t\t\t{handle_one_ref, &cb};\n+\n \t\tinit_all_refs_cb(&cb, revs, *flags);\n-\t\tfor_each_glob_ref_in(handle_one_ref, arg + 11, \"refs/heads/\", &cb);\n+\t\tfor_each_glob_ref_in(each_ref_fn_adapter, arg + 11, \"refs/heads/\",\n+\t\t\t\t     &wrapped_handle_one_ref);\n \t\tclear_ref_exclusion(&revs->ref_excludes);\n \t} else if (starts_with(arg, \"--tags=\")) {\n \t\tstruct all_refs_cb cb;\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_handle_one_ref =\n+\t\t\t{handle_one_ref, &cb};\n+\n \t\tinit_all_refs_cb(&cb, revs, *flags);\n-\t\tfor_each_glob_ref_in(handle_one_ref, arg + 7, \"refs/tags/\", &cb);\n+\t\tfor_each_glob_ref_in(each_ref_fn_adapter, arg + 7, \"refs/tags/\",\n+\t\t\t\t     &wrapped_handle_one_ref);\n \t\tclear_ref_exclusion(&revs->ref_excludes);\n \t} else if (starts_with(arg, \"--remotes=\")) {\n \t\tstruct all_refs_cb cb;\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_handle_one_ref =\n+\t\t\t{handle_one_ref, &cb};\n+\n \t\tinit_all_refs_cb(&cb, revs, *flags);\n-\t\tfor_each_glob_ref_in(handle_one_ref, arg + 10, \"refs/remotes/\", &cb);\n+\t\tfor_each_glob_ref_in(each_ref_fn_adapter, arg + 10, \"refs/remotes/\",\n+\t\t\t\t     &wrapped_handle_one_ref);\n \t\tclear_ref_exclusion(&revs->ref_excludes);\n \t} else if (!strcmp(arg, \"--reflog\")) {\n \t\tadd_reflogs_to_pending(revs, *flags);\ndiff --git a/server-info.c b/server-info.c\nindex 34b0253..317dda8 100644\n--- a/server-info.c\n+++ b/server-info.c\n@@ -69,7 +69,10 @@ static int add_info_ref(const char *path, const unsigned char *sha1, int flag, v\n \n static int generate_info_refs(FILE *fp)\n {\n-\treturn for_each_ref(add_info_ref, fp);\n+\tstruct each_ref_fn_sha1_adapter wrapped_add_info_ref =\n+\t\t{add_info_ref, fp};\n+\n+\treturn for_each_ref(each_ref_fn_adapter, &wrapped_add_info_ref);\n }\n \n static int update_info_refs(int force)\ndiff --git a/sha1_name.c b/sha1_name.c\nindex 6d10f05..1aad0a322 100644\n--- a/sha1_name.c\n+++ b/sha1_name.c\n@@ -1371,7 +1371,10 @@ static int get_sha1_with_context_1(const char *name,\n \t\tint pos;\n \t\tif (!only_to_die && namelen > 2 && name[1] == '/') {\n \t\t\tstruct commit_list *list = NULL;\n-\t\t\tfor_each_ref(handle_one_ref, &list);\n+\t\t\tstruct each_ref_fn_sha1_adapter wrapped_handle_one_ref =\n+\t\t\t\t{handle_one_ref, &list};\n+\n+\t\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_handle_one_ref);\n \t\t\tcommit_list_sort_by_date(&list);\n \t\t\treturn get_sha1_oneline(name + 2, sha1, list);\n \t\t}\ndiff --git a/shallow.c b/shallow.c\nindex d08d264..9488edc 100644\n--- a/shallow.c\n+++ b/shallow.c\n@@ -512,6 +512,8 @@ void assign_shallow_commits_to_refs(struct shallow_info *info,\n \tunsigned int i, nr;\n \tint *shallow, nr_shallow = 0;\n \tstruct paint_info pi;\n+\tstruct each_ref_fn_sha1_adapter wrapped_mark_uninteresting =\n+\t\t{mark_uninteresting, NULL};\n \n \ttrace_printf_key(&trace_shallow, \"shallow: assign_shallow_commits_to_refs\\n\");\n \tshallow = xmalloc(sizeof(*shallow) * (info->nr_ours + info->nr_theirs));\n@@ -542,8 +544,8 @@ void assign_shallow_commits_to_refs(struct shallow_info *info,\n \t * connect to old refs. If not (e.g. force ref updates) it'll\n \t * have to go down to the current shallow commits.\n \t */\n-\thead_ref(mark_uninteresting, NULL);\n-\tfor_each_ref(mark_uninteresting, NULL);\n+\thead_ref(each_ref_fn_adapter, &wrapped_mark_uninteresting);\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_mark_uninteresting);\n \n \t/* Mark potential bottoms so we won't go out of bound */\n \tfor (i = 0; i < nr_shallow; i++) {\n@@ -618,6 +620,8 @@ static void post_assign_shallow(struct shallow_info *info,\n \tint dst, i, j;\n \tint bitmap_nr = (info->ref->nr + 31) / 32;\n \tstruct commit_array ca;\n+\tstruct each_ref_fn_sha1_adapter wrapped_add_ref =\n+\t\t{add_ref, &ca};\n \n \ttrace_printf_key(&trace_shallow, \"shallow: post_assign_shallow\\n\");\n \tif (ref_status)\n@@ -641,8 +645,8 @@ static void post_assign_shallow(struct shallow_info *info,\n \tinfo->nr_theirs = dst;\n \n \tmemset(&ca, 0, sizeof(ca));\n-\thead_ref(add_ref, &ca);\n-\tfor_each_ref(add_ref, &ca);\n+\thead_ref(each_ref_fn_adapter, &wrapped_add_ref);\n+\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_ref);\n \n \t/* Remove unreachable shallow commits from \"ours\" */\n \tfor (i = dst = 0; i < info->nr_ours; i++) {\n@@ -674,9 +678,12 @@ int delayed_reachability_test(struct shallow_info *si, int c)\n \n \t\tif (!si->commits) {\n \t\t\tstruct commit_array ca;\n+\t\t\tstruct each_ref_fn_sha1_adapter wrapped_add_ref =\n+\t\t\t\t{add_ref, &ca};\n+\n \t\t\tmemset(&ca, 0, sizeof(ca));\n-\t\t\thead_ref(add_ref, &ca);\n-\t\t\tfor_each_ref(add_ref, &ca);\n+\t\t\thead_ref(each_ref_fn_adapter, &wrapped_add_ref);\n+\t\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_ref);\n \t\t\tsi->commits = ca.commits;\n \t\t\tsi->nr_commits = ca.nr;\n \t\t}\ndiff --git a/submodule.c b/submodule.c\nindex d491e6a..f0f34b6 100644\n--- a/submodule.c\n+++ b/submodule.c\n@@ -429,10 +429,13 @@ static int has_remote(const char *refname, const unsigned char *sha1, int flags,\n \n static int submodule_needs_pushing(const char *path, const unsigned char sha1[20])\n {\n+\tstruct each_ref_fn_sha1_adapter wrapped_has_remote =\n+\t\t{has_remote, NULL};\n+\n \tif (add_submodule_odb(path) || !lookup_commit_reference(sha1))\n \t\treturn 0;\n \n-\tif (for_each_remote_ref_submodule(path, has_remote, NULL) > 0) {\n+\tif (for_each_remote_ref_submodule(path, each_ref_fn_adapter, &wrapped_has_remote) > 0) {\n \t\tstruct child_process cp = CHILD_PROCESS_INIT;\n \t\tconst char *argv[] = {\"rev-list\", NULL, \"--not\", \"--remotes\", \"-n\", \"1\" , NULL};\n \t\tstruct strbuf buf = STRBUF_INIT;\n@@ -519,10 +522,13 @@ int find_unpushed_submodules(unsigned char new_sha1[20],\n \n static int push_submodule(const char *path)\n {\n+\tstruct each_ref_fn_sha1_adapter wrapped_has_remote =\n+\t\t{has_remote, NULL};\n+\n \tif (add_submodule_odb(path))\n \t\treturn 1;\n \n-\tif (for_each_remote_ref_submodule(path, has_remote, NULL) > 0) {\n+\tif (for_each_remote_ref_submodule(path, each_ref_fn_adapter, &wrapped_has_remote) > 0) {\n \t\tstruct child_process cp = CHILD_PROCESS_INIT;\n \t\tconst char *argv[] = {\"push\", NULL};\n \n@@ -626,7 +632,10 @@ static int add_sha1_to_array(const char *ref, const unsigned char *sha1,\n void check_for_new_submodule_commits(unsigned char new_sha1[20])\n {\n \tif (!initialized_fetch_ref_tips) {\n-\t\tfor_each_ref(add_sha1_to_array, &ref_tips_before_fetch);\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_add_sha1_to_array =\n+\t\t\t{add_sha1_to_array, &ref_tips_before_fetch};\n+\n+\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_sha1_to_array);\n \t\tinitialized_fetch_ref_tips = 1;\n \t}\n \ndiff --git a/transport.c b/transport.c\nindex f080e93..58cb9ed 100644\n--- a/transport.c\n+++ b/transport.c\n@@ -363,7 +363,10 @@ static int rsync_transport_push(struct transport *transport,\n \tstrbuf_addch(&temp_dir, '/');\n \n \tif (flags & TRANSPORT_PUSH_ALL) {\n-\t\tif (for_each_ref(write_one_ref, &temp_dir))\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_write_one_ref =\n+\t\t\t{write_one_ref, &temp_dir};\n+\n+\t\tif (for_each_ref(each_ref_fn_adapter, &wrapped_write_one_ref))\n \t\t\treturn -1;\n \t} else if (write_refs_to_temp_dir(&temp_dir, refspec_nr, refspec))\n \t\treturn -1;\ndiff --git a/upload-pack.c b/upload-pack.c\nindex 745fda8..52fab23 100644\n--- a/upload-pack.c\n+++ b/upload-pack.c\n@@ -761,18 +761,26 @@ static int find_symref(const char *refname, const unsigned char *sha1, int flag,\n static void upload_pack(void)\n {\n \tstruct string_list symref = STRING_LIST_INIT_DUP;\n+\tstruct each_ref_fn_sha1_adapter wrapped_find_symref =\n+\t\t{find_symref, &symref};\n \n-\thead_ref_namespaced(find_symref, &symref);\n+\thead_ref_namespaced(each_ref_fn_adapter, &wrapped_find_symref);\n \n \tif (advertise_refs || !stateless_rpc) {\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_send_ref =\n+\t\t\t{send_ref, &symref};\n+\n \t\treset_timeout();\n-\t\thead_ref_namespaced(send_ref, &symref);\n-\t\tfor_each_namespaced_ref(send_ref, &symref);\n+\t\thead_ref_namespaced(each_ref_fn_adapter, &wrapped_send_ref);\n+\t\tfor_each_namespaced_ref(each_ref_fn_adapter, &wrapped_send_ref);\n \t\tadvertise_shallow_grafts(1);\n \t\tpacket_flush(1);\n \t} else {\n-\t\thead_ref_namespaced(check_ref, NULL);\n-\t\tfor_each_namespaced_ref(check_ref, NULL);\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_check_ref =\n+\t\t\t{check_ref, NULL};\n+\n+\t\thead_ref_namespaced(each_ref_fn_adapter, &wrapped_check_ref);\n+\t\tfor_each_namespaced_ref(each_ref_fn_adapter, &wrapped_check_ref);\n \t}\n \tstring_list_clear(&symref, 1);\n \tif (advertise_refs)\ndiff --git a/walker.c b/walker.c\nindex 58ffeca..bb2e0b9 100644\n--- a/walker.c\n+++ b/walker.c\n@@ -269,7 +269,10 @@ int walker_fetch(struct walker *walker, int targets, char **target,\n \t}\n \n \tif (!walker->get_recover) {\n-\t\tfor_each_ref(mark_complete, NULL);\n+\t\tstruct each_ref_fn_sha1_adapter wrapped_mark_complete =\n+\t\t\t{mark_complete, NULL};\n+\n+\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_mark_complete);\n \t\tcommit_list_sort_by_date(&complete);\n \t}\n \n-- \n2.4.0\n"},{"id":"262091","messageId":"1432579162-411464-4-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 03/56] builtin/rev-parse: rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:29Z","receivedAt":"2015-05-25T18:38:29Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/rev-parse.c | 41 +++++++++++++++++------------------------\n 1 file changed, 17 insertions(+), 24 deletions(-)\n\ndiff --git a/builtin/rev-parse.c b/builtin/rev-parse.c\nindex e75ce75..b623239 100644\n--- a/builtin/rev-parse.c\n+++ b/builtin/rev-parse.c\n@@ -190,17 +190,17 @@ static int show_default(void)\n \treturn 0;\n }\n \n-static int show_reference(const char *refname, const unsigned char *sha1, int flag, void *cb_data)\n+static int show_reference(const char *refname, const struct object_id *oid, int flag, void *cb_data)\n {\n \tif (ref_excluded(ref_excludes, refname))\n \t\treturn 0;\n-\tshow_rev(NORMAL, sha1, refname);\n+\tshow_rev(NORMAL, oid->hash, refname);\n \treturn 0;\n }\n \n-static int anti_reference(const char *refname, const unsigned char *sha1, int flag, void *cb_data)\n+static int anti_reference(const char *refname, const struct object_id *oid, int flag, void *cb_data)\n {\n-\tshow_rev(REVERSED, sha1, refname);\n+\tshow_rev(REVERSED, oid->hash, refname);\n \treturn 0;\n }\n \n@@ -511,10 +511,6 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)\n \tunsigned int flags = 0;\n \tconst char *name = NULL;\n \tstruct object_context unused;\n-\tstruct each_ref_fn_sha1_adapter wrapped_show_reference =\n-\t\t{show_reference, NULL};\n-\tstruct each_ref_fn_sha1_adapter wrapped_anti_reference =\n-\t\t{anti_reference, NULL};\n \n \tif (argc > 1 && !strcmp(\"--parseopt\", argv[1]))\n \t\treturn cmd_parseopt(argc - 1, argv + 1, prefix);\n@@ -656,7 +652,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (!strcmp(arg, \"--all\")) {\n-\t\t\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_show_reference);\n+\t\t\t\tfor_each_ref(show_reference, NULL);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (starts_with(arg, \"--disambiguate=\")) {\n@@ -664,48 +660,45 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (!strcmp(arg, \"--bisect\")) {\n-\t\t\t\tfor_each_ref_in(\"refs/bisect/bad\",\n-\t\t\t\t\t\teach_ref_fn_adapter, &wrapped_show_reference);\n-\t\t\t\tfor_each_ref_in(\"refs/bisect/good\",\n-\t\t\t\t\t\teach_ref_fn_adapter, &wrapped_anti_reference);\n+\t\t\t\tfor_each_ref_in(\"refs/bisect/bad\", show_reference, NULL);\n+\t\t\t\tfor_each_ref_in(\"refs/bisect/good\", anti_reference, NULL);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (starts_with(arg, \"--branches=\")) {\n-\t\t\t\tfor_each_glob_ref_in(each_ref_fn_adapter, arg + 11,\n-\t\t\t\t\t\"refs/heads/\", &wrapped_show_reference);\n+\t\t\t\tfor_each_glob_ref_in(show_reference, arg + 11,\n+\t\t\t\t\t\"refs/heads/\", NULL);\n \t\t\t\tclear_ref_exclusion(&ref_excludes);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (!strcmp(arg, \"--branches\")) {\n-\t\t\t\tfor_each_branch_ref(each_ref_fn_adapter, &wrapped_show_reference);\n+\t\t\t\tfor_each_branch_ref(show_reference, NULL);\n \t\t\t\tclear_ref_exclusion(&ref_excludes);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (starts_with(arg, \"--tags=\")) {\n-\t\t\t\tfor_each_glob_ref_in(each_ref_fn_adapter, arg + 7,\n-\t\t\t\t\t\"refs/tags/\", &wrapped_show_reference);\n+\t\t\t\tfor_each_glob_ref_in(show_reference, arg + 7,\n+\t\t\t\t\t\"refs/tags/\", NULL);\n \t\t\t\tclear_ref_exclusion(&ref_excludes);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (!strcmp(arg, \"--tags\")) {\n-\t\t\t\tfor_each_tag_ref(each_ref_fn_adapter, &wrapped_show_reference);\n+\t\t\t\tfor_each_tag_ref(show_reference, NULL);\n \t\t\t\tclear_ref_exclusion(&ref_excludes);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (starts_with(arg, \"--glob=\")) {\n-\t\t\t\tfor_each_glob_ref(each_ref_fn_adapter, arg + 7,\n-\t\t\t\t\t\t  &wrapped_show_reference);\n+\t\t\t\tfor_each_glob_ref(show_reference, arg + 7, NULL);\n \t\t\t\tclear_ref_exclusion(&ref_excludes);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (starts_with(arg, \"--remotes=\")) {\n-\t\t\t\tfor_each_glob_ref_in(each_ref_fn_adapter, arg + 10,\n-\t\t\t\t\t\"refs/remotes/\", &wrapped_show_reference);\n+\t\t\t\tfor_each_glob_ref_in(show_reference, arg + 10,\n+\t\t\t\t\t\"refs/remotes/\", NULL);\n \t\t\t\tclear_ref_exclusion(&ref_excludes);\n \t\t\t\tcontinue;\n \t\t\t}\n \t\t\tif (!strcmp(arg, \"--remotes\")) {\n-\t\t\t\tfor_each_remote_ref(each_ref_fn_adapter, &wrapped_show_reference);\n+\t\t\t\tfor_each_remote_ref(show_reference, NULL);\n \t\t\t\tclear_ref_exclusion(&ref_excludes);\n \t\t\t\tcontinue;\n \t\t\t}\n-- \n2.4.0\n"},{"id":"262080","messageId":"1432579162-411464-5-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 04/56] handle_one_ref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:30Z","receivedAt":"2015-05-25T18:38:30Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n revision.c | 35 +++++++++--------------------------\n 1 file changed, 9 insertions(+), 26 deletions(-)\n\ndiff --git a/revision.c b/revision.c\nindex 93b23a6..cfe3876 100644\n--- a/revision.c\n+++ b/revision.c\n@@ -1218,7 +1218,8 @@ int ref_excluded(struct string_list *ref_excludes, const char *path)\n \treturn 0;\n }\n \n-static int handle_one_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data)\n+static int handle_one_ref(const char *path, const struct object_id *oid,\n+\t\t\t  int flag, void *cb_data)\n {\n \tstruct all_refs_cb *cb = cb_data;\n \tstruct object *object;\n@@ -1226,9 +1227,9 @@ static int handle_one_ref(const char *path, const unsigned char *sha1, int flag,\n \tif (ref_excluded(cb->all_revs->ref_excludes, path))\n \t    return 0;\n \n-\tobject = get_reference(cb->all_revs, path, sha1, cb->all_flags);\n+\tobject = get_reference(cb->all_revs, path, oid->hash, cb->all_flags);\n \tadd_rev_cmdline(cb->all_revs, object, path, REV_CMD_REF, cb->all_flags);\n-\tadd_pending_sha1(cb->all_revs, path, sha1, cb->all_flags);\n+\tadd_pending_sha1(cb->all_revs, path, oid->hash, cb->all_flags);\n \treturn 0;\n }\n \n@@ -1261,11 +1262,8 @@ static void handle_refs(const char *submodule, struct rev_info *revs, unsigned f\n \t\tint (*for_each)(const char *, each_ref_fn, void *))\n {\n \tstruct all_refs_cb cb;\n-\tstruct each_ref_fn_sha1_adapter wrapped_handle_one_ref =\n-\t\t{handle_one_ref, &cb};\n-\n \tinit_all_refs_cb(&cb, revs, flags);\n-\tfor_each(submodule, each_ref_fn_adapter, &wrapped_handle_one_ref);\n+\tfor_each(submodule, handle_one_ref, &cb);\n }\n \n static void handle_one_reflog_commit(unsigned char *sha1, void *cb_data)\n@@ -2126,11 +2124,8 @@ static int handle_revision_pseudo_opt(const char *submodule,\n \t\tclear_ref_exclusion(&revs->ref_excludes);\n \t} else if ((argcount = parse_long_opt(\"glob\", argv, &optarg))) {\n \t\tstruct all_refs_cb cb;\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_handle_one_ref =\n-\t\t\t{handle_one_ref, &cb};\n-\n \t\tinit_all_refs_cb(&cb, revs, *flags);\n-\t\tfor_each_glob_ref(each_ref_fn_adapter, optarg, &wrapped_handle_one_ref);\n+\t\tfor_each_glob_ref(handle_one_ref, optarg, &cb);\n \t\tclear_ref_exclusion(&revs->ref_excludes);\n \t\treturn argcount;\n \t} else if ((argcount = parse_long_opt(\"exclude\", argv, &optarg))) {\n@@ -2138,30 +2133,18 @@ static int handle_revision_pseudo_opt(const char *submodule,\n \t\treturn argcount;\n \t} else if (starts_with(arg, \"--branches=\")) {\n \t\tstruct all_refs_cb cb;\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_handle_one_ref =\n-\t\t\t{handle_one_ref, &cb};\n-\n \t\tinit_all_refs_cb(&cb, revs, *flags);\n-\t\tfor_each_glob_ref_in(each_ref_fn_adapter, arg + 11, \"refs/heads/\",\n-\t\t\t\t     &wrapped_handle_one_ref);\n+\t\tfor_each_glob_ref_in(handle_one_ref, arg + 11, \"refs/heads/\", &cb);\n \t\tclear_ref_exclusion(&revs->ref_excludes);\n \t} else if (starts_with(arg, \"--tags=\")) {\n \t\tstruct all_refs_cb cb;\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_handle_one_ref =\n-\t\t\t{handle_one_ref, &cb};\n-\n \t\tinit_all_refs_cb(&cb, revs, *flags);\n-\t\tfor_each_glob_ref_in(each_ref_fn_adapter, arg + 7, \"refs/tags/\",\n-\t\t\t\t     &wrapped_handle_one_ref);\n+\t\tfor_each_glob_ref_in(handle_one_ref, arg + 7, \"refs/tags/\", &cb);\n \t\tclear_ref_exclusion(&revs->ref_excludes);\n \t} else if (starts_with(arg, \"--remotes=\")) {\n \t\tstruct all_refs_cb cb;\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_handle_one_ref =\n-\t\t\t{handle_one_ref, &cb};\n-\n \t\tinit_all_refs_cb(&cb, revs, *flags);\n-\t\tfor_each_glob_ref_in(each_ref_fn_adapter, arg + 10, \"refs/remotes/\",\n-\t\t\t\t     &wrapped_handle_one_ref);\n+\t\tfor_each_glob_ref_in(handle_one_ref, arg + 10, \"refs/remotes/\", &cb);\n \t\tclear_ref_exclusion(&revs->ref_excludes);\n \t} else if (!strcmp(arg, \"--reflog\")) {\n \t\tadd_reflogs_to_pending(revs, *flags);\n-- \n2.4.0\n"},{"id":"262042","messageId":"1432579162-411464-6-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 05/56] register_ref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:31Z","receivedAt":"2015-05-25T18:38:31Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n bisect.c | 13 +++++--------\n 1 file changed, 5 insertions(+), 8 deletions(-)\n\ndiff --git a/bisect.c b/bisect.c\nindex 0848d91..03d5cd9 100644\n--- a/bisect.c\n+++ b/bisect.c\n@@ -400,16 +400,16 @@ struct commit_list *find_bisection(struct commit_list *list,\n \treturn best;\n }\n \n-static int register_ref(const char *refname, const unsigned char *sha1,\n+static int register_ref(const char *refname, const struct object_id *oid,\n \t\t\tint flags, void *cb_data)\n {\n \tif (!strcmp(refname, \"bad\")) {\n \t\tcurrent_bad_oid = xmalloc(sizeof(*current_bad_oid));\n-\t\thashcpy(current_bad_oid->hash, sha1);\n+\t\toidcpy(current_bad_oid, oid);\n \t} else if (starts_with(refname, \"good-\")) {\n-\t\tsha1_array_append(&good_revs, sha1);\n+\t\tsha1_array_append(&good_revs, oid->hash);\n \t} else if (starts_with(refname, \"skip-\")) {\n-\t\tsha1_array_append(&skipped_revs, sha1);\n+\t\tsha1_array_append(&skipped_revs, oid->hash);\n \t}\n \n \treturn 0;\n@@ -417,10 +417,7 @@ static int register_ref(const char *refname, const unsigned char *sha1,\n \n static int read_bisect_refs(void)\n {\n-\tstruct each_ref_fn_sha1_adapter wrapped_register_ref =\n-\t\t{register_ref, NULL};\n-\n-\treturn for_each_ref_in(\"refs/bisect/\", each_ref_fn_adapter, &wrapped_register_ref);\n+\treturn for_each_ref_in(\"refs/bisect/\", register_ref, NULL);\n }\n \n static void read_bisect_paths(struct argv_array *array)\n-- \n2.4.0\n"},{"id":"262038","messageId":"1432579162-411464-7-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 06/56] append_ref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:32Z","receivedAt":"2015-05-25T18:38:32Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/branch.c | 8 +++-----\n 1 file changed, 3 insertions(+), 5 deletions(-)\n\ndiff --git a/builtin/branch.c b/builtin/branch.c\nindex b27adcb..0d3b9af 100644\n--- a/builtin/branch.c\n+++ b/builtin/branch.c\n@@ -328,7 +328,7 @@ static int match_patterns(const char **pattern, const char *refname)\n \treturn 0;\n }\n \n-static int append_ref(const char *refname, const unsigned char *sha1, int flags, void *cb_data)\n+static int append_ref(const char *refname, const struct object_id *oid, int flags, void *cb_data)\n {\n \tstruct append_ref_cb *cb = (struct append_ref_cb *)(cb_data);\n \tstruct ref_list *ref_list = cb->ref_list;\n@@ -365,7 +365,7 @@ static int append_ref(const char *refname, const unsigned char *sha1, int flags,\n \n \tcommit = NULL;\n \tif (ref_list->verbose || ref_list->with_commit || merge_filter != NO_FILTER) {\n-\t\tcommit = lookup_commit_reference_gently(sha1, 1);\n+\t\tcommit = lookup_commit_reference_gently(oid->hash, 1);\n \t\tif (!commit) {\n \t\t\tcb->ret = error(_(\"branch '%s' does not point at a commit\"), refname);\n \t\t\treturn 0;\n@@ -631,8 +631,6 @@ static int print_ref_list(int kinds, int detached, int verbose, int abbrev, stru\n \tint i;\n \tstruct append_ref_cb cb;\n \tstruct ref_list ref_list;\n-\tstruct each_ref_fn_sha1_adapter wrapped_append_ref =\n-\t\t{append_ref, &cb};\n \n \tmemset(&ref_list, 0, sizeof(ref_list));\n \tref_list.kinds = kinds;\n@@ -644,7 +642,7 @@ static int print_ref_list(int kinds, int detached, int verbose, int abbrev, stru\n \tcb.ref_list = &ref_list;\n \tcb.pattern = pattern;\n \tcb.ret = 0;\n-\tfor_each_rawref(each_ref_fn_adapter, &wrapped_append_ref);\n+\tfor_each_rawref(append_ref, &cb);\n \tif (merge_filter != NO_FILTER) {\n \t\tstruct commit *filter;\n \t\tfilter = lookup_commit_reference_gently(merge_filter_ref, 0);\n-- \n2.4.0\n"},{"id":"262085","messageId":"1432579162-411464-8-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 07/56] add_pending_uninteresting_ref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:33Z","receivedAt":"2015-05-25T18:38:33Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/checkout.c | 8 +++-----\n 1 file changed, 3 insertions(+), 5 deletions(-)\n\ndiff --git a/builtin/checkout.c b/builtin/checkout.c\nindex 9416aa2..9b49f0e 100644\n--- a/builtin/checkout.c\n+++ b/builtin/checkout.c\n@@ -702,10 +702,10 @@ static void update_refs_for_switch(const struct checkout_opts *opts,\n }\n \n static int add_pending_uninteresting_ref(const char *refname,\n-\t\t\t\t\t const unsigned char *sha1,\n+\t\t\t\t\t const struct object_id *oid,\n \t\t\t\t\t int flags, void *cb_data)\n {\n-\tadd_pending_sha1(cb_data, refname, sha1, UNINTERESTING);\n+\tadd_pending_sha1(cb_data, refname, oid->hash, UNINTERESTING);\n \treturn 0;\n }\n \n@@ -784,8 +784,6 @@ static void orphaned_commit_warning(struct commit *old, struct commit *new)\n \tstruct rev_info revs;\n \tstruct object *object = &old->object;\n \tstruct object_array refs;\n-\tstruct each_ref_fn_sha1_adapter wrapped_add_pending_uninteresting_ref =\n-\t\t{add_pending_uninteresting_ref, &revs};\n \n \tinit_revisions(&revs, NULL);\n \tsetup_revisions(0, NULL, &revs, NULL);\n@@ -793,7 +791,7 @@ static void orphaned_commit_warning(struct commit *old, struct commit *new)\n \tobject->flags &= ~UNINTERESTING;\n \tadd_pending_object(&revs, object, sha1_to_hex(object->sha1));\n \n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_pending_uninteresting_ref);\n+\tfor_each_ref(add_pending_uninteresting_ref, &revs);\n \tadd_pending_sha1(&revs, \"HEAD\", new->object.sha1, UNINTERESTING);\n \n \trefs = revs.pending;\n-- \n2.4.0\n"},{"id":"262089","messageId":"1432579162-411464-9-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 08/56] get_name(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:34Z","receivedAt":"2015-05-25T18:38:34Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nRewrite to take an object_id argument and convert the local variable\n\"peeled\" object_id.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/describe.c | 16 +++++++---------\n 1 file changed, 7 insertions(+), 9 deletions(-)\n\ndiff --git a/builtin/describe.c b/builtin/describe.c\nindex 7d0c855..a36c829 100644\n--- a/builtin/describe.c\n+++ b/builtin/describe.c\n@@ -119,10 +119,10 @@ static void add_to_known_names(const char *path,\n \t}\n }\n \n-static int get_name(const char *path, const unsigned char *sha1, int flag, void *cb_data)\n+static int get_name(const char *path, const struct object_id *oid, int flag, void *cb_data)\n {\n \tint is_tag = starts_with(path, \"refs/tags/\");\n-\tunsigned char peeled[20];\n+\tstruct object_id peeled;\n \tint is_annotated, prio;\n \n \t/* Reject anything outside refs/tags/ unless --all */\n@@ -134,10 +134,10 @@ static int get_name(const char *path, const unsigned char *sha1, int flag, void\n \t\treturn 0;\n \n \t/* Is it annotated? */\n-\tif (!peel_ref(path, peeled)) {\n-\t\tis_annotated = !!hashcmp(sha1, peeled);\n+\tif (!peel_ref(path, peeled.hash)) {\n+\t\tis_annotated = !!oidcmp(oid, &peeled);\n \t} else {\n-\t\thashcpy(peeled, sha1);\n+\t\toidcpy(&peeled, oid);\n \t\tis_annotated = 0;\n \t}\n \n@@ -154,7 +154,7 @@ static int get_name(const char *path, const unsigned char *sha1, int flag, void\n \telse\n \t\tprio = 0;\n \n-\tadd_to_known_names(all ? path + 5 : path + 10, peeled, prio, sha1);\n+\tadd_to_known_names(all ? path + 5 : path + 10, peeled.hash, prio, oid->hash);\n \treturn 0;\n }\n \n@@ -413,8 +413,6 @@ int cmd_describe(int argc, const char **argv, const char *prefix)\n \t\t\tPARSE_OPT_OPTARG, NULL, (intptr_t) \"-dirty\"},\n \t\tOPT_END(),\n \t};\n-\tstruct each_ref_fn_sha1_adapter wrapped_get_name =\n-\t\t{get_name, NULL};\n \n \tgit_config(git_default_config, NULL);\n \targc = parse_options(argc, argv, prefix, options, describe_usage, 0);\n@@ -453,7 +451,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)\n \t}\n \n \thashmap_init(&names, (hashmap_cmp_fn) commit_name_cmp, 0);\n-\tfor_each_rawref(each_ref_fn_adapter, &wrapped_get_name);\n+\tfor_each_rawref(get_name, NULL);\n \tif (!names.size && !always)\n \t\tdie(_(\"No names found, cannot describe anything.\"));\n \n-- \n2.4.0\n"},{"id":"262084","messageId":"1432579162-411464-10-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 09/56] builtin/fetch: rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:35Z","receivedAt":"2015-05-25T18:38:35Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/fetch.c | 23 +++++++++++------------\n 1 file changed, 11 insertions(+), 12 deletions(-)\n\ndiff --git a/builtin/fetch.c b/builtin/fetch.c\nindex 4878c3d..8d5b2db 100644\n--- a/builtin/fetch.c\n+++ b/builtin/fetch.c\n@@ -179,13 +179,15 @@ static void add_merge_config(struct ref **head,\n \t}\n }\n \n-static int add_existing(const char *refname, const unsigned char *sha1,\n+static int add_existing(const char *refname, const struct object_id *oid,\n \t\t\tint flag, void *cbdata)\n {\n \tstruct string_list *list = (struct string_list *)cbdata;\n \tstruct string_list_item *item = string_list_insert(list, refname);\n-\titem->util = xmalloc(20);\n-\thashcpy(item->util, sha1);\n+\tstruct object_id *old_oid = xmalloc(sizeof(*old_oid));\n+\n+\toidcpy(old_oid, oid);\n+\titem->util = old_oid;\n \treturn 0;\n }\n \n@@ -208,10 +210,8 @@ static void find_non_local_tags(struct transport *transport,\n \tstruct string_list remote_refs = STRING_LIST_INIT_NODUP;\n \tconst struct ref *ref;\n \tstruct string_list_item *item = NULL;\n-\tstruct each_ref_fn_sha1_adapter wrapped_add_existing =\n-\t\t{add_existing, &existing_refs};\n \n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_existing);\n+\tfor_each_ref(add_existing, &existing_refs);\n \tfor (ref = transport_get_remote_refs(transport); ref; ref = ref->next) {\n \t\tif (!starts_with(ref->name, \"refs/tags/\"))\n \t\t\tcontinue;\n@@ -886,10 +886,8 @@ static int do_fetch(struct transport *transport,\n \tstruct ref *rm;\n \tint autotags = (transport->remote->fetch_tags == 1);\n \tint retcode = 0;\n-\tstruct each_ref_fn_sha1_adapter wrapped_add_existing =\n-\t\t{add_existing, &existing_refs};\n \n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_existing);\n+\tfor_each_ref(add_existing, &existing_refs);\n \n \tif (tags == TAGS_DEFAULT) {\n \t\tif (transport->remote->fetch_tags == 2)\n@@ -917,9 +915,10 @@ static int do_fetch(struct transport *transport,\n \t\t\tstruct string_list_item *peer_item =\n \t\t\t\tstring_list_lookup(&existing_refs,\n \t\t\t\t\t\t   rm->peer_ref->name);\n-\t\t\tif (peer_item)\n-\t\t\t\thashcpy(rm->peer_ref->old_sha1,\n-\t\t\t\t\tpeer_item->util);\n+\t\t\tif (peer_item) {\n+\t\t\t\tstruct object_id *old_oid = peer_item->util;\n+\t\t\t\thashcpy(rm->peer_ref->old_sha1, old_oid->hash);\n+\t\t\t}\n \t\t}\n \t}\n \n-- \n2.4.0\n"},{"id":"262040","messageId":"1432579162-411464-11-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 10/56] grab_single_ref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:36Z","receivedAt":"2015-05-25T18:38:36Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/for-each-ref.c | 9 ++++-----\n 1 file changed, 4 insertions(+), 5 deletions(-)\n\ndiff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c\nindex caccd93..05ce28c 100644\n--- a/builtin/for-each-ref.c\n+++ b/builtin/for-each-ref.c\n@@ -840,7 +840,8 @@ struct grab_ref_cbdata {\n  * A call-back given to for_each_ref().  Filter refs and keep them for\n  * later object processing.\n  */\n-static int grab_single_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)\n+static int grab_single_ref(const char *refname, const struct object_id *oid,\n+\t\t\t   int flag, void *cb_data)\n {\n \tstruct grab_ref_cbdata *cb = cb_data;\n \tstruct refinfo *ref;\n@@ -878,7 +879,7 @@ static int grab_single_ref(const char *refname, const unsigned char *sha1, int f\n \t */\n \tref = xcalloc(1, sizeof(*ref));\n \tref->refname = xstrdup(refname);\n-\thashcpy(ref->objectname, sha1);\n+\thashcpy(ref->objectname, oid->hash);\n \tref->flag = flag;\n \n \tcnt = cb->grab_cnt;\n@@ -1072,8 +1073,6 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)\n \tint maxcount = 0, quote_style = 0;\n \tstruct refinfo **refs;\n \tstruct grab_ref_cbdata cbdata;\n-\tstruct each_ref_fn_sha1_adapter wrapped_grab_single_ref =\n-\t\t{grab_single_ref, &cbdata};\n \n \tstruct option opts[] = {\n \t\tOPT_BIT('s', \"shell\", &quote_style,\n@@ -1113,7 +1112,7 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)\n \n \tmemset(&cbdata, 0, sizeof(cbdata));\n \tcbdata.grab_pattern = argv;\n-\tfor_each_rawref(each_ref_fn_adapter, &wrapped_grab_single_ref);\n+\tfor_each_rawref(grab_single_ref, &cbdata);\n \trefs = cbdata.grab_array;\n \tnum_refs = cbdata.grab_cnt;\n \n-- \n2.4.0\n"},{"id":"262088","messageId":"1432579162-411464-12-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 11/56] name_ref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:37Z","receivedAt":"2015-05-25T18:38:37Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/name-rev.c | 10 ++++------\n 1 file changed, 4 insertions(+), 6 deletions(-)\n\ndiff --git a/builtin/name-rev.c b/builtin/name-rev.c\nindex 41bdf0a..248a3eb 100644\n--- a/builtin/name-rev.c\n+++ b/builtin/name-rev.c\n@@ -138,9 +138,9 @@ static int tipcmp(const void *a_, const void *b_)\n \treturn hashcmp(a->sha1, b->sha1);\n }\n \n-static int name_ref(const char *path, const unsigned char *sha1, int flags, void *cb_data)\n+static int name_ref(const char *path, const struct object_id *oid, int flags, void *cb_data)\n {\n-\tstruct object *o = parse_object(sha1);\n+\tstruct object *o = parse_object(oid->hash);\n \tstruct name_ref_data *data = cb_data;\n \tint can_abbreviate_output = data->tags_only && data->name_only;\n \tint deref = 0;\n@@ -160,7 +160,7 @@ static int name_ref(const char *path, const unsigned char *sha1, int flags, void\n \t\t}\n \t}\n \n-\tadd_to_tip_table(sha1, path, can_abbreviate_output);\n+\tadd_to_tip_table(oid->hash, path, can_abbreviate_output);\n \n \twhile (o && o->type == OBJ_TAG) {\n \t\tstruct tag *t = (struct tag *) o;\n@@ -305,8 +305,6 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)\n \tstruct object_array revs = OBJECT_ARRAY_INIT;\n \tint all = 0, transform_stdin = 0, allow_undefined = 1, always = 0, peel_tag = 0;\n \tstruct name_ref_data data = { 0, 0, NULL };\n-\tstruct each_ref_fn_sha1_adapter wrapped_name_ref =\n-\t\t{name_ref, &data};\n \tstruct option opts[] = {\n \t\tOPT_BOOL(0, \"name-only\", &data.name_only, N_(\"print only names (no SHA-1)\")),\n \t\tOPT_BOOL(0, \"tags\", &data.tags_only, N_(\"only use tags to name the commits\")),\n@@ -379,7 +377,7 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)\n \n \tif (cutoff)\n \t\tcutoff = cutoff - CUTOFF_DATE_SLOP;\n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_name_ref);\n+\tfor_each_ref(name_ref, &data);\n \n \tif (transform_stdin) {\n \t\tchar buffer[2048];\n-- \n2.4.0\n"},{"id":"262086","messageId":"1432579162-411464-13-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 12/56] builtin/pack-objects: rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:38Z","receivedAt":"2015-05-25T18:38:38Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/pack-objects.c | 26 ++++++++++----------------\n 1 file changed, 10 insertions(+), 16 deletions(-)\n\ndiff --git a/builtin/pack-objects.c b/builtin/pack-objects.c\nindex 81f0e57..80fe8c7 100644\n--- a/builtin/pack-objects.c\n+++ b/builtin/pack-objects.c\n@@ -540,11 +540,11 @@ static enum write_one_status write_one(struct sha1file *f,\n \treturn WRITE_ONE_WRITTEN;\n }\n \n-static int mark_tagged(const char *path, const unsigned char *sha1, int flag,\n+static int mark_tagged(const char *path, const struct object_id *oid, int flag,\n \t\t       void *cb_data)\n {\n \tunsigned char peeled[20];\n-\tstruct object_entry *entry = packlist_find(&to_pack, sha1, NULL);\n+\tstruct object_entry *entry = packlist_find(&to_pack, oid->hash, NULL);\n \n \tif (entry)\n \t\tentry->tagged = 1;\n@@ -626,8 +626,6 @@ static struct object_entry **compute_write_order(void)\n \n \tstruct object_entry **wo = xmalloc(to_pack.nr_objects * sizeof(*wo));\n \tstruct object_entry *objects = to_pack.objects;\n-\tstruct each_ref_fn_sha1_adapter wrapped_mark_tagged =\n-\t\t{mark_tagged, NULL};\n \n \tfor (i = 0; i < to_pack.nr_objects; i++) {\n \t\tobjects[i].tagged = 0;\n@@ -653,7 +651,7 @@ static struct object_entry **compute_write_order(void)\n \t/*\n \t * Mark objects that are at the tip of tags.\n \t */\n-\tfor_each_tag_ref(each_ref_fn_adapter, &wrapped_mark_tagged);\n+\tfor_each_tag_ref(mark_tagged, NULL);\n \n \t/*\n \t * Give the objects in the original recency order until\n@@ -2099,14 +2097,14 @@ static void ll_find_deltas(struct object_entry **list, unsigned list_size,\n #define ll_find_deltas(l, s, w, d, p)\tfind_deltas(l, &s, w, d, p)\n #endif\n \n-static int add_ref_tag(const char *path, const unsigned char *sha1, int flag, void *cb_data)\n+static int add_ref_tag(const char *path, const struct object_id *oid, int flag, void *cb_data)\n {\n-\tunsigned char peeled[20];\n+\tstruct object_id peeled;\n \n \tif (starts_with(path, \"refs/tags/\") && /* is a tag? */\n-\t    !peel_ref(path, peeled)        && /* peelable? */\n-\t    packlist_find(&to_pack, peeled, NULL))      /* object packed? */\n-\t\tadd_object_entry(sha1, OBJ_TAG, NULL, 0);\n+\t    !peel_ref(path, peeled.hash)    && /* peelable? */\n+\t    packlist_find(&to_pack, peeled.hash, NULL))      /* object packed? */\n+\t\tadd_object_entry(oid->hash, OBJ_TAG, NULL, 0);\n \treturn 0;\n }\n \n@@ -2786,12 +2784,8 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)\n \t\targv_array_clear(&rp);\n \t}\n \tcleanup_preferred_base();\n-\tif (include_tag && nr_result) {\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_add_ref_tag =\n-\t\t\t{add_ref_tag, NULL};\n-\n-\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_ref_tag);\n-\t}\n+\tif (include_tag && nr_result)\n+\t\tfor_each_ref(add_ref_tag, NULL);\n \tstop_progress(&progress_state);\n \n \tif (non_empty && !nr_result)\n-- \n2.4.0\n"},{"id":"262039","messageId":"1432579162-411464-14-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 13/56] show_ref_cb(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:39Z","receivedAt":"2015-05-25T18:38:39Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/receive-pack.c | 8 +++-----\n 1 file changed, 3 insertions(+), 5 deletions(-)\n\ndiff --git a/builtin/receive-pack.c b/builtin/receive-pack.c\nindex 12ecacd..94d0571 100644\n--- a/builtin/receive-pack.c\n+++ b/builtin/receive-pack.c\n@@ -197,7 +197,7 @@ static void show_ref(const char *path, const unsigned char *sha1)\n \t}\n }\n \n-static int show_ref_cb(const char *path, const unsigned char *sha1, int flag, void *unused)\n+static int show_ref_cb(const char *path, const struct object_id *oid, int flag, void *unused)\n {\n \tpath = strip_namespace(path);\n \t/*\n@@ -210,7 +210,7 @@ static int show_ref_cb(const char *path, const unsigned char *sha1, int flag, vo\n \t */\n \tif (!path)\n \t\tpath = \".have\";\n-\tshow_ref(path, sha1);\n+\tshow_ref(path, oid->hash);\n \treturn 0;\n }\n \n@@ -228,13 +228,11 @@ static void collect_one_alternate_ref(const struct ref *ref, void *data)\n static void write_head_info(void)\n {\n \tstruct sha1_array sa = SHA1_ARRAY_INIT;\n-\tstruct each_ref_fn_sha1_adapter wrapped_show_ref_cb =\n-\t\t{show_ref_cb, NULL};\n \n \tfor_each_alternate_ref(collect_one_alternate_ref, &sa);\n \tsha1_array_for_each_unique(&sa, show_one_alternate_sha1, NULL);\n \tsha1_array_clear(&sa);\n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_show_ref_cb);\n+\tfor_each_ref(show_ref_cb, NULL);\n \tif (!sent_capabilities)\n \t\tshow_ref(\"capabilities^{}\", null_sha1);\n \n-- \n2.4.0\n"},{"id":"262043","messageId":"1432579162-411464-15-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 14/56] builtin/reflog: rewrite ref functions to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:40Z","receivedAt":"2015-05-25T18:38:40Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/reflog.c | 16 ++++++----------\n 1 file changed, 6 insertions(+), 10 deletions(-)\n\ndiff --git a/builtin/reflog.c b/builtin/reflog.c\nindex 1163dd6..c2eb8ff 100644\n--- a/builtin/reflog.c\n+++ b/builtin/reflog.c\n@@ -313,14 +313,14 @@ static int should_expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1,\n \treturn 0;\n }\n \n-static int push_tip_to_list(const char *refname, const unsigned char *sha1,\n+static int push_tip_to_list(const char *refname, const struct object_id *oid,\n \t\t\t    int flags, void *cb_data)\n {\n \tstruct commit_list **list = cb_data;\n \tstruct commit *tip_commit;\n \tif (flags & REF_ISSYMREF)\n \t\treturn 0;\n-\ttip_commit = lookup_commit_reference_gently(sha1, 1);\n+\ttip_commit = lookup_commit_reference_gently(oid->hash, 1);\n \tif (!tip_commit)\n \t\treturn 0;\n \tcommit_list_insert(tip_commit, list);\n@@ -352,10 +352,8 @@ static void reflog_expiry_prepare(const char *refname,\n \tif (cb->unreachable_expire_kind != UE_ALWAYS) {\n \t\tif (cb->unreachable_expire_kind == UE_HEAD) {\n \t\t\tstruct commit_list *elem;\n-\t\t\tstruct each_ref_fn_sha1_adapter wrapped_push_tip_to_list =\n-\t\t\t\t{push_tip_to_list, &cb->tips};\n \n-\t\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_push_tip_to_list);\n+\t\t\tfor_each_ref(push_tip_to_list, &cb->tips);\n \t\t\tfor (elem = cb->tips; elem; elem = elem->next)\n \t\t\t\tcommit_list_insert(elem->item, &cb->mark_list);\n \t\t} else {\n@@ -382,14 +380,14 @@ static void reflog_expiry_cleanup(void *cb_data)\n \t}\n }\n \n-static int collect_reflog(const char *ref, const unsigned char *sha1, int unused, void *cb_data)\n+static int collect_reflog(const char *ref, const struct object_id *oid, int unused, void *cb_data)\n {\n \tstruct collected_reflog *e;\n \tstruct collect_reflog_cb *cb = cb_data;\n \tsize_t namelen = strlen(ref);\n \n \te = xmalloc(sizeof(*e) + namelen + 1);\n-\thashcpy(e->sha1, sha1);\n+\thashcpy(e->sha1, oid->hash);\n \tmemcpy(e->reflog, ref, namelen + 1);\n \tALLOC_GROW(cb->e, cb->nr + 1, cb->alloc);\n \tcb->e[cb->nr++] = e;\n@@ -591,11 +589,9 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)\n \tif (do_all) {\n \t\tstruct collect_reflog_cb collected;\n \t\tint i;\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_collect_reflog =\n-\t\t\t{collect_reflog, &collected};\n \n \t\tmemset(&collected, 0, sizeof(collected));\n-\t\tfor_each_reflog(each_ref_fn_adapter, &wrapped_collect_reflog);\n+\t\tfor_each_reflog(collect_reflog, &collected);\n \t\tfor (i = 0; i < collected.nr; i++) {\n \t\t\tstruct collected_reflog *e = collected.e[i];\n \t\t\tset_reflog_expiry_param(&cb.cmd, explicit_expiry, e->reflog);\n-- \n2.4.0\n"},{"id":"262087","messageId":"1432579162-411464-16-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 15/56] add_branch_for_removal(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:41Z","receivedAt":"2015-05-25T18:38:41Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/remote.c | 8 +++-----\n 1 file changed, 3 insertions(+), 5 deletions(-)\n\ndiff --git a/builtin/remote.c b/builtin/remote.c\nindex 27a611b..1986e98 100644\n--- a/builtin/remote.c\n+++ b/builtin/remote.c\n@@ -509,7 +509,7 @@ struct branches_for_remote {\n };\n \n static int add_branch_for_removal(const char *refname,\n-\tconst unsigned char *sha1, int flags, void *cb_data)\n+\tconst struct object_id *oid, int flags, void *cb_data)\n {\n \tstruct branches_for_remote *branches = cb_data;\n \tstruct refspec refspec;\n@@ -545,7 +545,7 @@ static int add_branch_for_removal(const char *refname,\n \n \titem = string_list_append(branches->branches, refname);\n \titem->util = xmalloc(20);\n-\thashcpy(item->util, sha1);\n+\thashcpy(item->util, oid->hash);\n \n \treturn 0;\n }\n@@ -783,8 +783,6 @@ static int rm(int argc, const char **argv)\n \tstruct string_list skipped = STRING_LIST_INIT_DUP;\n \tstruct branches_for_remote cb_data;\n \tint i, result;\n-\tstruct each_ref_fn_sha1_adapter wrapped_add_branch_for_removal =\n-\t\t{add_branch_for_removal, &cb_data};\n \n \tmemset(&cb_data, 0, sizeof(cb_data));\n \tcb_data.branches = &branches;\n@@ -825,7 +823,7 @@ static int rm(int argc, const char **argv)\n \t * refs, which are invalidated when deleting a branch.\n \t */\n \tcb_data.remote = remote;\n-\tresult = for_each_ref(each_ref_fn_adapter, &wrapped_add_branch_for_removal);\n+\tresult = for_each_ref(add_branch_for_removal, &cb_data);\n \tstrbuf_release(&buf);\n \n \tif (!result)\n-- \n2.4.0\n"},{"id":"262090","messageId":"1432579162-411464-17-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 16/56] add_branch_for_removal(): don't set \"util\" field of string_list entries","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:42Z","receivedAt":"2015-05-25T18:38:42Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nThey were never used.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/remote.c | 7 ++-----\n 1 file changed, 2 insertions(+), 5 deletions(-)\n\ndiff --git a/builtin/remote.c b/builtin/remote.c\nindex 1986e98..ab39fea 100644\n--- a/builtin/remote.c\n+++ b/builtin/remote.c\n@@ -513,7 +513,6 @@ static int add_branch_for_removal(const char *refname,\n {\n \tstruct branches_for_remote *branches = cb_data;\n \tstruct refspec refspec;\n-\tstruct string_list_item *item;\n \tstruct known_remote *kr;\n \n \tmemset(&refspec, 0, sizeof(refspec));\n@@ -543,9 +542,7 @@ static int add_branch_for_removal(const char *refname,\n \tif (flags & REF_ISSYMREF)\n \t\treturn unlink(git_path(\"%s\", refname));\n \n-\titem = string_list_append(branches->branches, refname);\n-\titem->util = xmalloc(20);\n-\thashcpy(item->util, oid->hash);\n+\tstring_list_append(branches->branches, refname);\n \n \treturn 0;\n }\n@@ -828,7 +825,7 @@ static int rm(int argc, const char **argv)\n \n \tif (!result)\n \t\tresult = remove_branches(&branches);\n-\tstring_list_clear(&branches, 1);\n+\tstring_list_clear(&branches, 0);\n \n \tif (skipped.nr) {\n \t\tfprintf_ln(stderr,\n-- \n2.4.0\n"},{"id":"262041","messageId":"1432579162-411464-18-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 17/56] builtin/remote: rewrite functions to take object_id arguments","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:43Z","receivedAt":"2015-05-25T18:38:43Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/remote.c | 21 ++++++++-------------\n 1 file changed, 8 insertions(+), 13 deletions(-)\n\ndiff --git a/builtin/remote.c b/builtin/remote.c\nindex ab39fea..f4a6ec9 100644\n--- a/builtin/remote.c\n+++ b/builtin/remote.c\n@@ -554,20 +554,20 @@ struct rename_info {\n };\n \n static int read_remote_branches(const char *refname,\n-\tconst unsigned char *sha1, int flags, void *cb_data)\n+\tconst struct object_id *oid, int flags, void *cb_data)\n {\n \tstruct rename_info *rename = cb_data;\n \tstruct strbuf buf = STRBUF_INIT;\n \tstruct string_list_item *item;\n \tint flag;\n-\tunsigned char orig_sha1[20];\n+\tstruct object_id orig_oid;\n \tconst char *symref;\n \n \tstrbuf_addf(&buf, \"refs/remotes/%s/\", rename->old);\n \tif (starts_with(refname, buf.buf)) {\n \t\titem = string_list_append(rename->remote_branches, xstrdup(refname));\n \t\tsymref = resolve_ref_unsafe(refname, RESOLVE_REF_READING,\n-\t\t\t\t\t    orig_sha1, &flag);\n+\t\t\t\t\t    orig_oid.hash, &flag);\n \t\tif (flag & REF_ISSYMREF)\n \t\t\titem->util = xstrdup(symref);\n \t\telse\n@@ -620,8 +620,6 @@ static int mv(int argc, const char **argv)\n \tstruct string_list remote_branches = STRING_LIST_INIT_NODUP;\n \tstruct rename_info rename;\n \tint i, refspec_updated = 0;\n-\tstruct each_ref_fn_sha1_adapter wrapped_read_remote_branches =\n-\t\t{read_remote_branches, &rename};\n \n \tif (argc != 3)\n \t\tusage_with_options(builtin_remote_rename_usage, options);\n@@ -699,13 +697,13 @@ static int mv(int argc, const char **argv)\n \t * First remove symrefs, then rename the rest, finally create\n \t * the new symrefs.\n \t */\n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_read_remote_branches);\n+\tfor_each_ref(read_remote_branches, &rename);\n \tfor (i = 0; i < remote_branches.nr; i++) {\n \t\tstruct string_list_item *item = remote_branches.items + i;\n \t\tint flag = 0;\n-\t\tunsigned char sha1[20];\n+\t\tstruct object_id oid;\n \n-\t\tread_ref_full(item->string, RESOLVE_REF_READING, sha1, &flag);\n+\t\tread_ref_full(item->string, RESOLVE_REF_READING, oid.hash, &flag);\n \t\tif (!(flag & REF_ISSYMREF))\n \t\t\tcontinue;\n \t\tif (delete_ref(item->string, NULL, REF_NODEREF))\n@@ -866,7 +864,7 @@ static void free_remote_ref_states(struct ref_states *states)\n }\n \n static int append_ref_to_tracked_list(const char *refname,\n-\tconst unsigned char *sha1, int flags, void *cb_data)\n+\tconst struct object_id *oid, int flags, void *cb_data)\n {\n \tstruct ref_states *states = cb_data;\n \tstruct refspec refspec;\n@@ -909,10 +907,7 @@ static int get_remote_ref_states(const char *name,\n \t\tif (query & GET_PUSH_REF_STATES)\n \t\t\tget_push_ref_states(remote_refs, states);\n \t} else {\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_append_ref_to_tracked_list =\n-\t\t\t{append_ref_to_tracked_list, states};\n-\n-\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_append_ref_to_tracked_list);\n+\t\tfor_each_ref(append_ref_to_tracked_list, states);\n \t\tstring_list_sort(&states->tracked);\n \t\tget_push_ref_states_noquery(states);\n \t}\n-- \n2.4.0\n"},{"id":"262082","messageId":"1432579162-411464-19-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 18/56] show_reference(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:44Z","receivedAt":"2015-05-25T18:38:44Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/replace.c | 18 ++++++++----------\n 1 file changed, 8 insertions(+), 10 deletions(-)\n\ndiff --git a/builtin/replace.c b/builtin/replace.c\nindex bcf1508..0d52e7f 100644\n--- a/builtin/replace.c\n+++ b/builtin/replace.c\n@@ -35,7 +35,7 @@ struct show_data {\n \tenum replace_format format;\n };\n \n-static int show_reference(const char *refname, const unsigned char *sha1,\n+static int show_reference(const char *refname, const struct object_id *oid,\n \t\t\t  int flag, void *cb_data)\n {\n \tstruct show_data *data = cb_data;\n@@ -44,19 +44,19 @@ static int show_reference(const char *refname, const unsigned char *sha1,\n \t\tif (data->format == REPLACE_FORMAT_SHORT)\n \t\t\tprintf(\"%s\\n\", refname);\n \t\telse if (data->format == REPLACE_FORMAT_MEDIUM)\n-\t\t\tprintf(\"%s -> %s\\n\", refname, sha1_to_hex(sha1));\n+\t\t\tprintf(\"%s -> %s\\n\", refname, oid_to_hex(oid));\n \t\telse { /* data->format == REPLACE_FORMAT_LONG */\n-\t\t\tunsigned char object[20];\n+\t\t\tstruct object_id object;\n \t\t\tenum object_type obj_type, repl_type;\n \n-\t\t\tif (get_sha1(refname, object))\n+\t\t\tif (get_sha1(refname, object.hash))\n \t\t\t\treturn error(\"Failed to resolve '%s' as a valid ref.\", refname);\n \n-\t\t\tobj_type = sha1_object_info(object, NULL);\n-\t\t\trepl_type = sha1_object_info(sha1, NULL);\n+\t\t\tobj_type = sha1_object_info(object.hash, NULL);\n+\t\t\trepl_type = sha1_object_info(oid->hash, NULL);\n \n \t\t\tprintf(\"%s (%s) -> %s (%s)\\n\", refname, typename(obj_type),\n-\t\t\t       sha1_to_hex(sha1), typename(repl_type));\n+\t\t\t       oid_to_hex(oid), typename(repl_type));\n \t\t}\n \t}\n \n@@ -66,8 +66,6 @@ static int show_reference(const char *refname, const unsigned char *sha1,\n static int list_replace_refs(const char *pattern, const char *format)\n {\n \tstruct show_data data;\n-\tstruct each_ref_fn_sha1_adapter wrapped_show_reference =\n-\t\t{show_reference, (void *) &data};\n \n \tif (pattern == NULL)\n \t\tpattern = \"*\";\n@@ -84,7 +82,7 @@ static int list_replace_refs(const char *pattern, const char *format)\n \t\t    \"valid formats are 'short', 'medium' and 'long'\\n\",\n \t\t    format);\n \n-\tfor_each_replace_ref(each_ref_fn_adapter, &wrapped_show_reference);\n+\tfor_each_replace_ref(show_reference, (void *)&data);\n \n \treturn 0;\n }\n-- \n2.4.0\n"},{"id":"262081","messageId":"1432579162-411464-20-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 19/56] append_matching_ref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:45Z","receivedAt":"2015-05-25T18:38:45Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/show-branch.c | 13 ++++++-------\n 1 file changed, 6 insertions(+), 7 deletions(-)\n\ndiff --git a/builtin/show-branch.c b/builtin/show-branch.c\nindex cf918f4..b06f966 100644\n--- a/builtin/show-branch.c\n+++ b/builtin/show-branch.c\n@@ -440,7 +440,8 @@ static int count_slash(const char *s)\n \treturn cnt;\n }\n \n-static int append_matching_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)\n+static int append_matching_ref(const char *refname, const struct object_id *oid,\n+\t\t\t       int flag, void *cb_data)\n {\n \t/* we want to allow pattern hold/<asterisk> to show all\n \t * branches under refs/heads/hold/, and v0.99.9? to show\n@@ -456,10 +457,10 @@ static int append_matching_ref(const char *refname, const unsigned char *sha1, i\n \tif (wildmatch(match_ref_pattern, tail, 0, NULL))\n \t\treturn 0;\n \tif (starts_with(refname, \"refs/heads/\"))\n-\t\treturn append_head_ref(refname, sha1, flag, cb_data);\n+\t\treturn append_head_ref(refname, oid->hash, flag, cb_data);\n \tif (starts_with(refname, \"refs/tags/\"))\n-\t\treturn append_tag_ref(refname, sha1, flag, cb_data);\n-\treturn append_ref(refname, sha1, 0);\n+\t\treturn append_tag_ref(refname, oid->hash, flag, cb_data);\n+\treturn append_ref(refname, oid->hash, 0);\n }\n \n static void snarf_refs(int head, int remotes)\n@@ -544,12 +545,10 @@ static void append_one_rev(const char *av)\n \tif (strchr(av, '*') || strchr(av, '?') || strchr(av, '[')) {\n \t\t/* glob style match */\n \t\tint saved_matches = ref_name_cnt;\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_append_matching_ref =\n-\t\t\t{append_matching_ref, NULL};\n \n \t\tmatch_ref_pattern = av;\n \t\tmatch_ref_slash = count_slash(av);\n-\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_append_matching_ref);\n+\t\tfor_each_ref(append_matching_ref, NULL);\n \t\tif (saved_matches == ref_name_cnt &&\n \t\t    ref_name_cnt < MAX_REVS)\n \t\t\terror(\"no matching refs with %s\", av);\n-- \n2.4.0\n"},{"id":"262067","messageId":"1432579162-411464-21-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 20/56] builtin/show-branch: rewrite functions to take object_id arguments","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:46Z","receivedAt":"2015-05-25T18:38:46Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/show-branch.c | 35 +++++++++++++++++------------------\n 1 file changed, 17 insertions(+), 18 deletions(-)\n\ndiff --git a/builtin/show-branch.c b/builtin/show-branch.c\nindex b06f966..7e00657 100644\n--- a/builtin/show-branch.c\n+++ b/builtin/show-branch.c\n@@ -394,39 +394,42 @@ static int append_ref(const char *refname, const unsigned char *sha1,\n \treturn 0;\n }\n \n-static int append_head_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)\n+static int append_head_ref(const char *refname, const struct object_id *oid,\n+\t\t\t   int flag, void *cb_data)\n {\n-\tunsigned char tmp[20];\n+\tstruct object_id tmp;\n \tint ofs = 11;\n \tif (!starts_with(refname, \"refs/heads/\"))\n \t\treturn 0;\n \t/* If both heads/foo and tags/foo exists, get_sha1 would\n \t * get confused.\n \t */\n-\tif (get_sha1(refname + ofs, tmp) || hashcmp(tmp, sha1))\n+\tif (get_sha1(refname + ofs, tmp.hash) || oidcmp(&tmp, oid))\n \t\tofs = 5;\n-\treturn append_ref(refname + ofs, sha1, 0);\n+\treturn append_ref(refname + ofs, oid->hash, 0);\n }\n \n-static int append_remote_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)\n+static int append_remote_ref(const char *refname, const struct object_id *oid,\n+\t\t\t     int flag, void *cb_data)\n {\n-\tunsigned char tmp[20];\n+\tstruct object_id tmp;\n \tint ofs = 13;\n \tif (!starts_with(refname, \"refs/remotes/\"))\n \t\treturn 0;\n \t/* If both heads/foo and tags/foo exists, get_sha1 would\n \t * get confused.\n \t */\n-\tif (get_sha1(refname + ofs, tmp) || hashcmp(tmp, sha1))\n+\tif (get_sha1(refname + ofs, tmp.hash) || oidcmp(&tmp, oid))\n \t\tofs = 5;\n-\treturn append_ref(refname + ofs, sha1, 0);\n+\treturn append_ref(refname + ofs, oid->hash, 0);\n }\n \n-static int append_tag_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)\n+static int append_tag_ref(const char *refname, const struct object_id *oid,\n+\t\t\t  int flag, void *cb_data)\n {\n \tif (!starts_with(refname, \"refs/tags/\"))\n \t\treturn 0;\n-\treturn append_ref(refname + 5, sha1, 0);\n+\treturn append_ref(refname + 5, oid->hash, 0);\n }\n \n static const char *match_ref_pattern = NULL;\n@@ -457,9 +460,9 @@ static int append_matching_ref(const char *refname, const struct object_id *oid,\n \tif (wildmatch(match_ref_pattern, tail, 0, NULL))\n \t\treturn 0;\n \tif (starts_with(refname, \"refs/heads/\"))\n-\t\treturn append_head_ref(refname, oid->hash, flag, cb_data);\n+\t\treturn append_head_ref(refname, oid, flag, cb_data);\n \tif (starts_with(refname, \"refs/tags/\"))\n-\t\treturn append_tag_ref(refname, oid->hash, flag, cb_data);\n+\t\treturn append_tag_ref(refname, oid, flag, cb_data);\n \treturn append_ref(refname, oid->hash, 0);\n }\n \n@@ -467,18 +470,14 @@ static void snarf_refs(int head, int remotes)\n {\n \tif (head) {\n \t\tint orig_cnt = ref_name_cnt;\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_append_head_ref =\n-\t\t\t{append_head_ref, NULL};\n \n-\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_append_head_ref);\n+\t\tfor_each_ref(append_head_ref, NULL);\n \t\tsort_ref_range(orig_cnt, ref_name_cnt);\n \t}\n \tif (remotes) {\n \t\tint orig_cnt = ref_name_cnt;\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_append_remote_ref =\n-\t\t\t{append_remote_ref, NULL};\n \n-\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_append_remote_ref);\n+\t\tfor_each_ref(append_remote_ref, NULL);\n \t\tsort_ref_range(orig_cnt, ref_name_cnt);\n \t}\n }\n-- \n2.4.0\n"},{"id":"262083","messageId":"1432579162-411464-22-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 21/56] append_one_rev(): rewrite to work with object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:47Z","receivedAt":"2015-05-25T18:38:47Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/show-branch.c | 6 +++---\n 1 file changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/builtin/show-branch.c b/builtin/show-branch.c\nindex 7e00657..b861e41 100644\n--- a/builtin/show-branch.c\n+++ b/builtin/show-branch.c\n@@ -536,9 +536,9 @@ static int show_independent(struct commit **rev,\n \n static void append_one_rev(const char *av)\n {\n-\tunsigned char revkey[20];\n-\tif (!get_sha1(av, revkey)) {\n-\t\tappend_ref(av, revkey, 0);\n+\tstruct object_id revkey;\n+\tif (!get_sha1(av, revkey.hash)) {\n+\t\tappend_ref(av, revkey.hash, 0);\n \t\treturn;\n \t}\n \tif (strchr(av, '*') || strchr(av, '?') || strchr(av, '[')) {\n-- \n2.4.0\n"},{"id":"262079","messageId":"1432579162-411464-23-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 22/56] builtin/show-branch: rewrite functions to work with object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:48Z","receivedAt":"2015-05-25T18:38:48Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/show-branch.c | 42 +++++++++++++++++++++---------------------\n 1 file changed, 21 insertions(+), 21 deletions(-)\n\ndiff --git a/builtin/show-branch.c b/builtin/show-branch.c\nindex b861e41..826d9fa 100644\n--- a/builtin/show-branch.c\n+++ b/builtin/show-branch.c\n@@ -369,10 +369,10 @@ static void sort_ref_range(int bottom, int top)\n \t      compare_ref_name);\n }\n \n-static int append_ref(const char *refname, const unsigned char *sha1,\n+static int append_ref(const char *refname, const struct object_id *oid,\n \t\t      int allow_dups)\n {\n-\tstruct commit *commit = lookup_commit_reference_gently(sha1, 1);\n+\tstruct commit *commit = lookup_commit_reference_gently(oid->hash, 1);\n \tint i;\n \n \tif (!commit)\n@@ -406,7 +406,7 @@ static int append_head_ref(const char *refname, const struct object_id *oid,\n \t */\n \tif (get_sha1(refname + ofs, tmp.hash) || oidcmp(&tmp, oid))\n \t\tofs = 5;\n-\treturn append_ref(refname + ofs, oid->hash, 0);\n+\treturn append_ref(refname + ofs, oid, 0);\n }\n \n static int append_remote_ref(const char *refname, const struct object_id *oid,\n@@ -421,7 +421,7 @@ static int append_remote_ref(const char *refname, const struct object_id *oid,\n \t */\n \tif (get_sha1(refname + ofs, tmp.hash) || oidcmp(&tmp, oid))\n \t\tofs = 5;\n-\treturn append_ref(refname + ofs, oid->hash, 0);\n+\treturn append_ref(refname + ofs, oid, 0);\n }\n \n static int append_tag_ref(const char *refname, const struct object_id *oid,\n@@ -429,7 +429,7 @@ static int append_tag_ref(const char *refname, const struct object_id *oid,\n {\n \tif (!starts_with(refname, \"refs/tags/\"))\n \t\treturn 0;\n-\treturn append_ref(refname + 5, oid->hash, 0);\n+\treturn append_ref(refname + 5, oid, 0);\n }\n \n static const char *match_ref_pattern = NULL;\n@@ -463,7 +463,7 @@ static int append_matching_ref(const char *refname, const struct object_id *oid,\n \t\treturn append_head_ref(refname, oid, flag, cb_data);\n \tif (starts_with(refname, \"refs/tags/\"))\n \t\treturn append_tag_ref(refname, oid, flag, cb_data);\n-\treturn append_ref(refname, oid->hash, 0);\n+\treturn append_ref(refname, oid, 0);\n }\n \n static void snarf_refs(int head, int remotes)\n@@ -538,7 +538,7 @@ static void append_one_rev(const char *av)\n {\n \tstruct object_id revkey;\n \tif (!get_sha1(av, revkey.hash)) {\n-\t\tappend_ref(av, revkey.hash, 0);\n+\t\tappend_ref(av, &revkey, 0);\n \t\treturn;\n \t}\n \tif (strchr(av, '*') || strchr(av, '?') || strchr(av, '[')) {\n@@ -643,7 +643,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)\n \tchar head[128];\n \tconst char *head_p;\n \tint head_len;\n-\tunsigned char head_sha1[20];\n+\tstruct object_id head_oid;\n \tint merge_base = 0;\n \tint independent = 0;\n \tint no_name = 0;\n@@ -729,7 +729,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)\n \t\tall_heads = 1;\n \n \tif (reflog) {\n-\t\tunsigned char sha1[20];\n+\t\tstruct object_id oid;\n \t\tchar nth_desc[256];\n \t\tchar *ref;\n \t\tint base = 0;\n@@ -740,7 +740,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)\n \n \t\t\tfake_av[0] = resolve_refdup(\"HEAD\",\n \t\t\t\t\t\t    RESOLVE_REF_READING,\n-\t\t\t\t\t\t    sha1, NULL);\n+\t\t\t\t\t\t    oid.hash, NULL);\n \t\t\tfake_av[1] = NULL;\n \t\t\tav = fake_av;\n \t\t\tac = 1;\n@@ -751,7 +751,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)\n \t\tif (MAX_REVS < reflog)\n \t\t\tdie(\"Only %d entries can be shown at one time.\",\n \t\t\t    MAX_REVS);\n-\t\tif (!dwim_ref(*av, strlen(*av), sha1, &ref))\n+\t\tif (!dwim_ref(*av, strlen(*av), oid.hash, &ref))\n \t\t\tdie(\"No such ref %s\", *av);\n \n \t\t/* Has the base been specified? */\n@@ -762,7 +762,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)\n \t\t\t\t/* Ah, that is a date spec... */\n \t\t\t\tunsigned long at;\n \t\t\t\tat = approxidate(reflog_base);\n-\t\t\t\tread_ref_at(ref, flags, at, -1, sha1, NULL,\n+\t\t\t\tread_ref_at(ref, flags, at, -1, oid.hash, NULL,\n \t\t\t\t\t    NULL, NULL, &base);\n \t\t\t}\n \t\t}\n@@ -773,7 +773,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)\n \t\t\tunsigned long timestamp;\n \t\t\tint tz;\n \n-\t\t\tif (read_ref_at(ref, flags, 0, base+i, sha1, &logmsg,\n+\t\t\tif (read_ref_at(ref, flags, 0, base+i, oid.hash, &logmsg,\n \t\t\t\t\t&timestamp, &tz, NULL)) {\n \t\t\t\treflog = i;\n \t\t\t\tbreak;\n@@ -788,7 +788,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)\n \t\t\t\t\t\tmsg);\n \t\t\tfree(logmsg);\n \t\t\tsprintf(nth_desc, \"%s@{%d}\", *av, base+i);\n-\t\t\tappend_ref(nth_desc, sha1, 1);\n+\t\t\tappend_ref(nth_desc, &oid, 1);\n \t\t}\n \t\tfree(ref);\n \t}\n@@ -802,7 +802,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)\n \t}\n \n \thead_p = resolve_ref_unsafe(\"HEAD\", RESOLVE_REF_READING,\n-\t\t\t\t    head_sha1, NULL);\n+\t\t\t\t    head_oid.hash, NULL);\n \tif (head_p) {\n \t\thead_len = strlen(head_p);\n \t\tmemcpy(head, head_p, head_len + 1);\n@@ -821,7 +821,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)\n \t\t\tif (rev_is_head(head,\n \t\t\t\t\thead_len,\n \t\t\t\t\tref_name[i],\n-\t\t\t\t\thead_sha1, NULL))\n+\t\t\t\t\thead_oid.hash, NULL))\n \t\t\t\thas_head++;\n \t\t}\n \t\tif (!has_head) {\n@@ -836,17 +836,17 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)\n \t}\n \n \tfor (num_rev = 0; ref_name[num_rev]; num_rev++) {\n-\t\tunsigned char revkey[20];\n+\t\tstruct object_id revkey;\n \t\tunsigned int flag = 1u << (num_rev + REV_SHIFT);\n \n \t\tif (MAX_REVS <= num_rev)\n \t\t\tdie(\"cannot handle more than %d revs.\", MAX_REVS);\n-\t\tif (get_sha1(ref_name[num_rev], revkey))\n+\t\tif (get_sha1(ref_name[num_rev], revkey.hash))\n \t\t\tdie(\"'%s' is not a valid ref.\", ref_name[num_rev]);\n-\t\tcommit = lookup_commit_reference(revkey);\n+\t\tcommit = lookup_commit_reference(revkey.hash);\n \t\tif (!commit)\n \t\t\tdie(\"cannot find commit %s (%s)\",\n-\t\t\t    ref_name[num_rev], revkey);\n+\t\t\t    ref_name[num_rev], revkey.hash);\n \t\tparse_commit(commit);\n \t\tmark_seen(commit, &seen);\n \n@@ -880,7 +880,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)\n \t\t\tint is_head = rev_is_head(head,\n \t\t\t\t\t\t  head_len,\n \t\t\t\t\t\t  ref_name[i],\n-\t\t\t\t\t\t  head_sha1,\n+\t\t\t\t\t\t  head_oid.hash,\n \t\t\t\t\t\t  rev[i]->object.sha1);\n \t\t\tif (extra < 0)\n \t\t\t\tprintf(\"%c [%s] \",\n-- \n2.4.0\n"},{"id":"262044","messageId":"1432579162-411464-24-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 23/56] cmd_show_branch(): fix error message","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:49Z","receivedAt":"2015-05-25T18:38:49Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nWe need to convert the SHA-1 to hexadecimal before printing it.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/show-branch.c | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/builtin/show-branch.c b/builtin/show-branch.c\nindex 826d9fa..323f857 100644\n--- a/builtin/show-branch.c\n+++ b/builtin/show-branch.c\n@@ -846,7 +846,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)\n \t\tcommit = lookup_commit_reference(revkey.hash);\n \t\tif (!commit)\n \t\t\tdie(\"cannot find commit %s (%s)\",\n-\t\t\t    ref_name[num_rev], revkey.hash);\n+\t\t\t    ref_name[num_rev], oid_to_hex(&revkey));\n \t\tparse_commit(commit);\n \t\tmark_seen(commit, &seen);\n \n-- \n2.4.0\n"},{"id":"262068","messageId":"1432579162-411464-25-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 24/56] fsck: change functions to use object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:50Z","receivedAt":"2015-05-25T18:38:50Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/fsck.c | 29 +++++++++++++----------------\n 1 file changed, 13 insertions(+), 16 deletions(-)\n\ndiff --git a/builtin/fsck.c b/builtin/fsck.c\nindex 48d0c2e..4e8e2ee 100644\n--- a/builtin/fsck.c\n+++ b/builtin/fsck.c\n@@ -25,7 +25,7 @@ static int include_reflogs = 1;\n static int check_full = 1;\n static int check_strict;\n static int keep_cache_objects;\n-static unsigned char head_sha1[20];\n+static struct object_id head_oid;\n static const char *head_points_at;\n static int errors_found;\n static int write_lost_and_found;\n@@ -476,19 +476,21 @@ static int fsck_handle_reflog_ent(unsigned char *osha1, unsigned char *nsha1,\n \treturn 0;\n }\n \n-static int fsck_handle_reflog(const char *logname, const unsigned char *sha1, int flag, void *cb_data)\n+static int fsck_handle_reflog(const char *logname, const struct object_id *oid,\n+\t\t\t      int flag, void *cb_data)\n {\n \tfor_each_reflog_ent(logname, fsck_handle_reflog_ent, NULL);\n \treturn 0;\n }\n \n-static int fsck_handle_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)\n+static int fsck_handle_ref(const char *refname, const struct object_id *oid,\n+\t\t\t   int flag, void *cb_data)\n {\n \tstruct object *obj;\n \n-\tobj = parse_object(sha1);\n+\tobj = parse_object(oid->hash);\n \tif (!obj) {\n-\t\terror(\"%s: invalid sha1 pointer %s\", refname, sha1_to_hex(sha1));\n+\t\terror(\"%s: invalid sha1 pointer %s\", refname, oid_to_hex(oid));\n \t\terrors_found |= ERROR_REACHABLE;\n \t\t/* We'll continue with the rest despite the error.. */\n \t\treturn 0;\n@@ -504,16 +506,11 @@ static int fsck_handle_ref(const char *refname, const unsigned char *sha1, int f\n \n static void get_default_heads(void)\n {\n-\tstruct each_ref_fn_sha1_adapter wrapped_fsck_handle_ref =\n-\t\t{fsck_handle_ref, NULL};\n-\tstruct each_ref_fn_sha1_adapter wrapped_fsck_handle_reflog =\n-\t\t{fsck_handle_reflog, NULL};\n-\n-\tif (head_points_at && !is_null_sha1(head_sha1))\n-\t\tfsck_handle_ref(\"HEAD\", head_sha1, 0, NULL);\n-\tfor_each_rawref(each_ref_fn_adapter, &wrapped_fsck_handle_ref);\n+\tif (head_points_at && !is_null_oid(&head_oid))\n+\t\tfsck_handle_ref(\"HEAD\", &head_oid, 0, NULL);\n+\tfor_each_rawref(fsck_handle_ref, NULL);\n \tif (include_reflogs)\n-\t\tfor_each_reflog(each_ref_fn_adapter, &wrapped_fsck_handle_reflog);\n+\t\tfor_each_reflog(fsck_handle_reflog, NULL);\n \n \t/*\n \t * Not having any default heads isn't really fatal, but\n@@ -561,7 +558,7 @@ static int fsck_head_link(void)\n \tif (verbose)\n \t\tfprintf(stderr, \"Checking HEAD link\\n\");\n \n-\thead_points_at = resolve_ref_unsafe(\"HEAD\", 0, head_sha1, &flag);\n+\thead_points_at = resolve_ref_unsafe(\"HEAD\", 0, head_oid.hash, &flag);\n \tif (!head_points_at)\n \t\treturn error(\"Invalid HEAD\");\n \tif (!strcmp(head_points_at, \"HEAD\"))\n@@ -570,7 +567,7 @@ static int fsck_head_link(void)\n \telse if (!starts_with(head_points_at, \"refs/heads/\"))\n \t\treturn error(\"HEAD points to something strange (%s)\",\n \t\t\t     head_points_at);\n-\tif (is_null_sha1(head_sha1)) {\n+\tif (is_null_oid(&head_oid)) {\n \t\tif (null_is_error)\n \t\t\treturn error(\"HEAD: detached HEAD points at nothing\");\n \t\tfprintf(stderr, \"notice: HEAD points to an unborn branch (%s)\\n\",\n-- \n2.4.0\n"},{"id":"262045","messageId":"1432579162-411464-26-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 25/56] builtin/show-ref: rewrite to use object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:51Z","receivedAt":"2015-05-25T18:38:51Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/show-ref.c | 33 +++++++++++++++------------------\n 1 file changed, 15 insertions(+), 18 deletions(-)\n\ndiff --git a/builtin/show-ref.c b/builtin/show-ref.c\nindex 8e25536..18f84fb 100644\n--- a/builtin/show-ref.c\n+++ b/builtin/show-ref.c\n@@ -17,16 +17,17 @@ static int deref_tags, show_head, tags_only, heads_only, found_match, verify,\n static const char **pattern;\n static const char *exclude_existing_arg;\n \n-static void show_one(const char *refname, const unsigned char *sha1)\n+static void show_one(const char *refname, const struct object_id *oid)\n {\n-\tconst char *hex = find_unique_abbrev(sha1, abbrev);\n+\tconst char *hex = find_unique_abbrev(oid->hash, abbrev);\n \tif (hash_only)\n \t\tprintf(\"%s\\n\", hex);\n \telse\n \t\tprintf(\"%s %s\\n\", hex, refname);\n }\n \n-static int show_ref(const char *refname, const unsigned char *sha1, int flag, void *cbdata)\n+static int show_ref(const char *refname, const struct object_id *oid,\n+\t\t    int flag, void *cbdata)\n {\n \tconst char *hex;\n \tunsigned char peeled[20];\n@@ -69,14 +70,14 @@ match:\n \t * detect and return error if the repository is corrupt and\n \t * ref points at a nonexistent object.\n \t */\n-\tif (!has_sha1_file(sha1))\n+\tif (!has_sha1_file(oid->hash))\n \t\tdie(\"git show-ref: bad ref %s (%s)\", refname,\n-\t\t    sha1_to_hex(sha1));\n+\t\t    oid_to_hex(oid));\n \n \tif (quiet)\n \t\treturn 0;\n \n-\tshow_one(refname, sha1);\n+\tshow_one(refname, oid);\n \n \tif (!deref_tags)\n \t\treturn 0;\n@@ -88,7 +89,8 @@ match:\n \treturn 0;\n }\n \n-static int add_existing(const char *refname, const unsigned char *sha1, int flag, void *cbdata)\n+static int add_existing(const char *refname, const struct object_id *oid,\n+\t\t\tint flag, void *cbdata)\n {\n \tstruct string_list *list = (struct string_list *)cbdata;\n \tstring_list_insert(list, refname);\n@@ -109,10 +111,8 @@ static int exclude_existing(const char *match)\n \tstatic struct string_list existing_refs = STRING_LIST_INIT_DUP;\n \tchar buf[1024];\n \tint matchlen = match ? strlen(match) : 0;\n-\tstruct each_ref_fn_sha1_adapter wrapped_add_existing =\n-\t\t{add_existing, &existing_refs};\n \n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_existing);\n+\tfor_each_ref(add_existing, &existing_refs);\n \twhile (fgets(buf, sizeof(buf), stdin)) {\n \t\tchar *ref;\n \t\tint len = strlen(buf);\n@@ -193,9 +193,6 @@ static const struct option show_ref_options[] = {\n \n int cmd_show_ref(int argc, const char **argv, const char *prefix)\n {\n-\tstruct each_ref_fn_sha1_adapter wrapped_show_ref =\n-\t\t{show_ref, NULL};\n-\n \tif (argc == 2 && !strcmp(argv[1], \"-h\"))\n \t\tusage_with_options(show_ref_usage, show_ref_options);\n \n@@ -213,12 +210,12 @@ int cmd_show_ref(int argc, const char **argv, const char *prefix)\n \t\tif (!pattern)\n \t\t\tdie(\"--verify requires a reference\");\n \t\twhile (*pattern) {\n-\t\t\tunsigned char sha1[20];\n+\t\t\tstruct object_id oid;\n \n \t\t\tif (starts_with(*pattern, \"refs/\") &&\n-\t\t\t    !read_ref(*pattern, sha1)) {\n+\t\t\t    !read_ref(*pattern, oid.hash)) {\n \t\t\t\tif (!quiet)\n-\t\t\t\t\tshow_one(*pattern, sha1);\n+\t\t\t\t\tshow_one(*pattern, &oid);\n \t\t\t}\n \t\t\telse if (!quiet)\n \t\t\t\tdie(\"'%s' - not a valid ref\", *pattern);\n@@ -230,8 +227,8 @@ int cmd_show_ref(int argc, const char **argv, const char *prefix)\n \t}\n \n \tif (show_head)\n-\t\thead_ref(each_ref_fn_adapter, &wrapped_show_ref);\n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_show_ref);\n+\t\thead_ref(show_ref, NULL);\n+\tfor_each_ref(show_ref, NULL);\n \tif (!found_match) {\n \t\tif (verify && !quiet)\n \t\t\tdie(\"No match\");\n-- \n2.4.0\n"},{"id":"262048","messageId":"1432579162-411464-27-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 26/56] show_ref(): convert local variable peeled to object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:52Z","receivedAt":"2015-05-25T18:38:52Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/show-ref.c | 6 +++---\n 1 file changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/builtin/show-ref.c b/builtin/show-ref.c\nindex 18f84fb..dfbc314 100644\n--- a/builtin/show-ref.c\n+++ b/builtin/show-ref.c\n@@ -30,7 +30,7 @@ static int show_ref(const char *refname, const struct object_id *oid,\n \t\t    int flag, void *cbdata)\n {\n \tconst char *hex;\n-\tunsigned char peeled[20];\n+\tstruct object_id peeled;\n \n \tif (show_head && !strcmp(refname, \"HEAD\"))\n \t\tgoto match;\n@@ -82,8 +82,8 @@ match:\n \tif (!deref_tags)\n \t\treturn 0;\n \n-\tif (!peel_ref(refname, peeled)) {\n-\t\thex = find_unique_abbrev(peeled, abbrev);\n+\tif (!peel_ref(refname, peeled.hash)) {\n+\t\thex = find_unique_abbrev(peeled.hash, abbrev);\n \t\tprintf(\"%s %s^{}\\n\", hex, refname);\n \t}\n \treturn 0;\n-- \n2.4.0\n"},{"id":"262078","messageId":"1432579162-411464-28-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 27/56] builtin/show-ref: rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:53Z","receivedAt":"2015-05-25T18:38:53Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n builtin/tag.c | 20 +++++++++-----------\n 1 file changed, 9 insertions(+), 11 deletions(-)\n\ndiff --git a/builtin/tag.c b/builtin/tag.c\nindex 7d8cd8c..5f6cdc5 100644\n--- a/builtin/tag.c\n+++ b/builtin/tag.c\n@@ -176,7 +176,7 @@ static enum contains_result contains(struct commit *candidate,\n \treturn contains_test(candidate, want);\n }\n \n-static void show_tag_lines(const unsigned char *sha1, int lines)\n+static void show_tag_lines(const struct object_id *oid, int lines)\n {\n \tint i;\n \tunsigned long size;\n@@ -184,14 +184,14 @@ static void show_tag_lines(const unsigned char *sha1, int lines)\n \tchar *buf, *sp, *eol;\n \tsize_t len;\n \n-\tbuf = read_sha1_file(sha1, &type, &size);\n+\tbuf = read_sha1_file(oid->hash, &type, &size);\n \tif (!buf)\n-\t\tdie_errno(\"unable to read object %s\", sha1_to_hex(sha1));\n+\t\tdie_errno(\"unable to read object %s\", oid_to_hex(oid));\n \tif (type != OBJ_COMMIT && type != OBJ_TAG)\n \t\tgoto free_return;\n \tif (!size)\n \t\tdie(\"an empty %s object %s?\",\n-\t\t    typename(type), sha1_to_hex(sha1));\n+\t\t    typename(type), oid_to_hex(oid));\n \n \t/* skip header */\n \tsp = strstr(buf, \"\\n\\n\");\n@@ -215,7 +215,7 @@ free_return:\n \tfree(buf);\n }\n \n-static int show_reference(const char *refname, const unsigned char *sha1,\n+static int show_reference(const char *refname, const struct object_id *oid,\n \t\t\t  int flag, void *cb_data)\n {\n \tstruct tag_filter *filter = cb_data;\n@@ -224,14 +224,14 @@ static int show_reference(const char *refname, const unsigned char *sha1,\n \t\tif (filter->with_commit) {\n \t\t\tstruct commit *commit;\n \n-\t\t\tcommit = lookup_commit_reference_gently(sha1, 1);\n+\t\t\tcommit = lookup_commit_reference_gently(oid->hash, 1);\n \t\t\tif (!commit)\n \t\t\t\treturn 0;\n \t\t\tif (!contains(commit, filter->with_commit))\n \t\t\t\treturn 0;\n \t\t}\n \n-\t\tif (points_at.nr && !match_points_at(refname, sha1))\n+\t\tif (points_at.nr && !match_points_at(refname, oid->hash))\n \t\t\treturn 0;\n \n \t\tif (!filter->lines) {\n@@ -242,7 +242,7 @@ static int show_reference(const char *refname, const unsigned char *sha1,\n \t\t\treturn 0;\n \t\t}\n \t\tprintf(\"%-15s \", refname);\n-\t\tshow_tag_lines(sha1, filter->lines);\n+\t\tshow_tag_lines(oid, filter->lines);\n \t\tputchar('\\n');\n \t}\n \n@@ -260,8 +260,6 @@ static int list_tags(const char **patterns, int lines,\n \t\t     struct commit_list *with_commit, int sort)\n {\n \tstruct tag_filter filter;\n-\tstruct each_ref_fn_sha1_adapter wrapped_show_reference =\n-\t\t{show_reference, (void *)&filter};\n \n \tfilter.patterns = patterns;\n \tfilter.lines = lines;\n@@ -270,7 +268,7 @@ static int list_tags(const char **patterns, int lines,\n \tmemset(&filter.tags, 0, sizeof(filter.tags));\n \tfilter.tags.strdup_strings = 1;\n \n-\tfor_each_tag_ref(each_ref_fn_adapter, &wrapped_show_reference);\n+\tfor_each_tag_ref(show_reference, (void *)&filter);\n \tif (sort) {\n \t\tint i;\n \t\tif ((sort & SORT_MASK) == VERCMP_SORT)\n-- \n2.4.0\n"},{"id":"262075","messageId":"1432579162-411464-29-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 28/56] append_similar_ref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:54Z","receivedAt":"2015-05-25T18:38:54Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n help.c | 6 ++----\n 1 file changed, 2 insertions(+), 4 deletions(-)\n\ndiff --git a/help.c b/help.c\nindex f813093..6f3415b 100644\n--- a/help.c\n+++ b/help.c\n@@ -407,7 +407,7 @@ struct similar_ref_cb {\n \tstruct string_list *similar_refs;\n };\n \n-static int append_similar_ref(const char *refname, const unsigned char *sha1,\n+static int append_similar_ref(const char *refname, const struct object_id *oid,\n \t\t\t      int flags, void *cb_data)\n {\n \tstruct similar_ref_cb *cb = (struct similar_ref_cb *)(cb_data);\n@@ -425,12 +425,10 @@ static struct string_list guess_refs(const char *ref)\n {\n \tstruct similar_ref_cb ref_cb;\n \tstruct string_list similar_refs = STRING_LIST_INIT_NODUP;\n-\tstruct each_ref_fn_sha1_adapter wrapped_append_similar_ref =\n-\t\t{append_similar_ref, &ref_cb};\n \n \tref_cb.base_ref = ref;\n \tref_cb.similar_refs = &similar_refs;\n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_append_similar_ref);\n+\tfor_each_ref(append_similar_ref, &ref_cb);\n \treturn similar_refs;\n }\n \n-- \n2.4.0\n"},{"id":"262051","messageId":"1432579162-411464-30-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 29/56] http-backend: rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:55Z","receivedAt":"2015-05-25T18:38:55Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n http-backend.c | 23 +++++++++--------------\n 1 file changed, 9 insertions(+), 14 deletions(-)\n\ndiff --git a/http-backend.c b/http-backend.c\nindex e4f3de3..a2d388d 100644\n--- a/http-backend.c\n+++ b/http-backend.c\n@@ -350,16 +350,16 @@ static void run_service(const char **argv)\n \t\texit(1);\n }\n \n-static int show_text_ref(const char *name, const unsigned char *sha1,\n-\tint flag, void *cb_data)\n+static int show_text_ref(const char *name, const struct object_id *oid,\n+\t\t\t int flag, void *cb_data)\n {\n \tconst char *name_nons = strip_namespace(name);\n \tstruct strbuf *buf = cb_data;\n-\tstruct object *o = parse_object(sha1);\n+\tstruct object *o = parse_object(oid->hash);\n \tif (!o)\n \t\treturn 0;\n \n-\tstrbuf_addf(buf, \"%s\\t%s\\n\", sha1_to_hex(sha1), name_nons);\n+\tstrbuf_addf(buf, \"%s\\t%s\\n\", oid_to_hex(oid), name_nons);\n \tif (o->type == OBJ_TAG) {\n \t\to = deref_tag(o, name, 0);\n \t\tif (!o)\n@@ -395,18 +395,15 @@ static void get_info_refs(char *arg)\n \t\trun_service(argv);\n \n \t} else {\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_show_text_ref =\n-\t\t\t{show_text_ref, &buf};\n-\n \t\tselect_getanyfile();\n-\t\tfor_each_namespaced_ref(each_ref_fn_adapter, &wrapped_show_text_ref);\n+\t\tfor_each_namespaced_ref(show_text_ref, &buf);\n \t\tsend_strbuf(\"text/plain\", &buf);\n \t}\n \tstrbuf_release(&buf);\n }\n \n-static int show_head_ref(const char *refname, const unsigned char *sha1,\n-\tint flag, void *cb_data)\n+static int show_head_ref(const char *refname, const struct object_id *oid,\n+\t\t\t int flag, void *cb_data)\n {\n \tstruct strbuf *buf = cb_data;\n \n@@ -419,7 +416,7 @@ static int show_head_ref(const char *refname, const unsigned char *sha1,\n \n \t\tstrbuf_addf(buf, \"ref: %s\\n\", target_nons);\n \t} else {\n-\t\tstrbuf_addf(buf, \"%s\\n\", sha1_to_hex(sha1));\n+\t\tstrbuf_addf(buf, \"%s\\n\", oid_to_hex(oid));\n \t}\n \n \treturn 0;\n@@ -428,11 +425,9 @@ static int show_head_ref(const char *refname, const unsigned char *sha1,\n static void get_head(char *arg)\n {\n \tstruct strbuf buf = STRBUF_INIT;\n-\tstruct each_ref_fn_sha1_adapter wrapped_show_head_ref =\n-\t\t{show_head_ref, &buf};\n \n \tselect_getanyfile();\n-\thead_ref_namespaced(each_ref_fn_adapter, &wrapped_show_head_ref);\n+\thead_ref_namespaced(show_head_ref, &buf);\n \tsend_strbuf(\"text/plain\", &buf);\n \tstrbuf_release(&buf);\n }\n-- \n2.4.0\n"},{"id":"262054","messageId":"1432579162-411464-31-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 30/56] show_head_ref(): convert local variable \"unused\" to object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:56Z","receivedAt":"2015-05-25T18:38:56Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n http-backend.c | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/http-backend.c b/http-backend.c\nindex a2d388d..55353ad 100644\n--- a/http-backend.c\n+++ b/http-backend.c\n@@ -408,10 +408,10 @@ static int show_head_ref(const char *refname, const struct object_id *oid,\n \tstruct strbuf *buf = cb_data;\n \n \tif (flag & REF_ISSYMREF) {\n-\t\tunsigned char unused[20];\n+\t\tstruct object_id unused;\n \t\tconst char *target = resolve_ref_unsafe(refname,\n \t\t\t\t\t\t\tRESOLVE_REF_READING,\n-\t\t\t\t\t\t\tunused, NULL);\n+\t\t\t\t\t\t\tunused.hash, NULL);\n \t\tconst char *target_nons = strip_namespace(target);\n \n \t\tstrbuf_addf(buf, \"ref: %s\\n\", target_nons);\n-- \n2.4.0\n"},{"id":"262076","messageId":"1432579162-411464-32-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 31/56] add_ref_decoration(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:57Z","receivedAt":"2015-05-25T18:38:57Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n log-tree.c | 11 +++++------\n 1 file changed, 5 insertions(+), 6 deletions(-)\n\ndiff --git a/log-tree.c b/log-tree.c\nindex 1a0e170..abf5cc3 100644\n--- a/log-tree.c\n+++ b/log-tree.c\n@@ -89,7 +89,8 @@ const struct name_decoration *get_name_decoration(const struct object *obj)\n \treturn lookup_decoration(&name_decoration, obj);\n }\n \n-static int add_ref_decoration(const char *refname, const unsigned char *sha1, int flags, void *cb_data)\n+static int add_ref_decoration(const char *refname, const struct object_id *oid,\n+\t\t\t      int flags, void *cb_data)\n {\n \tstruct object *obj;\n \tenum decoration_type type = DECORATION_NONE;\n@@ -110,7 +111,7 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in\n \t\treturn 0;\n \t}\n \n-\tobj = parse_object(sha1);\n+\tobj = parse_object(oid->hash);\n \tif (!obj)\n \t\treturn 0;\n \n@@ -149,13 +150,11 @@ static int add_graft_decoration(const struct commit_graft *graft, void *cb_data)\n void load_ref_decorations(int flags)\n {\n \tif (!decoration_loaded) {\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_add_ref_decoration =\n-\t\t\t{add_ref_decoration, NULL};\n \n \t\tdecoration_loaded = 1;\n \t\tdecoration_flags = flags;\n-\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_ref_decoration);\n-\t\thead_ref(each_ref_fn_adapter, &wrapped_add_ref_decoration);\n+\t\tfor_each_ref(add_ref_decoration, NULL);\n+\t\thead_ref(add_ref_decoration, NULL);\n \t\tfor_each_commit_graft(add_graft_decoration, NULL);\n \t}\n }\n-- \n2.4.0\n"},{"id":"262074","messageId":"1432579162-411464-33-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 32/56] add_ref_decoration(): convert local variable original_sha1 to object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:58Z","receivedAt":"2015-05-25T18:38:58Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n log-tree.c | 6 +++---\n 1 file changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/log-tree.c b/log-tree.c\nindex abf5cc3..01beb11 100644\n--- a/log-tree.c\n+++ b/log-tree.c\n@@ -98,14 +98,14 @@ static int add_ref_decoration(const char *refname, const struct object_id *oid,\n \tassert(cb_data == NULL);\n \n \tif (starts_with(refname, \"refs/replace/\")) {\n-\t\tunsigned char original_sha1[20];\n+\t\tstruct object_id original_oid;\n \t\tif (!check_replace_refs)\n \t\t\treturn 0;\n-\t\tif (get_sha1_hex(refname + 13, original_sha1)) {\n+\t\tif (get_oid_hex(refname + 13, &original_oid)) {\n \t\t\twarning(\"invalid replace ref %s\", refname);\n \t\t\treturn 0;\n \t\t}\n-\t\tobj = parse_object(original_sha1);\n+\t\tobj = parse_object(original_oid.hash);\n \t\tif (obj)\n \t\t\tadd_name_decoration(DECORATION_GRAFTED, \"replaced\", obj);\n \t\treturn 0;\n-- \n2.4.0\n"},{"id":"262077","messageId":"1432579162-411464-34-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 33/56] string_list_add_one_ref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:38:59Z","receivedAt":"2015-05-25T18:38:59Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n notes.c | 7 ++-----\n 1 file changed, 2 insertions(+), 5 deletions(-)\n\ndiff --git a/notes.c b/notes.c\nindex baa1c41..df08209 100644\n--- a/notes.c\n+++ b/notes.c\n@@ -918,7 +918,7 @@ out:\n \treturn ret;\n }\n \n-static int string_list_add_one_ref(const char *refname, const unsigned char *sha1,\n+static int string_list_add_one_ref(const char *refname, const struct object_id *oid,\n \t\t\t\t   int flag, void *cb)\n {\n \tstruct string_list *refs = cb;\n@@ -932,12 +932,9 @@ static int string_list_add_one_ref(const char *refname, const unsigned char *sha\n  */\n void string_list_add_refs_by_glob(struct string_list *list, const char *glob)\n {\n-\tstruct each_ref_fn_sha1_adapter wrapped_string_list_add_one_ref =\n-\t\t{string_list_add_one_ref, list};\n-\n \tassert(list->strdup_strings);\n \tif (has_glob_specials(glob)) {\n-\t\tfor_each_glob_ref(each_ref_fn_adapter, glob, &wrapped_string_list_add_one_ref);\n+\t\tfor_each_glob_ref(string_list_add_one_ref, glob, list);\n \t} else {\n \t\tunsigned char sha1[20];\n \t\tif (get_sha1(glob, sha1))\n-- \n2.4.0\n"},{"id":"262073","messageId":"1432579162-411464-35-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 34/56] add_one_ref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:00Z","receivedAt":"2015-05-25T18:39:00Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n reachable.c | 11 +++++------\n 1 file changed, 5 insertions(+), 6 deletions(-)\n\ndiff --git a/reachable.c b/reachable.c\nindex acac86a..9cff25b 100644\n--- a/reachable.c\n+++ b/reachable.c\n@@ -22,9 +22,10 @@ static void update_progress(struct connectivity_progress *cp)\n \t\tdisplay_progress(cp->progress, cp->count);\n }\n \n-static int add_one_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data)\n+static int add_one_ref(const char *path, const struct object_id *oid,\n+\t\t       int flag, void *cb_data)\n {\n-\tstruct object *object = parse_object_or_die(sha1, path);\n+\tstruct object *object = parse_object_or_die(oid->hash, path);\n \tstruct rev_info *revs = (struct rev_info *)cb_data;\n \n \tadd_pending_object(revs, object, \"\");\n@@ -155,8 +156,6 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog,\n \t\t\t    struct progress *progress)\n {\n \tstruct connectivity_progress cp;\n-\tstruct each_ref_fn_sha1_adapter wrapped_add_one_ref =\n-\t\t{add_one_ref, revs};\n \n \t/*\n \t * Set up revision parsing, and mark us as being interested\n@@ -170,10 +169,10 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog,\n \tadd_index_objects_to_pending(revs, 0);\n \n \t/* Add all external refs */\n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_one_ref);\n+\tfor_each_ref(add_one_ref, revs);\n \n \t/* detached HEAD is not included in the list above */\n-\thead_ref(each_ref_fn_adapter, &wrapped_add_one_ref);\n+\thead_ref(add_one_ref, revs);\n \n \t/* Add all reflog info */\n \tif (mark_reflog)\n-- \n2.4.0\n"},{"id":"262072","messageId":"1432579162-411464-36-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 35/56] remote: rewrite functions to take object_id arguments","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:01Z","receivedAt":"2015-05-25T18:39:01Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n remote.c | 19 ++++++++-----------\n 1 file changed, 8 insertions(+), 11 deletions(-)\n\ndiff --git a/remote.c b/remote.c\nindex 6d66ec1..1623eae 100644\n--- a/remote.c\n+++ b/remote.c\n@@ -2024,7 +2024,8 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb)\n \treturn 1;\n }\n \n-static int one_local_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)\n+static int one_local_ref(const char *refname, const struct object_id *oid,\n+\t\t\t int flag, void *cb_data)\n {\n \tstruct ref ***local_tail = cb_data;\n \tstruct ref *ref;\n@@ -2036,7 +2037,7 @@ static int one_local_ref(const char *refname, const unsigned char *sha1, int fla\n \n \tlen = strlen(refname) + 1;\n \tref = xcalloc(1, sizeof(*ref) + len);\n-\thashcpy(ref->new_sha1, sha1);\n+\thashcpy(ref->new_sha1, oid->hash);\n \tmemcpy(ref->name, refname, len);\n \t**local_tail = ref;\n \t*local_tail = &ref->next;\n@@ -2046,10 +2047,8 @@ static int one_local_ref(const char *refname, const unsigned char *sha1, int fla\n struct ref *get_local_heads(void)\n {\n \tstruct ref *local_refs = NULL, **local_tail = &local_refs;\n-\tstruct each_ref_fn_sha1_adapter wrapped_one_local_ref =\n-\t\t{one_local_ref, &local_tail};\n \n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_one_local_ref);\n+\tfor_each_ref(one_local_ref, &local_tail);\n \treturn local_refs;\n }\n \n@@ -2101,8 +2100,8 @@ struct stale_heads_info {\n \tint ref_count;\n };\n \n-static int get_stale_heads_cb(const char *refname,\n-\tconst unsigned char *sha1, int flags, void *cb_data)\n+static int get_stale_heads_cb(const char *refname, const struct object_id *oid,\n+\t\t\t      int flags, void *cb_data)\n {\n \tstruct stale_heads_info *info = cb_data;\n \tstruct string_list matches = STRING_LIST_INIT_DUP;\n@@ -2131,7 +2130,7 @@ static int get_stale_heads_cb(const char *refname,\n \n \tif (stale) {\n \t\tstruct ref *ref = make_linked_ref(refname, &info->stale_refs_tail);\n-\t\thashcpy(ref->new_sha1, sha1);\n+\t\thashcpy(ref->new_sha1, oid->hash);\n \t}\n \n clean_exit:\n@@ -2144,8 +2143,6 @@ struct ref *get_stale_heads(struct refspec *refs, int ref_count, struct ref *fet\n \tstruct ref *ref, *stale_refs = NULL;\n \tstruct string_list ref_names = STRING_LIST_INIT_NODUP;\n \tstruct stale_heads_info info;\n-\tstruct each_ref_fn_sha1_adapter wrapped_get_stale_heads_cb =\n-\t\t{get_stale_heads_cb, &info};\n \n \tinfo.ref_names = &ref_names;\n \tinfo.stale_refs_tail = &stale_refs;\n@@ -2154,7 +2151,7 @@ struct ref *get_stale_heads(struct refspec *refs, int ref_count, struct ref *fet\n \tfor (ref = fetch_map; ref; ref = ref->next)\n \t\tstring_list_append(&ref_names, ref->name);\n \tstring_list_sort(&ref_names);\n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_get_stale_heads_cb);\n+\tfor_each_ref(get_stale_heads_cb, &info);\n \tstring_list_clear(&ref_names, 0);\n \treturn stale_refs;\n }\n-- \n2.4.0\n"},{"id":"262071","messageId":"1432579162-411464-37-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 36/56] register_replace_ref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:02Z","receivedAt":"2015-05-25T18:39:02Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n replace_object.c | 8 +++-----\n 1 file changed, 3 insertions(+), 5 deletions(-)\n\ndiff --git a/replace_object.c b/replace_object.c\nindex a8a2da9..f0b39f0 100644\n--- a/replace_object.c\n+++ b/replace_object.c\n@@ -53,7 +53,7 @@ static int register_replace_object(struct replace_object *replace,\n }\n \n static int register_replace_ref(const char *refname,\n-\t\t\t\tconst unsigned char *sha1,\n+\t\t\t\tconst struct object_id *oid,\n \t\t\t\tint flag, void *cb_data)\n {\n \t/* Get sha1 from refname */\n@@ -68,7 +68,7 @@ static int register_replace_ref(const char *refname,\n \t}\n \n \t/* Copy sha1 from the read ref */\n-\thashcpy(repl_obj->replacement, sha1);\n+\thashcpy(repl_obj->replacement, oid->hash);\n \n \t/* Register new object */\n \tif (register_replace_object(repl_obj, 1))\n@@ -80,13 +80,11 @@ static int register_replace_ref(const char *refname,\n static void prepare_replace_object(void)\n {\n \tstatic int replace_object_prepared;\n-\tstruct each_ref_fn_sha1_adapter wrapped_register_replace_ref =\n-\t\t{register_replace_ref, NULL};\n \n \tif (replace_object_prepared)\n \t\treturn;\n \n-\tfor_each_replace_ref(each_ref_fn_adapter, &wrapped_register_replace_ref);\n+\tfor_each_replace_ref(register_replace_ref, NULL);\n \treplace_object_prepared = 1;\n \tif (!replace_object_nr)\n \t\tcheck_replace_refs = 0;\n-- \n2.4.0\n"},{"id":"262069","messageId":"1432579162-411464-38-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 37/56] handle_one_reflog(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:03Z","receivedAt":"2015-05-25T18:39:03Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n revision.c | 7 +++----\n 1 file changed, 3 insertions(+), 4 deletions(-)\n\ndiff --git a/revision.c b/revision.c\nindex cfe3876..1d903cf 100644\n--- a/revision.c\n+++ b/revision.c\n@@ -1293,7 +1293,8 @@ static int handle_one_reflog_ent(unsigned char *osha1, unsigned char *nsha1,\n \treturn 0;\n }\n \n-static int handle_one_reflog(const char *path, const unsigned char *sha1, int flag, void *cb_data)\n+static int handle_one_reflog(const char *path, const struct object_id *oid,\n+\t\t\t     int flag, void *cb_data)\n {\n \tstruct all_refs_cb *cb = cb_data;\n \tcb->warned_bad_reflog = 0;\n@@ -1305,12 +1306,10 @@ static int handle_one_reflog(const char *path, const unsigned char *sha1, int fl\n void add_reflogs_to_pending(struct rev_info *revs, unsigned flags)\n {\n \tstruct all_refs_cb cb;\n-\tstruct each_ref_fn_sha1_adapter wrapped_handle_one_reflog =\n-\t\t{handle_one_reflog, &cb};\n \n \tcb.all_revs = revs;\n \tcb.all_flags = flags;\n-\tfor_each_reflog(each_ref_fn_adapter, &wrapped_handle_one_reflog);\n+\tfor_each_reflog(handle_one_reflog, &cb);\n }\n \n static void add_cache_tree(struct cache_tree *it, struct rev_info *revs,\n-- \n2.4.0\n"},{"id":"262053","messageId":"1432579162-411464-39-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 38/56] add_info_ref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:04Z","receivedAt":"2015-05-25T18:39:04Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n server-info.c | 12 +++++-------\n 1 file changed, 5 insertions(+), 7 deletions(-)\n\ndiff --git a/server-info.c b/server-info.c\nindex 317dda8..c82e9ee 100644\n--- a/server-info.c\n+++ b/server-info.c\n@@ -47,14 +47,15 @@ out:\n \treturn ret;\n }\n \n-static int add_info_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data)\n+static int add_info_ref(const char *path, const struct object_id *oid,\n+\t\t\tint flag, void *cb_data)\n {\n \tFILE *fp = cb_data;\n-\tstruct object *o = parse_object(sha1);\n+\tstruct object *o = parse_object(oid->hash);\n \tif (!o)\n \t\treturn -1;\n \n-\tif (fprintf(fp, \"%s\t%s\\n\", sha1_to_hex(sha1), path) < 0)\n+\tif (fprintf(fp, \"%s\t%s\\n\", oid_to_hex(oid), path) < 0)\n \t\treturn -1;\n \n \tif (o->type == OBJ_TAG) {\n@@ -69,10 +70,7 @@ static int add_info_ref(const char *path, const unsigned char *sha1, int flag, v\n \n static int generate_info_refs(FILE *fp)\n {\n-\tstruct each_ref_fn_sha1_adapter wrapped_add_info_ref =\n-\t\t{add_info_ref, fp};\n-\n-\treturn for_each_ref(each_ref_fn_adapter, &wrapped_add_info_ref);\n+\treturn for_each_ref(add_info_ref, fp);\n }\n \n static int update_info_refs(int force)\n-- \n2.4.0\n"},{"id":"262070","messageId":"1432579162-411464-40-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 39/56] handle_one_ref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:05Z","receivedAt":"2015-05-25T18:39:05Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n sha1_name.c | 10 ++++------\n 1 file changed, 4 insertions(+), 6 deletions(-)\n\ndiff --git a/sha1_name.c b/sha1_name.c\nindex 1aad0a322..1cb8108 100644\n--- a/sha1_name.c\n+++ b/sha1_name.c\n@@ -831,11 +831,11 @@ static int get_sha1_1(const char *name, int len, unsigned char *sha1, unsigned l\n /* Remember to update object flag allocation in object.h */\n #define ONELINE_SEEN (1u<<20)\n \n-static int handle_one_ref(const char *path,\n-\t\tconst unsigned char *sha1, int flag, void *cb_data)\n+static int handle_one_ref(const char *path, const struct object_id *oid,\n+\t\t\t  int flag, void *cb_data)\n {\n \tstruct commit_list **list = cb_data;\n-\tstruct object *object = parse_object(sha1);\n+\tstruct object *object = parse_object(oid->hash);\n \tif (!object)\n \t\treturn 0;\n \tif (object->type == OBJ_TAG) {\n@@ -1371,10 +1371,8 @@ static int get_sha1_with_context_1(const char *name,\n \t\tint pos;\n \t\tif (!only_to_die && namelen > 2 && name[1] == '/') {\n \t\t\tstruct commit_list *list = NULL;\n-\t\t\tstruct each_ref_fn_sha1_adapter wrapped_handle_one_ref =\n-\t\t\t\t{handle_one_ref, &list};\n \n-\t\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_handle_one_ref);\n+\t\t\tfor_each_ref(handle_one_ref, &list);\n \t\t\tcommit_list_sort_by_date(&list);\n \t\t\treturn get_sha1_oneline(name + 2, sha1, list);\n \t\t}\n-- \n2.4.0\n"},{"id":"262046","messageId":"1432579162-411464-41-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 40/56] shallow: rewrite functions to take object_id arguments","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:06Z","receivedAt":"2015-05-25T18:39:06Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n shallow.c | 29 +++++++++++------------------\n 1 file changed, 11 insertions(+), 18 deletions(-)\n\ndiff --git a/shallow.c b/shallow.c\nindex 9488edc..257d811 100644\n--- a/shallow.c\n+++ b/shallow.c\n@@ -475,11 +475,10 @@ static void paint_down(struct paint_info *info, const unsigned char *sha1,\n \tfree(tmp);\n }\n \n-static int mark_uninteresting(const char *refname,\n-\t\t\t      const unsigned char *sha1,\n+static int mark_uninteresting(const char *refname, const struct object_id *oid,\n \t\t\t      int flags, void *cb_data)\n {\n-\tstruct commit *commit = lookup_commit_reference_gently(sha1, 1);\n+\tstruct commit *commit = lookup_commit_reference_gently(oid->hash, 1);\n \tif (!commit)\n \t\treturn 0;\n \tcommit->object.flags |= UNINTERESTING;\n@@ -512,8 +511,6 @@ void assign_shallow_commits_to_refs(struct shallow_info *info,\n \tunsigned int i, nr;\n \tint *shallow, nr_shallow = 0;\n \tstruct paint_info pi;\n-\tstruct each_ref_fn_sha1_adapter wrapped_mark_uninteresting =\n-\t\t{mark_uninteresting, NULL};\n \n \ttrace_printf_key(&trace_shallow, \"shallow: assign_shallow_commits_to_refs\\n\");\n \tshallow = xmalloc(sizeof(*shallow) * (info->nr_ours + info->nr_theirs));\n@@ -544,8 +541,8 @@ void assign_shallow_commits_to_refs(struct shallow_info *info,\n \t * connect to old refs. If not (e.g. force ref updates) it'll\n \t * have to go down to the current shallow commits.\n \t */\n-\thead_ref(each_ref_fn_adapter, &wrapped_mark_uninteresting);\n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_mark_uninteresting);\n+\thead_ref(mark_uninteresting, NULL);\n+\tfor_each_ref(mark_uninteresting, NULL);\n \n \t/* Mark potential bottoms so we won't go out of bound */\n \tfor (i = 0; i < nr_shallow; i++) {\n@@ -586,12 +583,12 @@ struct commit_array {\n \tint nr, alloc;\n };\n \n-static int add_ref(const char *refname,\n-\t\t   const unsigned char *sha1, int flags, void *cb_data)\n+static int add_ref(const char *refname, const struct object_id *oid,\n+\t\t   int flags, void *cb_data)\n {\n \tstruct commit_array *ca = cb_data;\n \tALLOC_GROW(ca->commits, ca->nr + 1, ca->alloc);\n-\tca->commits[ca->nr] = lookup_commit_reference_gently(sha1, 1);\n+\tca->commits[ca->nr] = lookup_commit_reference_gently(oid->hash, 1);\n \tif (ca->commits[ca->nr])\n \t\tca->nr++;\n \treturn 0;\n@@ -620,8 +617,6 @@ static void post_assign_shallow(struct shallow_info *info,\n \tint dst, i, j;\n \tint bitmap_nr = (info->ref->nr + 31) / 32;\n \tstruct commit_array ca;\n-\tstruct each_ref_fn_sha1_adapter wrapped_add_ref =\n-\t\t{add_ref, &ca};\n \n \ttrace_printf_key(&trace_shallow, \"shallow: post_assign_shallow\\n\");\n \tif (ref_status)\n@@ -645,8 +640,8 @@ static void post_assign_shallow(struct shallow_info *info,\n \tinfo->nr_theirs = dst;\n \n \tmemset(&ca, 0, sizeof(ca));\n-\thead_ref(each_ref_fn_adapter, &wrapped_add_ref);\n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_ref);\n+\thead_ref(add_ref, &ca);\n+\tfor_each_ref(add_ref, &ca);\n \n \t/* Remove unreachable shallow commits from \"ours\" */\n \tfor (i = dst = 0; i < info->nr_ours; i++) {\n@@ -678,12 +673,10 @@ int delayed_reachability_test(struct shallow_info *si, int c)\n \n \t\tif (!si->commits) {\n \t\t\tstruct commit_array ca;\n-\t\t\tstruct each_ref_fn_sha1_adapter wrapped_add_ref =\n-\t\t\t\t{add_ref, &ca};\n \n \t\t\tmemset(&ca, 0, sizeof(ca));\n-\t\t\thead_ref(each_ref_fn_adapter, &wrapped_add_ref);\n-\t\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_ref);\n+\t\t\thead_ref(add_ref, &ca);\n+\t\t\tfor_each_ref(add_ref, &ca);\n \t\t\tsi->commits = ca.commits;\n \t\t\tsi->nr_commits = ca.nr;\n \t\t}\n-- \n2.4.0\n"},{"id":"262052","messageId":"1432579162-411464-42-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 41/56] submodule: rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:07Z","receivedAt":"2015-05-25T18:39:07Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n submodule.c | 22 +++++++---------------\n 1 file changed, 7 insertions(+), 15 deletions(-)\n\ndiff --git a/submodule.c b/submodule.c\nindex f0f34b6..e4c59df 100644\n--- a/submodule.c\n+++ b/submodule.c\n@@ -422,20 +422,18 @@ void set_config_fetch_recurse_submodules(int value)\n \tconfig_fetch_recurse_submodules = value;\n }\n \n-static int has_remote(const char *refname, const unsigned char *sha1, int flags, void *cb_data)\n+static int has_remote(const char *refname, const struct object_id *oid,\n+\t\t      int flags, void *cb_data)\n {\n \treturn 1;\n }\n \n static int submodule_needs_pushing(const char *path, const unsigned char sha1[20])\n {\n-\tstruct each_ref_fn_sha1_adapter wrapped_has_remote =\n-\t\t{has_remote, NULL};\n-\n \tif (add_submodule_odb(path) || !lookup_commit_reference(sha1))\n \t\treturn 0;\n \n-\tif (for_each_remote_ref_submodule(path, each_ref_fn_adapter, &wrapped_has_remote) > 0) {\n+\tif (for_each_remote_ref_submodule(path, has_remote, NULL) > 0) {\n \t\tstruct child_process cp = CHILD_PROCESS_INIT;\n \t\tconst char *argv[] = {\"rev-list\", NULL, \"--not\", \"--remotes\", \"-n\", \"1\" , NULL};\n \t\tstruct strbuf buf = STRBUF_INIT;\n@@ -522,13 +520,10 @@ int find_unpushed_submodules(unsigned char new_sha1[20],\n \n static int push_submodule(const char *path)\n {\n-\tstruct each_ref_fn_sha1_adapter wrapped_has_remote =\n-\t\t{has_remote, NULL};\n-\n \tif (add_submodule_odb(path))\n \t\treturn 1;\n \n-\tif (for_each_remote_ref_submodule(path, each_ref_fn_adapter, &wrapped_has_remote) > 0) {\n+\tif (for_each_remote_ref_submodule(path, has_remote, NULL) > 0) {\n \t\tstruct child_process cp = CHILD_PROCESS_INIT;\n \t\tconst char *argv[] = {\"push\", NULL};\n \n@@ -622,20 +617,17 @@ static void submodule_collect_changed_cb(struct diff_queue_struct *q,\n \t}\n }\n \n-static int add_sha1_to_array(const char *ref, const unsigned char *sha1,\n+static int add_sha1_to_array(const char *ref, const struct object_id *oid,\n \t\t\t     int flags, void *data)\n {\n-\tsha1_array_append(data, sha1);\n+\tsha1_array_append(data, oid->hash);\n \treturn 0;\n }\n \n void check_for_new_submodule_commits(unsigned char new_sha1[20])\n {\n \tif (!initialized_fetch_ref_tips) {\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_add_sha1_to_array =\n-\t\t\t{add_sha1_to_array, &ref_tips_before_fetch};\n-\n-\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_add_sha1_to_array);\n+\t\tfor_each_ref(add_sha1_to_array, &ref_tips_before_fetch);\n \t\tinitialized_fetch_ref_tips = 1;\n \t}\n \n-- \n2.4.0\n"},{"id":"262049","messageId":"1432579162-411464-43-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 42/56] write_refs_to_temp_dir(): convert local variable sha1 to object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:08Z","receivedAt":"2015-05-25T18:39:08Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n transport.c | 8 ++++----\n 1 file changed, 4 insertions(+), 4 deletions(-)\n\ndiff --git a/transport.c b/transport.c\nindex 58cb9ed..df87386 100644\n--- a/transport.c\n+++ b/transport.c\n@@ -299,18 +299,18 @@ static int write_one_ref(const char *name, const unsigned char *sha1,\n }\n \n static int write_refs_to_temp_dir(struct strbuf *temp_dir,\n-\t\tint refspec_nr, const char **refspec)\n+\t\t\t\t  int refspec_nr, const char **refspec)\n {\n \tint i;\n \n \tfor (i = 0; i < refspec_nr; i++) {\n-\t\tunsigned char sha1[20];\n+\t\tstruct object_id oid;\n \t\tchar *ref;\n \n-\t\tif (dwim_ref(refspec[i], strlen(refspec[i]), sha1, &ref) != 1)\n+\t\tif (dwim_ref(refspec[i], strlen(refspec[i]), oid.hash, &ref) != 1)\n \t\t\treturn error(\"Could not get ref %s\", refspec[i]);\n \n-\t\tif (write_one_ref(ref, sha1, 0, temp_dir)) {\n+\t\tif (write_one_ref(ref, oid.hash, 0, temp_dir)) {\n \t\t\tfree(ref);\n \t\t\treturn -1;\n \t\t}\n-- \n2.4.0\n"},{"id":"262064","messageId":"1432579162-411464-44-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 43/56] write_one_ref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:09Z","receivedAt":"2015-05-25T18:39:09Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n transport.c | 13 +++++--------\n 1 file changed, 5 insertions(+), 8 deletions(-)\n\ndiff --git a/transport.c b/transport.c\nindex df87386..40692f8 100644\n--- a/transport.c\n+++ b/transport.c\n@@ -278,8 +278,8 @@ static int fetch_objs_via_rsync(struct transport *transport,\n \treturn run_command(&rsync);\n }\n \n-static int write_one_ref(const char *name, const unsigned char *sha1,\n-\t\tint flags, void *data)\n+static int write_one_ref(const char *name, const struct object_id *oid,\n+\t\t\t int flags, void *data)\n {\n \tstruct strbuf *buf = data;\n \tint len = buf->len;\n@@ -291,7 +291,7 @@ static int write_one_ref(const char *name, const unsigned char *sha1,\n \n \tstrbuf_addstr(buf, name);\n \tif (safe_create_leading_directories(buf->buf) ||\n-\t    write_file(buf->buf, 0, \"%s\\n\", sha1_to_hex(sha1)))\n+\t    write_file(buf->buf, 0, \"%s\\n\", oid_to_hex(oid)))\n \t\treturn error(\"problems writing temporary file %s: %s\",\n \t\t\t     buf->buf, strerror(errno));\n \tstrbuf_setlen(buf, len);\n@@ -310,7 +310,7 @@ static int write_refs_to_temp_dir(struct strbuf *temp_dir,\n \t\tif (dwim_ref(refspec[i], strlen(refspec[i]), oid.hash, &ref) != 1)\n \t\t\treturn error(\"Could not get ref %s\", refspec[i]);\n \n-\t\tif (write_one_ref(ref, oid.hash, 0, temp_dir)) {\n+\t\tif (write_one_ref(ref, &oid, 0, temp_dir)) {\n \t\t\tfree(ref);\n \t\t\treturn -1;\n \t\t}\n@@ -363,10 +363,7 @@ static int rsync_transport_push(struct transport *transport,\n \tstrbuf_addch(&temp_dir, '/');\n \n \tif (flags & TRANSPORT_PUSH_ALL) {\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_write_one_ref =\n-\t\t\t{write_one_ref, &temp_dir};\n-\n-\t\tif (for_each_ref(each_ref_fn_adapter, &wrapped_write_one_ref))\n+\t\tif (for_each_ref(write_one_ref, &temp_dir))\n \t\t\treturn -1;\n \t} else if (write_refs_to_temp_dir(&temp_dir, refspec_nr, refspec))\n \t\treturn -1;\n-- \n2.4.0\n"},{"id":"262050","messageId":"1432579162-411464-45-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 44/56] find_symref(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:10Z","receivedAt":"2015-05-25T18:39:10Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n upload-pack.c | 8 +++-----\n 1 file changed, 3 insertions(+), 5 deletions(-)\n\ndiff --git a/upload-pack.c b/upload-pack.c\nindex 52fab23..96dbedc 100644\n--- a/upload-pack.c\n+++ b/upload-pack.c\n@@ -741,8 +741,8 @@ static int send_ref(const char *refname, const unsigned char *sha1, int flag, vo\n \treturn 0;\n }\n \n-static int find_symref(const char *refname, const unsigned char *sha1, int flag,\n-\t\t       void *cb_data)\n+static int find_symref(const char *refname, const struct object_id *oid,\n+\t\t       int flag, void *cb_data)\n {\n \tconst char *symref_target;\n \tstruct string_list_item *item;\n@@ -761,10 +761,8 @@ static int find_symref(const char *refname, const unsigned char *sha1, int flag,\n static void upload_pack(void)\n {\n \tstruct string_list symref = STRING_LIST_INIT_DUP;\n-\tstruct each_ref_fn_sha1_adapter wrapped_find_symref =\n-\t\t{find_symref, &symref};\n \n-\thead_ref_namespaced(each_ref_fn_adapter, &wrapped_find_symref);\n+\thead_ref_namespaced(find_symref, &symref);\n \n \tif (advertise_refs || !stateless_rpc) {\n \t\tstruct each_ref_fn_sha1_adapter wrapped_send_ref =\n-- \n2.4.0\n"},{"id":"262047","messageId":"1432579162-411464-46-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 45/56] find_symref(): convert local variable \"unused\" to object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:11Z","receivedAt":"2015-05-25T18:39:11Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n upload-pack.c | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/upload-pack.c b/upload-pack.c\nindex 96dbedc..8268037 100644\n--- a/upload-pack.c\n+++ b/upload-pack.c\n@@ -746,11 +746,11 @@ static int find_symref(const char *refname, const struct object_id *oid,\n {\n \tconst char *symref_target;\n \tstruct string_list_item *item;\n-\tunsigned char unused[20];\n+\tstruct object_id unused;\n \n \tif ((flag & REF_ISSYMREF) == 0)\n \t\treturn 0;\n-\tsymref_target = resolve_ref_unsafe(refname, 0, unused, &flag);\n+\tsymref_target = resolve_ref_unsafe(refname, 0, unused.hash, &flag);\n \tif (!symref_target || (flag & REF_ISSYMREF) == 0)\n \t\tdie(\"'%s' is a symref but it is not?\", refname);\n \titem = string_list_append(cb_data, refname);\n-- \n2.4.0\n"},{"id":"262056","messageId":"1432579162-411464-47-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 46/56] upload-pack: rewrite functions to take object_id arguments","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:12Z","receivedAt":"2015-05-25T18:39:12Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n upload-pack.c | 32 ++++++++++++++------------------\n 1 file changed, 14 insertions(+), 18 deletions(-)\n\ndiff --git a/upload-pack.c b/upload-pack.c\nindex 8268037..929284f 100644\n--- a/upload-pack.c\n+++ b/upload-pack.c\n@@ -681,9 +681,9 @@ static void receive_needs(void)\n }\n \n /* return non-zero if the ref is hidden, otherwise 0 */\n-static int mark_our_ref(const char *refname, const unsigned char *sha1)\n+static int mark_our_ref(const char *refname, const struct object_id *oid)\n {\n-\tstruct object *o = lookup_unknown_object(sha1);\n+\tstruct object *o = lookup_unknown_object(oid->hash);\n \n \tif (ref_is_hidden(refname)) {\n \t\to->flags |= HIDDEN_REF;\n@@ -693,9 +693,10 @@ static int mark_our_ref(const char *refname, const unsigned char *sha1)\n \treturn 0;\n }\n \n-static int check_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)\n+static int check_ref(const char *refname, const struct object_id *oid,\n+\t\t     int flag, void *cb_data)\n {\n-\tmark_our_ref(refname, sha1);\n+\tmark_our_ref(refname, oid);\n \treturn 0;\n }\n \n@@ -709,7 +710,8 @@ static void format_symref_info(struct strbuf *buf, struct string_list *symref)\n \t\tstrbuf_addf(buf, \" symref=%s:%s\", item->string, (char *)item->util);\n }\n \n-static int send_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)\n+static int send_ref(const char *refname, const struct object_id *oid,\n+\t\t    int flag, void *cb_data)\n {\n \tstatic const char *capabilities = \"multi_ack thin-pack side-band\"\n \t\t\" side-band-64k ofs-delta shallow no-progress\"\n@@ -717,7 +719,7 @@ static int send_ref(const char *refname, const unsigned char *sha1, int flag, vo\n \tconst char *refname_nons = strip_namespace(refname);\n \tunsigned char peeled[20];\n \n-\tif (mark_our_ref(refname, sha1))\n+\tif (mark_our_ref(refname, oid))\n \t\treturn 0;\n \n \tif (capabilities) {\n@@ -725,7 +727,7 @@ static int send_ref(const char *refname, const unsigned char *sha1, int flag, vo\n \n \t\tformat_symref_info(&symref_info, cb_data);\n \t\tpacket_write(1, \"%s %s%c%s%s%s%s agent=%s\\n\",\n-\t\t\t     sha1_to_hex(sha1), refname_nons,\n+\t\t\t     oid_to_hex(oid), refname_nons,\n \t\t\t     0, capabilities,\n \t\t\t     allow_tip_sha1_in_want ? \" allow-tip-sha1-in-want\" : \"\",\n \t\t\t     stateless_rpc ? \" no-done\" : \"\",\n@@ -733,7 +735,7 @@ static int send_ref(const char *refname, const unsigned char *sha1, int flag, vo\n \t\t\t     git_user_agent_sanitized());\n \t\tstrbuf_release(&symref_info);\n \t} else {\n-\t\tpacket_write(1, \"%s %s\\n\", sha1_to_hex(sha1), refname_nons);\n+\t\tpacket_write(1, \"%s %s\\n\", oid_to_hex(oid), refname_nons);\n \t}\n \tcapabilities = NULL;\n \tif (!peel_ref(refname, peeled))\n@@ -765,20 +767,14 @@ static void upload_pack(void)\n \thead_ref_namespaced(find_symref, &symref);\n \n \tif (advertise_refs || !stateless_rpc) {\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_send_ref =\n-\t\t\t{send_ref, &symref};\n-\n \t\treset_timeout();\n-\t\thead_ref_namespaced(each_ref_fn_adapter, &wrapped_send_ref);\n-\t\tfor_each_namespaced_ref(each_ref_fn_adapter, &wrapped_send_ref);\n+\t\thead_ref_namespaced(send_ref, &symref);\n+\t\tfor_each_namespaced_ref(send_ref, &symref);\n \t\tadvertise_shallow_grafts(1);\n \t\tpacket_flush(1);\n \t} else {\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_check_ref =\n-\t\t\t{check_ref, NULL};\n-\n-\t\thead_ref_namespaced(each_ref_fn_adapter, &wrapped_check_ref);\n-\t\tfor_each_namespaced_ref(each_ref_fn_adapter, &wrapped_check_ref);\n+\t\thead_ref_namespaced(check_ref, NULL);\n+\t\tfor_each_namespaced_ref(check_ref, NULL);\n \t}\n \tstring_list_clear(&symref, 1);\n \tif (advertise_refs)\n-- \n2.4.0\n"},{"id":"262066","messageId":"1432579162-411464-48-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 47/56] send_ref(): convert local variable \"peeled\" to object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:13Z","receivedAt":"2015-05-25T18:39:13Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n upload-pack.c | 6 +++---\n 1 file changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/upload-pack.c b/upload-pack.c\nindex 929284f..1cb9a94 100644\n--- a/upload-pack.c\n+++ b/upload-pack.c\n@@ -717,7 +717,7 @@ static int send_ref(const char *refname, const struct object_id *oid,\n \t\t\" side-band-64k ofs-delta shallow no-progress\"\n \t\t\" include-tag multi_ack_detailed\";\n \tconst char *refname_nons = strip_namespace(refname);\n-\tunsigned char peeled[20];\n+\tstruct object_id peeled;\n \n \tif (mark_our_ref(refname, oid))\n \t\treturn 0;\n@@ -738,8 +738,8 @@ static int send_ref(const char *refname, const struct object_id *oid,\n \t\tpacket_write(1, \"%s %s\\n\", oid_to_hex(oid), refname_nons);\n \t}\n \tcapabilities = NULL;\n-\tif (!peel_ref(refname, peeled))\n-\t\tpacket_write(1, \"%s %s^{}\\n\", sha1_to_hex(peeled), refname_nons);\n+\tif (!peel_ref(refname, peeled.hash))\n+\t\tpacket_write(1, \"%s %s^{}\\n\", oid_to_hex(&peeled), refname_nons);\n \treturn 0;\n }\n \n-- \n2.4.0\n"},{"id":"262063","messageId":"1432579162-411464-49-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 48/56] mark_complete(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:14Z","receivedAt":"2015-05-25T18:39:14Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n walker.c | 11 +++++------\n 1 file changed, 5 insertions(+), 6 deletions(-)\n\ndiff --git a/walker.c b/walker.c\nindex bb2e0b9..44a936c 100644\n--- a/walker.c\n+++ b/walker.c\n@@ -200,9 +200,11 @@ static int interpret_target(struct walker *walker, char *target, unsigned char *\n \treturn -1;\n }\n \n-static int mark_complete(const char *path, const unsigned char *sha1, int flag, void *cb_data)\n+static int mark_complete(const char *path, const struct object_id *oid,\n+\t\t\t int flag, void *cb_data)\n {\n-\tstruct commit *commit = lookup_commit_reference_gently(sha1, 1);\n+\tstruct commit *commit = lookup_commit_reference_gently(oid->hash, 1);\n+\n \tif (commit) {\n \t\tcommit->object.flags |= COMPLETE;\n \t\tcommit_list_insert(commit, &complete);\n@@ -269,10 +271,7 @@ int walker_fetch(struct walker *walker, int targets, char **target,\n \t}\n \n \tif (!walker->get_recover) {\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_mark_complete =\n-\t\t\t{mark_complete, NULL};\n-\n-\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_mark_complete);\n+\t\tfor_each_ref(mark_complete, NULL);\n \t\tcommit_list_sort_by_date(&complete);\n \t}\n \n-- \n2.4.0\n"},{"id":"262065","messageId":"1432579162-411464-50-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 49/56] clear_marks(): rewrite to take an object_id argument","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:15Z","receivedAt":"2015-05-25T18:39:15Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n fetch-pack.c | 13 +++++--------\n 1 file changed, 5 insertions(+), 8 deletions(-)\n\ndiff --git a/fetch-pack.c b/fetch-pack.c\nindex 5380b1b..1e875cf 100644\n--- a/fetch-pack.c\n+++ b/fetch-pack.c\n@@ -70,9 +70,10 @@ static int rev_list_insert_ref(const char *refname, const unsigned char *sha1, i\n \treturn 0;\n }\n \n-static int clear_marks(const char *refname, const unsigned char *sha1, int flag, void *cb_data)\n+static int clear_marks(const char *refname, const struct object_id *oid,\n+\t\t       int flag, void *cb_data)\n {\n-\tstruct object *o = deref_tag(parse_object(sha1), refname, 0);\n+\tstruct object *o = deref_tag(parse_object(oid->hash), refname, 0);\n \n \tif (o && o->type == OBJ_COMMIT)\n \t\tclear_commit_marks((struct commit *)o,\n@@ -261,12 +262,8 @@ static int find_common(struct fetch_pack_args *args,\n \n \tif (args->stateless_rpc && multi_ack == 1)\n \t\tdie(\"--stateless-rpc requires multi_ack_detailed\");\n-\tif (marked) {\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_clear_marks =\n-\t\t\t{clear_marks, NULL};\n-\n-\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_clear_marks);\n-\t}\n+\tif (marked)\n+\t\tfor_each_ref(clear_marks, NULL);\n \tmarked = 1;\n \n \tfor_each_ref(each_ref_fn_adapter, &wrapped_rev_list_insert_ref);\n-- \n2.4.0\n"},{"id":"262061","messageId":"1432579162-411464-51-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 50/56] mark_complete_oid(): new function, taking an object_oid","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:16Z","receivedAt":"2015-05-25T18:39:16Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nThis function can be used with for_each_ref() without having to be\nwrapped.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n fetch-pack.c | 11 +++++++----\n 1 file changed, 7 insertions(+), 4 deletions(-)\n\ndiff --git a/fetch-pack.c b/fetch-pack.c\nindex 1e875cf..d7a4a48 100644\n--- a/fetch-pack.c\n+++ b/fetch-pack.c\n@@ -490,6 +490,12 @@ static int mark_complete(const char *refname, const unsigned char *sha1, int fla\n \treturn 0;\n }\n \n+static int mark_complete_oid(const char *refname, const struct object_id *oid,\n+\t\t\t     int flag, void *cb_data)\n+{\n+\treturn mark_complete(refname, oid->hash, flag, cb_data);\n+}\n+\n static void mark_recent_complete_commits(struct fetch_pack_args *args,\n \t\t\t\t\t unsigned long cutoff)\n {\n@@ -602,10 +608,7 @@ static int everything_local(struct fetch_pack_args *args,\n \t}\n \n \tif (!args->depth) {\n-\t\tstruct each_ref_fn_sha1_adapter wrapped_mark_complete =\n-\t\t\t{mark_complete, NULL};\n-\n-\t\tfor_each_ref(each_ref_fn_adapter, &wrapped_mark_complete);\n+\t\tfor_each_ref(mark_complete_oid, NULL);\n \t\tfor_each_alternate_ref(mark_alternate_complete, NULL);\n \t\tcommit_list_sort_by_date(&complete);\n \t\tif (cutoff)\n-- \n2.4.0\n"},{"id":"262062","messageId":"1432579162-411464-52-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 51/56] mark_complete(): remove unneeded arguments","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:17Z","receivedAt":"2015-05-25T18:39:17Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nNow that the function is not being used as an each_ref_sha1_fn, we can\ndelete the unused arguments in its signature.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n fetch-pack.c | 6 +++---\n 1 file changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/fetch-pack.c b/fetch-pack.c\nindex d7a4a48..13a5000 100644\n--- a/fetch-pack.c\n+++ b/fetch-pack.c\n@@ -469,7 +469,7 @@ done:\n \n static struct commit_list *complete;\n \n-static int mark_complete(const char *refname, const unsigned char *sha1, int flag, void *cb_data)\n+static int mark_complete(const unsigned char *sha1)\n {\n \tstruct object *o = parse_object(sha1);\n \n@@ -493,7 +493,7 @@ static int mark_complete(const char *refname, const unsigned char *sha1, int fla\n static int mark_complete_oid(const char *refname, const struct object_id *oid,\n \t\t\t     int flag, void *cb_data)\n {\n-\treturn mark_complete(refname, oid->hash, flag, cb_data);\n+\treturn mark_complete(oid->hash);\n }\n \n static void mark_recent_complete_commits(struct fetch_pack_args *args,\n@@ -573,7 +573,7 @@ static void filter_refs(struct fetch_pack_args *args,\n \n static void mark_alternate_complete(const struct ref *ref, void *unused)\n {\n-\tmark_complete(NULL, ref->old_sha1, 0, NULL);\n+\tmark_complete(ref->old_sha1);\n }\n \n static int everything_local(struct fetch_pack_args *args,\n-- \n2.4.0\n"},{"id":"262058","messageId":"1432579162-411464-53-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 52/56] rev_list_insert_ref_oid(): new function, taking an object_oid","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:18Z","receivedAt":"2015-05-25T18:39:18Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nThis function can be used with for_each_ref() without having to be\nwrapped.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n fetch-pack.c | 10 +++++++---\n 1 file changed, 7 insertions(+), 3 deletions(-)\n\ndiff --git a/fetch-pack.c b/fetch-pack.c\nindex 13a5000..28c54c3 100644\n--- a/fetch-pack.c\n+++ b/fetch-pack.c\n@@ -70,6 +70,12 @@ static int rev_list_insert_ref(const char *refname, const unsigned char *sha1, i\n \treturn 0;\n }\n \n+static int rev_list_insert_ref_oid(const char *refname, const struct object_id *oid,\n+\t\t\t\t   int flag, void *cb_data)\n+{\n+\treturn rev_list_insert_ref(refname, oid->hash, flag, cb_data);\n+}\n+\n static int clear_marks(const char *refname, const struct object_id *oid,\n \t\t       int flag, void *cb_data)\n {\n@@ -257,8 +263,6 @@ static int find_common(struct fetch_pack_args *args,\n \tint got_ready = 0;\n \tstruct strbuf req_buf = STRBUF_INIT;\n \tsize_t state_len = 0;\n-\tstruct each_ref_fn_sha1_adapter wrapped_rev_list_insert_ref =\n-\t\t{rev_list_insert_ref, NULL};\n \n \tif (args->stateless_rpc && multi_ack == 1)\n \t\tdie(\"--stateless-rpc requires multi_ack_detailed\");\n@@ -266,7 +270,7 @@ static int find_common(struct fetch_pack_args *args,\n \t\tfor_each_ref(clear_marks, NULL);\n \tmarked = 1;\n \n-\tfor_each_ref(each_ref_fn_adapter, &wrapped_rev_list_insert_ref);\n+\tfor_each_ref(rev_list_insert_ref_oid, NULL);\n \tfor_each_alternate_ref(insert_one_alternate_ref, NULL);\n \n \tfetching = 0;\n-- \n2.4.0\n"},{"id":"262059","messageId":"1432579162-411464-54-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 53/56] rev_list_insert_ref(): remove unneeded arguments","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:19Z","receivedAt":"2015-05-25T18:39:19Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nNow that the function is not being used as an each_ref_sha1_fn, we can\ndelete the unused arguments in its signature.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n fetch-pack.c | 6 +++---\n 1 file changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/fetch-pack.c b/fetch-pack.c\nindex 28c54c3..a1dcb27 100644\n--- a/fetch-pack.c\n+++ b/fetch-pack.c\n@@ -60,7 +60,7 @@ static void rev_list_push(struct commit *commit, int mark)\n \t}\n }\n \n-static int rev_list_insert_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)\n+static int rev_list_insert_ref(const char *refname, const unsigned char *sha1)\n {\n \tstruct object *o = deref_tag(parse_object(sha1), refname, 0);\n \n@@ -73,7 +73,7 @@ static int rev_list_insert_ref(const char *refname, const unsigned char *sha1, i\n static int rev_list_insert_ref_oid(const char *refname, const struct object_id *oid,\n \t\t\t\t   int flag, void *cb_data)\n {\n-\treturn rev_list_insert_ref(refname, oid->hash, flag, cb_data);\n+\treturn rev_list_insert_ref(refname, oid->hash);\n }\n \n static int clear_marks(const char *refname, const struct object_id *oid,\n@@ -233,7 +233,7 @@ static void send_request(struct fetch_pack_args *args,\n \n static void insert_one_alternate_ref(const struct ref *ref, void *unused)\n {\n-\trev_list_insert_ref(NULL, ref->old_sha1, 0, NULL);\n+\trev_list_insert_ref(NULL, ref->old_sha1);\n }\n \n #define INITIAL_FLUSH 16\n-- \n2.4.0\n"},{"id":"262060","messageId":"1432579162-411464-55-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 54/56] each_ref_fn_adapter(): remove adapter","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:20Z","receivedAt":"2015-05-25T18:39:20Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nAll of the callers of the for_each_ref family of functions have now\nbeen rewritten to work with object_ids, so this adapter is no longer\nneeded.\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n refs.c |  8 --------\n refs.h | 11 -----------\n 2 files changed, 19 deletions(-)\n\ndiff --git a/refs.c b/refs.c\nindex 43dce01..162760c 100644\n--- a/refs.c\n+++ b/refs.c\n@@ -2176,14 +2176,6 @@ int for_each_rawref(each_ref_fn fn, void *cb_data)\n \t\t\t       DO_FOR_EACH_INCLUDE_BROKEN, cb_data);\n }\n \n-int each_ref_fn_adapter(const char *refname,\n-\t\t\tconst struct object_id *oid, int flags, void *cb_data)\n-{\n-\tstruct each_ref_fn_sha1_adapter *cb = cb_data;\n-\n-\treturn cb->original_fn(refname, oid->hash, flags, cb->original_cb_data);\n-}\n-\n const char *prettify_refname(const char *name)\n {\n \treturn name + (\ndiff --git a/refs.h b/refs.h\nindex 4042109..8c3d433 100644\n--- a/refs.h\n+++ b/refs.h\n@@ -69,17 +69,6 @@ struct ref_transaction;\n typedef int each_ref_fn(const char *refname,\n \t\t\tconst struct object_id *oid, int flags, void *cb_data);\n \n-typedef int each_ref_sha1_fn(const char *refname,\n-\t\t\t     const unsigned char *sha1, int flags, void *cb_data);\n-\n-struct each_ref_fn_sha1_adapter {\n-\teach_ref_sha1_fn *original_fn;\n-\tvoid *original_cb_data;\n-};\n-\n-extern int each_ref_fn_adapter(const char *refname,\n-\t\t\t       const struct object_id *oid, int flags, void *cb_data);\n-\n /*\n  * The following functions invoke the specified callback function for\n  * each reference indicated.  If the function ever returns a nonzero\n-- \n2.4.0\n"},{"id":"262057","messageId":"1432579162-411464-56-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 55/56] warn_if_dangling_symref(): convert local variable \"junk\" to object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:21Z","receivedAt":"2015-05-25T18:39:21Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n refs.c | 6 +++---\n 1 file changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/refs.c b/refs.c\nindex 162760c..7515c2e 100644\n--- a/refs.c\n+++ b/refs.c\n@@ -1757,7 +1757,7 @@ int ref_exists(const char *refname)\n }\n \n static int filter_refs(const char *refname, const struct object_id *oid,\n-\t\t       int flags, void *data)\n+\t\t\t   int flags, void *data)\n {\n \tstruct ref_filter *filter = (struct ref_filter *)data;\n \n@@ -1903,12 +1903,12 @@ static int warn_if_dangling_symref(const char *refname, const struct object_id *\n {\n \tstruct warn_if_dangling_data *d = cb_data;\n \tconst char *resolves_to;\n-\tunsigned char junk[20];\n+\tstruct object_id junk;\n \n \tif (!(flags & REF_ISSYMREF))\n \t\treturn 0;\n \n-\tresolves_to = resolve_ref_unsafe(refname, 0, junk, NULL);\n+\tresolves_to = resolve_ref_unsafe(refname, 0, junk.hash, NULL);\n \tif (!resolves_to\n \t    || (d->refname\n \t\t? strcmp(resolves_to, d->refname)\n-- \n2.4.0\n"},{"id":"262055","messageId":"1432579162-411464-57-git-send-email-sandals@crustytoothpaste.net","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"[PATCH v3 56/56] struct ref_lock: convert old_sha1 member to object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T18:39:22Z","receivedAt":"2015-05-25T18:39:22Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"From: Michael Haggerty <mhagger@alum.mit.edu>\n\nSigned-off-by: Michael Haggerty <mhagger@alum.mit.edu>\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n---\n refs.c | 24 ++++++++++++------------\n 1 file changed, 12 insertions(+), 12 deletions(-)\n\ndiff --git a/refs.c b/refs.c\nindex 7515c2e..a742d79 100644\n--- a/refs.c\n+++ b/refs.c\n@@ -10,7 +10,7 @@ struct ref_lock {\n \tchar *ref_name;\n \tchar *orig_ref_name;\n \tstruct lock_file *lk;\n-\tunsigned char old_sha1[20];\n+\tstruct object_id old_oid;\n };\n \n /*\n@@ -2225,16 +2225,16 @@ static struct ref_lock *verify_lock(struct ref_lock *lock,\n {\n \tif (read_ref_full(lock->ref_name,\n \t\t\t  mustexist ? RESOLVE_REF_READING : 0,\n-\t\t\t  lock->old_sha1, NULL)) {\n+\t\t\t  lock->old_oid.hash, NULL)) {\n \t\tint save_errno = errno;\n \t\terror(\"Can't verify ref %s\", lock->ref_name);\n \t\tunlock_ref(lock);\n \t\terrno = save_errno;\n \t\treturn NULL;\n \t}\n-\tif (hashcmp(lock->old_sha1, old_sha1)) {\n+\tif (hashcmp(lock->old_oid.hash, old_sha1)) {\n \t\terror(\"Ref %s is at %s but expected %s\", lock->ref_name,\n-\t\t\tsha1_to_hex(lock->old_sha1), sha1_to_hex(old_sha1));\n+\t\t\toid_to_hex(&lock->old_oid), sha1_to_hex(old_sha1));\n \t\tunlock_ref(lock);\n \t\terrno = EBUSY;\n \t\treturn NULL;\n@@ -2382,7 +2382,7 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,\n \t}\n \n \trefname = resolve_ref_unsafe(refname, resolve_flags,\n-\t\t\t\t     lock->old_sha1, &type);\n+\t\t\t\t     lock->old_oid.hash, &type);\n \tif (!refname && errno == EISDIR) {\n \t\t/* we are trying to lock foo but we used to\n \t\t * have foo/bar which now does not exist;\n@@ -2401,7 +2401,7 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,\n \t\t\tgoto error_return;\n \t\t}\n \t\trefname = resolve_ref_unsafe(orig_refname, resolve_flags,\n-\t\t\t\t\t     lock->old_sha1, &type);\n+\t\t\t\t\t     lock->old_oid.hash, &type);\n \t}\n \tif (type_p)\n \t    *type_p = type;\n@@ -2421,7 +2421,7 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,\n \t * refname, nor a packed ref whose name is a proper prefix of\n \t * our refname.\n \t */\n-\tif (is_null_sha1(lock->old_sha1) &&\n+\tif (is_null_oid(&lock->old_oid) &&\n \t    verify_refname_available(refname, extras, skip,\n \t\t\t\t     get_packed_refs(&ref_cache), err)) {\n \t\tlast_errno = ENOTDIR;\n@@ -2944,7 +2944,7 @@ int rename_ref(const char *oldrefname, const char *newrefname, const char *logms\n \t\tstrbuf_release(&err);\n \t\tgoto rollback;\n \t}\n-\thashcpy(lock->old_sha1, orig_sha1);\n+\thashcpy(lock->old_oid.hash, orig_sha1);\n \n \tif (write_ref_to_lockfile(lock, orig_sha1) ||\n \t    commit_ref_update(lock, orig_sha1, logmsg)) {\n@@ -3199,9 +3199,9 @@ static int commit_ref_update(struct ref_lock *lock,\n \t\t\t     const unsigned char *sha1, const char *logmsg)\n {\n \tclear_loose_ref_cache(&ref_cache);\n-\tif (log_ref_write(lock->ref_name, lock->old_sha1, sha1, logmsg) < 0 ||\n+\tif (log_ref_write(lock->ref_name, lock->old_oid.hash, sha1, logmsg) < 0 ||\n \t    (strcmp(lock->ref_name, lock->orig_ref_name) &&\n-\t     log_ref_write(lock->orig_ref_name, lock->old_sha1, sha1, logmsg) < 0)) {\n+\t     log_ref_write(lock->orig_ref_name, lock->old_oid.hash, sha1, logmsg) < 0)) {\n \t\tunlock_ref(lock);\n \t\treturn -1;\n \t}\n@@ -3225,7 +3225,7 @@ static int commit_ref_update(struct ref_lock *lock,\n \t\t\t\t\t      head_sha1, &head_flag);\n \t\tif (head_ref && (head_flag & REF_ISSYMREF) &&\n \t\t    !strcmp(head_ref, lock->ref_name))\n-\t\t\tlog_ref_write(\"HEAD\", lock->old_sha1, sha1, logmsg);\n+\t\t\tlog_ref_write(\"HEAD\", lock->old_oid.hash, sha1, logmsg);\n \t}\n \tif (commit_ref(lock)) {\n \t\terror(\"Couldn't set %s\", lock->ref_name);\n@@ -3923,7 +3923,7 @@ int ref_transaction_commit(struct ref_transaction *transaction,\n \t\t\t\t\t\t  (update->flags & REF_NODEREF));\n \n \t\t\tif (!overwriting_symref &&\n-\t\t\t    !hashcmp(update->lock->old_sha1, update->new_sha1)) {\n+\t\t\t    !hashcmp(update->lock->old_oid.hash, update->new_sha1)) {\n \t\t\t\t/*\n \t\t\t\t * The reference already has the desired\n \t\t\t\t * value, so we don't need to write it.\n-- \n2.4.0\n"},{"id":"262093","messageId":"xmqqa8wsbgd8.fsf@gitster.dls.corp.google.com","threadId":"39421","inReplyTo":"1432579162-411464-1-git-send-email-sandals@crustytoothpaste.net","subject":"Re: [PATCH v3 00/56] Convert parts of refs.c to struct object_id","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2015-05-25T19:34:59Z","receivedAt":"2015-05-25T19:34:59Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"brian m. carlson\" <sandals@crustytoothpaste.net> writes:\n\n> Changes from v2:\n> * Adopt Michael Haggerty's patch series that uses an adapter function.\n> * Squash some of these patches together where it makes sense in order to\n>   reduce the quantity of patches.\n>\n> This does only slightly more than my original series, just in a\n> different way, with a larger number of much smaller patches.  If the\n> quantity of patches is too large for people's tastes, I can do a v4\n> based off of v2 that has less of this problem.\n\nThanks.  I think these all look good.  And clashes with in-flight\ntopics seem to be manageable ;-)\n\n[PATCH 01/56] was authored by you but has Michael's sign-off, which\nlooked somewhat odd to me, though.\n"},{"id":"262095","messageId":"20150525194007.GH26436@vauxhall.crustytoothpaste.net","threadId":"39421","inReplyTo":"xmqqa8wsbgd8.fsf@gitster.dls.corp.google.com","subject":"Re: [PATCH v3 00/56] Convert parts of refs.c to struct object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-25T19:40:08Z","receivedAt":"2015-05-25T19:40:08Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"On Mon, May 25, 2015 at 12:34:59PM -0700, Junio C Hamano wrote:\n> [PATCH 01/56] was authored by you but has Michael's sign-off, which\n> looked somewhat odd to me, though.\n\nYes, it does.  He picked it up from me, and signed off, and I took his\nbranch.  I don't believe he changed it, but I didn't check for certain.\nSo technically, although I wrote it, I also received it from him without\nchanging it, so both (a) and (c) of the DCO apply.\n-- \nbrian m. carlson / brian with sandals: Houston, Texas, US\n+1 832 623 2791 | http://www.crustytoothpaste.net/~bmc | My opinion only\nOpenPGP: RSA v4 4096b: 88AC E9B2 9196 305B A994 7552 F1BA 225C 0223 B187\n"},{"id":"262141","messageId":"CAGZ79kbxrPhcMUFx3OY1s_qk4TkUcBgscDwqSvrLtDXmF1YwWw@mail.gmail.com","threadId":"39421","inReplyTo":"20150525194007.GH26436@vauxhall.crustytoothpaste.net","subject":"Re: [PATCH v3 00/56] Convert parts of refs.c to struct object_id","fromName":"Stefan Beller","fromEmail":"sbeller@google.com","sentAt":"2015-05-26T17:37:29Z","receivedAt":"2015-05-26T17:37:29Z","isPatch":true,"sender":{"key":"stefanbeller@gmail.com","avatar":"https://avatars.githubusercontent.com/u/455868?v=4"},"body":"On Mon, May 25, 2015 at 12:40 PM, brian m. carlson\n<sandals@crustytoothpaste.net> wrote:\n> On Mon, May 25, 2015 at 12:34:59PM -0700, Junio C Hamano wrote:\n>> [PATCH 01/56] was authored by you but has Michael's sign-off, which\n>> looked somewhat odd to me, though.\n>\n> Yes, it does.  He picked it up from me, and signed off, and I took his\n> branch.  I don't believe he changed it, but I didn't check for certain.\n> So technically, although I wrote it, I also received it from him without\n> changing it, so both (a) and (c) of the DCO apply.\n\nAt least in the kernel, the sign offs are also used to track a patchs way\nof life, so essentially whenever somebody touches that patch (either as\nan author, or as a patch shoveling sub Lieutenant), you'd add a sign off.\n\nSo if we were to handle the sign offs just as the kernel people, I would\nhave assumed a sign-off block like\n\nSign-off: you\nSign off: Michael\nSign-off: you\n\nas that would indicate that Michael did not author it from scratch but\nbased his work on yours. That's just my understanding of the sign off\nprocess for linux and I guessed we'd follow a very similar process. But\nno objections from me regarding the signing.\n\nAll patches have been\nSkimmed-over-and-run-test-suite-by: Stefan Beller <sbeller@google.com>\nif that helps.\n\n> --\n> brian m. carlson / brian with sandals: Houston, Texas, US\n> +1 832 623 2791 | http://www.crustytoothpaste.net/~bmc | My opinion only\n> OpenPGP: RSA v4 4096b: 88AC E9B2 9196 305B A994 7552 F1BA 225C 0223 B187\n"},{"id":"262190","messageId":"20150527000436.GA4342@vauxhall.crustytoothpaste.net","threadId":"39421","inReplyTo":"CAGZ79kbxrPhcMUFx3OY1s_qk4TkUcBgscDwqSvrLtDXmF1YwWw@mail.gmail.com","subject":"Re: [PATCH v3 00/56] Convert parts of refs.c to struct object_id","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2015-05-27T00:04:37Z","receivedAt":"2015-05-27T00:04:37Z","isPatch":true,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"On Tue, May 26, 2015 at 10:37:29AM -0700, Stefan Beller wrote:\n> On Mon, May 25, 2015 at 12:40 PM, brian m. carlson\n> <sandals@crustytoothpaste.net> wrote:\n> > On Mon, May 25, 2015 at 12:34:59PM -0700, Junio C Hamano wrote:\n> >> [PATCH 01/56] was authored by you but has Michael's sign-off, which\n> >> looked somewhat odd to me, though.\n> >\n> > Yes, it does.  He picked it up from me, and signed off, and I took his\n> > branch.  I don't believe he changed it, but I didn't check for certain.\n> > So technically, although I wrote it, I also received it from him without\n> > changing it, so both (a) and (c) of the DCO apply.\n> \n> At least in the kernel, the sign offs are also used to track a patchs way\n> of life, so essentially whenever somebody touches that patch (either as\n> an author, or as a patch shoveling sub Lieutenant), you'd add a sign off.\n> \n> So if we were to handle the sign offs just as the kernel people, I would\n> have assumed a sign-off block like\n> \n> Sign-off: you\n> Sign off: Michael\n> Sign-off: you\n> \n> as that would indicate that Michael did not author it from scratch but\n> based his work on yours. That's just my understanding of the sign off\n> process for linux and I guessed we'd follow a very similar process. But\n> no objections from me regarding the signing.\n\nIf Junio would like to add my sign-off to the end, he's welcome to do\nso:\n\nSigned-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n-- \nbrian m. carlson / brian with sandals: Houston, Texas, US\n+1 832 623 2791 | http://www.crustytoothpaste.net/~bmc | My opinion only\nOpenPGP: RSA v4 4096b: 88AC E9B2 9196 305B A994 7552 F1BA 225C 0223 B187\n"},{"id":"262195","messageId":"xmqqsiaiioxj.fsf@gitster.dls.corp.google.com","threadId":"39421","inReplyTo":"20150527000436.GA4342@vauxhall.crustytoothpaste.net","subject":"Re: [PATCH v3 00/56] Convert parts of refs.c to struct object_id","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2015-05-27T05:12:40Z","receivedAt":"2015-05-27T05:12:40Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"brian m. carlson\" <sandals@crustytoothpaste.net> writes:\n\n> If Junio would like to add my sign-off to the end, he's welcome to do\n> so:\n>\n> Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>\n\nHeh, too late.\n\nThanks for explaining the true flow of patches, though.\n"},{"id":"263019","messageId":"5571B6B4.10006@alum.mit.edu","threadId":"39421","inReplyTo":"1432579162-411464-17-git-send-email-sandals@crustytoothpaste.net","subject":"Re: [PATCH v3 16/56] add_branch_for_removal(): don't set \"util\" field of string_list entries","fromName":"Michael Haggerty","fromEmail":"mhagger@alum.mit.edu","sentAt":"2015-06-05T14:48:20Z","receivedAt":"2015-06-05T14:48:20Z","isPatch":true,"sender":{"key":"mhagger@alum.mit.edu","avatar":"https://avatars.githubusercontent.com/u/119718?v=4"},"body":"On 05/25/2015 08:38 PM, brian m. carlson wrote:\n> From: Michael Haggerty <mhagger@alum.mit.edu>\n> \n> They were never used.\n> [...]\n\nI happened to dig into the background of this change a little more, and\nthis is what I found out.\n\nWhen deleting remote-tracking references, we used to record the old_sha1\nof each reference we found, and when deleting it verify that the\nrecorded old_sha1 still agrees with the current value.\n\nLater,\n\n    c9e768b remote: repack packed-refs once when deleting multiple refs\n(2014-05-23)\n\noptimized this code to delete all of the packed refs at once, then\ndelete the loose references one by one. That patch changed how\ndelete_ref() was called, no longer passing it the old_sha1 value (and\nthus removing the verification step).\n\nThat commit doesn't give a justification for the change, but I can\nimagine what it would have been:\n\n* Now that the packed refs and loose refs disappear at different times,\nit would be awkward to check the old_sha1s\n* We want to delete the references anyway, and they are remote-tracking\nreferences (which shouldn't have any interesting local modifications),\nso the protection is not really useful anyway.\n\nI think that the change in c9e768b was OK, but I wanted to get this\nbackstory out there in case anybody thinks that instead of removing the\ncode to set \"util\", we should be re-adding the code that made use of\n\"util\" to verify the references' old values before deleting them.\n\nMichael\n\n-- \nMichael Haggerty\nmhagger@alum.mit.edu\n"}]}