This is the twelfth in a series of patches to convert various parts of the code to struct object_id. Changes from v2: * Rebase onto master (to fix "typename" → "type_name" changes). * Replace some uses of hashcpy with memcpy. * Replace some instances of "20" with references to the_hash_algo. Changes from v1: * Rebase onto master. tbdiff output below. brian m. carlson (36): bulk-checkin: convert index_bulk_checkin to struct object_id builtin/write-tree: convert to struct object_id cache-tree: convert write_*_as_tree to object_id cache-tree: convert remnants to struct object_id resolve-undo: convert struct resolve_undo_info to object_id tree: convert read_tree_recursive to struct object_id ref-filter: convert grab_objectname to struct object_id strbuf: convert strbuf_add_unique_abbrev to use struct object_id wt-status: convert struct wt_status_state to object_id Convert find_unique_abbrev* to struct object_id http-walker: convert struct object_request to use struct object_id send-pack: convert remaining functions to struct object_id replace_object: convert struct replace_object to object_id builtin/mktag: convert to struct object_id archive: convert write_archive_entry_fn_t to object_id archive: convert sha1_file_to_archive to struct object_id builtin/index-pack: convert struct ref_delta_entry to object_id sha1_file: convert read_loose_object to use struct object_id sha1_file: convert check_sha1_signature to struct object_id streaming: convert open_istream to use struct object_id builtin/mktree: convert to struct object_id sha1_file: convert assert_sha1_type to object_id sha1_file: convert retry_bad_packed_offset to struct object_id packfile: convert unpack_entry to struct object_id Convert remaining callers of sha1_object_info_extended to object_id sha1_file: convert sha1_object_info* to object_id builtin/fmt-merge-msg: convert remaining code to object_id builtin/notes: convert static functions to object_id tree-walk: convert get_tree_entry_follow_symlinks internals to object_id streaming: convert istream internals to struct object_id tree-walk: convert tree entry functions to object_id sha1_file: convert read_object_with_reference to object_id sha1_file: convert read_sha1_file to struct object_id Convert lookup_replace_object to struct object_id sha1_file: introduce a constant for max header length convert: convert to struct object_id apply.c | 4 +- archive-tar.c | 28 ++++---- archive-zip.c | 18 ++--- archive.c | 32 ++++----- archive.h | 10 +-- bisect.c | 3 +- blame.c | 18 +++-- builtin/am.c | 8 +-- builtin/blame.c | 4 +- builtin/branch.c | 2 +- builtin/cat-file.c | 30 +++++---- builtin/checkout.c | 12 ++-- builtin/commit-tree.c | 2 +- builtin/describe.c | 6 +- builtin/difftool.c | 2 +- builtin/fast-export.c | 8 +-- builtin/fetch.c | 10 +-- builtin/fmt-merge-msg.c | 4 +- builtin/fsck.c | 4 +- builtin/grep.c | 6 +- builtin/index-pack.c | 43 ++++++------ builtin/log.c | 8 +-- builtin/ls-files.c | 4 +- builtin/ls-tree.c | 8 +-- builtin/merge-tree.c | 5 +- builtin/merge.c | 8 +-- builtin/mktag.c | 20 +++--- builtin/mktree.c | 24 +++---- builtin/name-rev.c | 2 +- builtin/notes.c | 14 ++-- builtin/pack-objects.c | 27 ++++---- builtin/prune.c | 2 +- builtin/receive-pack.c | 8 +-- builtin/reflog.c | 2 +- builtin/replace.c | 10 +-- builtin/reset.c | 2 +- builtin/rev-list.c | 2 +- builtin/rev-parse.c | 2 +- builtin/rm.c | 2 +- builtin/show-branch.c | 2 +- builtin/show-ref.c | 4 +- builtin/tag.c | 16 +++-- builtin/unpack-file.c | 2 +- builtin/unpack-objects.c | 4 +- builtin/update-index.c | 2 +- builtin/verify-commit.c | 2 +- builtin/worktree.c | 4 +- builtin/write-tree.c | 6 +- bulk-checkin.c | 18 ++--- bulk-checkin.h | 2 +- bundle.c | 2 +- cache-tree.c | 39 +++++------ cache-tree.h | 4 +- cache.h | 42 ++++++------ combine-diff.c | 6 +- commit.c | 8 +-- config.c | 2 +- convert.c | 12 ++-- convert.h | 2 +- diff.c | 6 +- dir.c | 2 +- entry.c | 4 +- fast-import.c | 31 ++++----- fsck.c | 2 +- grep.c | 2 +- http-push.c | 2 +- http-walker.c | 16 ++--- line-log.c | 3 +- list-objects-filter.c | 2 +- log-tree.c | 12 ++-- mailmap.c | 2 +- match-trees.c | 10 +-- merge-blobs.c | 4 +- merge-recursive.c | 20 +++--- notes-cache.c | 2 +- notes-merge.c | 2 +- notes.c | 10 +-- object.c | 12 ++-- pack-bitmap-write.c | 3 +- pack-check.c | 4 +- packfile.c | 30 ++++----- pretty.c | 8 +-- reachable.c | 2 +- read-cache.c | 4 +- ref-filter.c | 14 ++-- refs.c | 2 +- remote-testsvn.c | 4 +- remote.c | 2 +- replace_object.c | 26 ++++---- rerere.c | 4 +- resolve-undo.c | 15 +++-- resolve-undo.h | 2 +- send-pack.c | 12 ++-- sequencer.c | 9 +-- sha1_file.c | 137 +++++++++++++++++++++------------------ sha1_name.c | 31 +++++---- strbuf.c | 4 +- strbuf.h | 8 ++- streaming.c | 18 ++--- streaming.h | 2 +- submodule-config.c | 2 +- submodule.c | 6 +- tag.c | 10 +-- transport.c | 6 +- tree-walk.c | 45 +++++++------ tree-walk.h | 2 +- tree.c | 16 ++--- tree.h | 2 +- wt-status.c | 20 +++--- wt-status.h | 6 +- xdiff-interface.c | 2 +- 111 files changed, 600 insertions(+), 585 deletions(-) git tbdiff output between v2 and v3: 1: fb5a482ad6 = 1: 034342eba3 bulk-checkin: convert index_bulk_checkin to struct object_id 2: 6d91ba00b2 = 2: 61e7e3192e builtin/write-tree: convert to struct object_id 3: 9b7bb4b8de = 3: 934ebd4399 cache-tree: convert write_*_as_tree to object_id 4: 62cd33ae27 ! 4: 4ecefd666a cache-tree: convert remnants to struct object_id @@ -86,17 +86,26 @@ for (i = 0; i < it->subtree_nr; i++) { struct cache_tree_sub *down = it->down[i]; @@ + char *ep; + struct cache_tree *it; + int i, subtree_nr; ++ const unsigned rawsz = the_hash_algo->rawsz; + + it = NULL; + /* skip name, but make sure name exists */ +@@ goto free_return; buf++; size--; if (0 <= it->entry_count) { - if (size < 20) -+ if (size < the_hash_algo->rawsz) ++ if (size < rawsz) goto free_return; - hashcpy(it->oid.hash, (const unsigned char*)buf); +- hashcpy(it->oid.hash, (const unsigned char*)buf); - buf += 20; - size -= 20; -+ buf += the_hash_algo->rawsz; -+ size -= the_hash_algo->rawsz; ++ memcpy(it->oid.hash, (const unsigned char*)buf, rawsz); ++ buf += rawsz; ++ size -= rawsz; } #if DEBUG 5: ff2f8a8106 ! 5: 61c309cfbd resolve-undo: convert struct resolve_undo_info to object_id @@ -4,6 +4,9 @@ Convert the sha1 member of this struct to be an array of struct object_id instead. This change is needed to convert find_unique_abbrev. + + Convert some instances of hard-coded constants to use the_hash_algo as + well. Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> @@ -42,14 +45,29 @@ } } @@ + size_t len; + char *endptr; + int i; ++ const unsigned rawsz = the_hash_algo->rawsz; + + resolve_undo = xcalloc(1, sizeof(*resolve_undo)); + resolve_undo->strdup_strings = 1; +@@ + for (i = 0; i < 3; i++) { + if (!ui->mode[i]) continue; - if (size < 20) +- if (size < 20) ++ if (size < rawsz) goto error; - hashcpy(ui->sha1[i], (const unsigned char *)data); -+ hashcpy(ui->oid[i].hash, (const unsigned char *)data); - size -= 20; - data += 20; +- size -= 20; +- data += 20; ++ memcpy(ui->oid[i].hash, (const unsigned char *)data, rawsz); ++ size -= rawsz; ++ data += rawsz; } + } + return resolve_undo; @@ struct cache_entry *nce; if (!ru->mode[i]) 6: 62757785a8 = 6: 6637a7cce4 tree: convert read_tree_recursive to struct object_id 7: 5f4f67befa = 7: ce96caf197 ref-filter: convert grab_objectname to struct object_id 8: 9e33fff56c = 8: b9743c9980 strbuf: convert strbuf_add_unique_abbrev to use struct object_id 9: fee46a7ee4 = 9: 146483c174 wt-status: convert struct wt_status_state to object_id 10: 30a455ac10 ! 10: 5b0a4fc66e Convert find_unique_abbrev* to struct object_id @@ -464,7 +464,7 @@ advise(" %s %s%s", - find_unique_abbrev(oid->hash, DEFAULT_ABBREV), + find_unique_abbrev(oid, DEFAULT_ABBREV), - typename(type) ? typename(type) : "unknown type", + type_name(type) ? type_name(type) : "unknown type", desc.buf); @@ @@ -532,7 +532,7 @@ name_to_report : - find_unique_abbrev(oid->hash, DEFAULT_ABBREV), + find_unique_abbrev(oid, DEFAULT_ABBREV), - typename(type)); + type_name(type)); buf = read_sha1_file(oid->hash, &type, &size); @@ 11: f3b86deb27 = 11: 781ae2e76c http-walker: convert struct object_request to use struct object_id 12: 7dcf103bc0 = 12: 0f4746b4e2 send-pack: convert remaining functions to struct object_id 13: 07abaa5a35 = 13: 884218b4fb replace_object: convert struct replace_object to object_id 14: 891fc02851 = 14: d726dff9e6 builtin/mktag: convert to struct object_id 15: d1bcf86847 = 15: 5b7d02b408 archive: convert write_archive_entry_fn_t to object_id 16: e42d7bc122 = 16: 0c7b33a72b archive: convert sha1_file_to_archive to struct object_id 17: d626f4f65b ! 17: 296eb04a77 builtin/index-pack: convert struct ref_delta_entry to object_id @@ -115,7 +115,7 @@ - if (check_sha1_signature(d->sha1, base_obj->data, + if (check_sha1_signature(d->oid.hash, base_obj->data, - base_obj->size, typename(type))) + base_obj->size, type_name(type))) - die(_("local object %s is corrupt"), sha1_to_hex(d->sha1)); - base_obj->obj = append_obj_to_pack(f, d->sha1, + die(_("local object %s is corrupt"), oid_to_hex(&d->oid)); 18: 351cdb6231 ! 18: 1cf89780db sha1_file: convert read_loose_object to use struct object_id @@ -67,7 +67,7 @@ } - if (check_sha1_signature(expected_sha1, *contents, + if (check_sha1_signature(expected_oid->hash, *contents, - *size, typename(*type))) { + *size, type_name(*type))) { error("sha1 mismatch for %s (expected %s)", path, - sha1_to_hex(expected_sha1)); + oid_to_hex(expected_oid)); 19: 59865169a2 ! 19: 20a40e304f sha1_file: convert check_sha1_signature to struct object_id @@ -21,8 +21,8 @@ buf = read_sha1_file(oid->hash, &type, &size); if (!buf) die ("Could not read blob %s", oid_to_hex(oid)); -- if (check_sha1_signature(oid->hash, buf, size, typename(type)) < 0) -+ if (check_object_signature(oid, buf, size, typename(type)) < 0) +- if (check_sha1_signature(oid->hash, buf, size, type_name(type)) < 0) ++ if (check_object_signature(oid, buf, size, type_name(type)) < 0) die("sha1 mismatch in blob %s", oid_to_hex(oid)); object = parse_object_buffer(oid, type, size, buf, &eaten); } @@ -36,7 +36,7 @@ - if (check_sha1_signature(d->oid.hash, base_obj->data, + if (check_object_signature(&d->oid, base_obj->data, - base_obj->size, typename(type))) + base_obj->size, type_name(type))) die(_("local object %s is corrupt"), oid_to_hex(&d->oid)); base_obj->obj = append_obj_to_pack(f, d->oid.hash, @@ -89,11 +89,11 @@ buffer = read_sha1_file(oid->hash, &type, &size); if (buffer) { -- if (check_sha1_signature(repl, buffer, size, typename(type)) < 0) { +- if (check_sha1_signature(repl, buffer, size, type_name(type)) < 0) { + struct object_id reploid; + hashcpy(reploid.hash, repl); + -+ if (check_object_signature(&reploid, buffer, size, typename(type)) < 0) { ++ if (check_object_signature(&reploid, buffer, size, type_name(type)) < 0) { free(buffer); error("sha1 mismatch %s", sha1_to_hex(repl)); return NULL; @@ -114,8 +114,8 @@ err = error("cannot unpack %s from %s at offset %"PRIuMAX"", oid_to_hex(entries[i].oid.oid), p->pack_name, (uintmax_t)entries[i].offset); -- else if (check_sha1_signature(entries[i].oid.hash, data, size, typename(type))) -+ else if (check_object_signature(entries[i].oid.oid, data, size, typename(type))) +- else if (check_sha1_signature(entries[i].oid.hash, data, size, type_name(type))) ++ else if (check_object_signature(entries[i].oid.oid, data, size, type_name(type))) err = error("packed %s from %s is corrupt", oid_to_hex(entries[i].oid.oid), p->pack_name); else if (fn) { @@ -162,6 +162,6 @@ } - if (check_sha1_signature(expected_oid->hash, *contents, + if (check_object_signature(expected_oid, *contents, - *size, typename(*type))) { + *size, type_name(*type))) { error("sha1 mismatch for %s (expected %s)", path, oid_to_hex(expected_oid)); 20: ea0c6804de = 20: 808277ddfd streaming: convert open_istream to use struct object_id 21: b14dd69baf ! 21: 17bb9e5947 builtin/mktree: convert to struct object_id @@ -90,8 +90,8 @@ * because the new tree entry will never be correct. */ die("entry '%s' object %s is a %s but specified type was (%s)", -- path, sha1_to_hex(sha1), typename(obj_type), typename(mode_type)); -+ path, oid_to_hex(&oid), typename(obj_type), typename(mode_type)); +- path, sha1_to_hex(sha1), type_name(obj_type), type_name(mode_type)); ++ path, oid_to_hex(&oid), type_name(obj_type), type_name(mode_type)); } } 22: 8d54506a22 ! 22: 3ac824fdcc sha1_file: convert assert_sha1_type to object_id @@ -64,6 +64,6 @@ if (type != expect) - die("%s is not a valid '%s' object", sha1_to_hex(sha1), + die("%s is not a valid '%s' object", oid_to_hex(oid), - typename(expect)); + type_name(expect)); } 23: 9e162450c4 = 23: c65ffc3955 sha1_file: convert retry_bad_packed_offset to struct object_id 24: 4f9b84dc45 = 24: c4a4f9a98e packfile: convert unpack_entry to struct object_id 25: c7a2206ff9 = 25: 3d92a7ac4b Convert remaining callers of sha1_object_info_extended to object_id 26: 4f148256d4 ! 26: ae7dbea778 sha1_file: convert sha1_object_info* to object_id @@ -79,13 +79,26 @@ return 0; error_out: +diff --git a/builtin/blame.c b/builtin/blame.c +--- a/builtin/blame.c ++++ b/builtin/blame.c +@@ + + if (get_oid(name, &oid)) + return 0; +- return OBJ_NONE < sha1_object_info(oid.hash, NULL); ++ return OBJ_NONE < oid_object_info(&oid, NULL); + } + + int cmd_blame(int argc, const char **argv, const char *prefix) + diff --git a/builtin/cat-file.c b/builtin/cat-file.c --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ switch (opt) { case 't': - oi.typename = &sb; + oi.type_name = &sb; - if (sha1_object_info_extended(oid.hash, &oi, flags) < 0) + if (oid_object_info_extended(&oid, &oi, flags) < 0) die("git cat-file: could not get object info"); @@ -139,6 +152,19 @@ obj_name ? obj_name : oid_to_hex(&data->oid)); fflush(stdout); +diff --git a/builtin/describe.c b/builtin/describe.c +--- a/builtin/describe.c ++++ b/builtin/describe.c +@@ + + if (cmit) + describe_commit(&oid, &sb); +- else if (sha1_object_info(oid.hash, NULL) == OBJ_BLOB) ++ else if (oid_object_info(&oid, NULL) == OBJ_BLOB) + describe_blob(oid, &sb); + else + die(_("%s is neither a commit nor blob"), arg); + diff --git a/builtin/fast-export.c b/builtin/fast-export.c --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -268,7 +294,7 @@ - enum object_type type = sha1_object_info(oid->hash, NULL); + enum object_type type = oid_object_info(oid, NULL); printf("%s %s\n", oid_to_hex(oid), - (type > 0) ? typename(type) : "unknown"); + (type > 0) ? type_name(type) : "unknown"); } diff --git a/builtin/replace.c b/builtin/replace.c @@ -283,8 +309,8 @@ + obj_type = oid_object_info(&object, NULL); + repl_type = oid_object_info(oid, NULL); - printf("%s (%s) -> %s (%s)\n", refname, typename(obj_type), - oid_to_hex(oid), typename(repl_type)); + printf("%s (%s) -> %s (%s)\n", refname, type_name(obj_type), + oid_to_hex(oid), type_name(repl_type)); @@ struct ref_transaction *transaction; struct strbuf err = STRBUF_INIT; @@ -297,13 +323,13 @@ die("Objects must be of the same type.\n" "'%s' points to a replaced object of type '%s'\n" @@ - if (get_oid(object_ref, &old) < 0) + if (get_oid(object_ref, &old_oid) < 0) die("Not a valid object name: '%s'", object_ref); -- type = sha1_object_info(old.hash, NULL); -+ type = oid_object_info(&old, NULL); +- type = sha1_object_info(old_oid.hash, NULL); ++ type = oid_object_info(&old_oid, NULL); if (type < 0) - die("unable to get object type for %s", oid_to_hex(&old)); + die("unable to get object type for %s", oid_to_hex(&old_oid)); diff --git a/builtin/tag.c b/builtin/tag.c @@ -401,7 +427,7 @@ S_ISDIR(mode) ? "Tree" : "Blob", @@ die("Not a blob (actually a %s): %s", - typename(oe->type), command_buf.buf); + type_name(oe->type), command_buf.buf); } else if (!is_null_oid(&oid)) { - enum object_type type = sha1_object_info(oid.hash, NULL); + enum object_type type = oid_object_info(&oid, NULL); @@ -539,7 +565,7 @@ + enum object_type type = oid_object_info(&oid, + NULL); return error(_("%s: can't cherry-pick a %s"), - name, typename(type)); + name, type_name(type)); } diff --git a/sha1_file.c b/sha1_file.c 27: a2c063aac7 = 27: 7621154915 builtin/fmt-merge-msg: convert remaining code to object_id 28: 981277d812 = 28: a7245b9137 builtin/notes: convert static functions to object_id 29: b856198f19 = 29: 1bd6edfaa4 tree-walk: convert get_tree_entry_follow_symlinks internals to object_id 30: bf15b40528 = 30: 5107f04efe streaming: convert istream internals to struct object_id 31: 1f3a02f2ef = 31: f616bf9ce1 tree-walk: convert tree entry functions to object_id 32: 55f95e2765 = 32: 093f6e92f9 sha1_file: convert read_object_with_reference to object_id 33: 09e4ac139e ! 33: e0e0f888c6 sha1_file: convert read_sha1_file to struct object_id @@ -189,7 +189,7 @@ + buf = read_object_file(oid, &type, &size); if (!buf) die ("Could not read blob %s", oid_to_hex(oid)); - if (check_object_signature(oid, buf, size, typename(type)) < 0) + if (check_object_signature(oid, buf, size, type_name(type)) < 0) @@ return; } @@ -585,10 +585,10 @@ static void *read_blob_entry(const struct cache_entry *ce, unsigned long *size) { enum object_type type; -- void *new = read_sha1_file(ce->oid.hash, &type, size); -+ void *new = read_object_file(&ce->oid, &type, size); - - if (new) { +- void *blob_data = read_sha1_file(ce->oid.hash, &type, size); ++ void *blob_data = read_object_file(&ce->oid, &type, size); + + if (blob_data) { if (type == OBJ_BLOB) diff --git a/fast-import.c b/fast-import.c @@ -657,7 +657,7 @@ - unpacked = read_sha1_file(request->obj->oid.hash, &type, &len); + unpacked = read_object_file(&request->obj->oid, &type, &len); - hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %lu", typename(type), len) + 1; + hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %lu", type_name(type), len) + 1; /* Set it up */ @@ -973,7 +973,7 @@ +++ b/tag.c @@ find_unique_abbrev(oid, DEFAULT_ABBREV), - typename(type)); + type_name(type)); - buf = read_sha1_file(oid->hash, &type, &size); + buf = read_object_file(oid, &type, &size); 34: d5f315fd57 ! 34: 42aef22217 Convert lookup_replace_object to struct object_id @@ -88,8 +88,8 @@ - struct object_id reploid; - hashcpy(reploid.hash, repl); - -- if (check_object_signature(&reploid, buffer, size, typename(type)) < 0) { -+ if (check_object_signature(repl, buffer, size, typename(type)) < 0) { +- if (check_object_signature(&reploid, buffer, size, type_name(type)) < 0) { ++ if (check_object_signature(repl, buffer, size, type_name(type)) < 0) { free(buffer); - error("sha1 mismatch %s", sha1_to_hex(repl)); + error("sha1 mismatch %s", oid_to_hex(repl)); @@ -147,14 +147,14 @@ - const unsigned char *real = (flags & OBJECT_INFO_LOOKUP_REPLACE) ? - lookup_replace_object(oid->hash) : - oid->hash; -+ const struct object_id *real = (flags & OBJECT_INFO_LOOKUP_REPLACE) ? -+ lookup_replace_object(oid) : -+ oid; ++ const struct object_id *real = oid; int already_retried = 0; - struct object_id realoid; -- + - hashcpy(realoid.hash, real); -- ++ if (flags & OBJECT_INFO_LOOKUP_REPLACE) ++ real = lookup_replace_object(oid); + - if (is_null_sha1(real)) + if (is_null_oid(real)) return -1; 35: c7db0519ee = 35: 3cc49890bd sha1_file: introduce a constant for max header length 36: 2c6a3f6d11 = 36: 919dba36a5 convert: convert to struct object_id