Merge branch 'bc/object-id'
authorJunio C Hamano <gitster@pobox.com>
Thu, 10 Dec 2015 20:36:13 +0000 (12:36 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 10 Dec 2015 20:36:13 +0000 (12:36 -0800)
More transition from "unsigned char[40]" to "struct object_id".

This needed a few merge fixups, but is mostly disentangled from other
topics.

* bc/object-id:
remote: convert functions to struct object_id
Remove get_object_hash.
Convert struct object to object_id
Add several uses of get_object_hash.
object: introduce get_object_hash macro.
ref_newer: convert to use struct object_id
push_refs_with_export: convert to struct object_id
get_remote_heads: convert to struct object_id
parse_fetch: convert to use struct object_id
add_sought_entry_mem: convert to struct object_id
Convert struct ref to use object_id.
sha1_file: introduce has_object_file helper.

88 files changed:
archive.c
bisect.c
branch.c
builtin/am.c
builtin/blame.c
builtin/branch.c
builtin/checkout.c
builtin/clone.c
builtin/commit-tree.c
builtin/commit.c
builtin/describe.c
builtin/diff-tree.c
builtin/diff.c
builtin/fast-export.c
builtin/fetch-pack.c
builtin/fetch.c
builtin/fmt-merge-msg.c
builtin/fsck.c
builtin/grep.c
builtin/index-pack.c
builtin/log.c
builtin/ls-remote.c
builtin/merge-base.c
builtin/merge-tree.c
builtin/merge.c
builtin/name-rev.c
builtin/notes.c
builtin/pack-objects.c
builtin/pull.c
builtin/receive-pack.c
builtin/reflog.c
builtin/remote.c
builtin/replace.c
builtin/reset.c
builtin/rev-list.c
builtin/rev-parse.c
builtin/shortlog.c
builtin/show-branch.c
builtin/unpack-objects.c
builtin/worktree.c
bundle.c
cache-tree.c
cache.h
combine-diff.c
commit.c
connect.c
decorate.c
diff-lib.c
fetch-pack.c
fsck.c
http-backend.c
http-push.c
http.c
line-log.c
list-objects.c
log-tree.c
merge-blobs.c
merge-recursive.c
merge.c
notes-merge.c
object.c
object.h
pack-bitmap-write.c
pack-bitmap.c
patch-ids.c
pretty.c
ref-filter.c
refs.c
remote-curl.c
remote.c
remote.h
revision.c
send-pack.c
sequencer.c
server-info.c
sha1_file.c
sha1_name.c
shallow.c
submodule.c
tag.c
test-match-trees.c
transport-helper.c
transport.c
transport.h
tree.c
upload-pack.c
walker.c
wt-status.c
index 4ac86c837384c45c33dae141c3ff53dd37eb0fd5..0687afae434e55d9b8a38aa5184e6e056b963dac 100644 (file)
--- a/archive.c
+++ b/archive.c
@@ -241,7 +241,7 @@ int write_archive_entries(struct archiver_args *args,
                        len--;
                if (args->verbose)
                        fprintf(stderr, "%.*s\n", (int)len, args->base);
-               err = write_entry(args, args->tree->object.sha1, args->base,
+               err = write_entry(args, args->tree->object.oid.hash, args->base,
                                  len, 040777);
                if (err)
                        return err;
@@ -374,7 +374,7 @@ static void parse_treeish_arg(const char **argv,
 
        commit = lookup_commit_reference_gently(oid.hash, 1);
        if (commit) {
-               commit_sha1 = commit->object.sha1;
+               commit_sha1 = commit->object.oid.hash;
                archive_time = commit->date;
        } else {
                commit_sha1 = NULL;
@@ -390,7 +390,7 @@ static void parse_treeish_arg(const char **argv,
                unsigned int mode;
                int err;
 
-               err = get_tree_entry(tree->object.sha1, prefix,
+               err = get_tree_entry(tree->object.oid.hash, prefix,
                                     tree_oid.hash, &mode);
                if (err || !S_ISDIR(mode))
                        die("current working directory is untracked");
index 053d1a2ab91a6c41a0fe957569ff905d12b00bee..42aa7aa6aa1e53e66bafd47d76b783514dcfabf1 100644 (file)
--- a/bisect.c
+++ b/bisect.c
@@ -193,7 +193,7 @@ static int compare_commit_dist(const void *a_, const void *b_)
        b = (struct commit_dist *)b_;
        if (a->distance != b->distance)
                return b->distance - a->distance; /* desc sort */
-       return hashcmp(a->commit->object.sha1, b->commit->object.sha1);
+       return oidcmp(&a->commit->object.oid, &b->commit->object.oid);
 }
 
 static struct commit_list *best_bisection_sorted(struct commit_list *list, int nr)
@@ -500,7 +500,7 @@ struct commit_list *filter_skipped(struct commit_list *list,
                struct commit_list *next = list->next;
                list->next = NULL;
                if (0 <= sha1_array_lookup(&skipped_revs,
-                                          list->item->object.sha1)) {
+                                          list->item->object.oid.hash)) {
                        if (skipped_first && !*skipped_first)
                                *skipped_first = 1;
                        /* Move current to tried list */
@@ -575,7 +575,7 @@ static struct commit_list *skip_away(struct commit_list *list, int count)
 
        for (i = 0; cur; cur = cur->next, i++) {
                if (i == index) {
-                       if (hashcmp(cur->item->object.sha1, current_bad_oid->hash))
+                       if (oidcmp(&cur->item->object.oid, current_bad_oid))
                                return cur;
                        if (previous)
                                return previous;
@@ -784,7 +784,7 @@ static void check_merge_bases(int no_checkout)
        result = get_merge_bases_many(rev[0], rev_nr - 1, rev + 1);
 
        for (; result; result = result->next) {
-               const unsigned char *mb = result->item->object.sha1;
+               const unsigned char *mb = result->item->object.oid.hash;
                if (!hashcmp(mb, current_bad_oid->hash)) {
                        handle_bad_merge_base();
                } else if (0 <= sha1_array_lookup(&good_revs, mb)) {
@@ -973,7 +973,7 @@ int bisect_next_all(const char *prefix, int no_checkout)
                exit(4);
        }
 
-       bisect_rev = revs.commits->item->object.sha1;
+       bisect_rev = revs.commits->item->object.oid.hash;
 
        if (!hashcmp(bisect_rev, current_bad_oid->hash)) {
                exit_if_skipped_commits(tried, current_bad_oid);
index 77d7f2a63ee38b81ffbbf4741cdf1ad205e0c054..7ff3f204964127374ae2a337819ce0bce7be9ab2 100644 (file)
--- a/branch.c
+++ b/branch.c
@@ -267,7 +267,7 @@ void create_branch(const char *head,
 
        if ((commit = lookup_commit_reference(sha1)) == NULL)
                die(_("Not a valid branch point: '%s'."), start_name);
-       hashcpy(sha1, commit->object.sha1);
+       hashcpy(sha1, commit->object.oid.hash);
 
        if (forcing)
                snprintf(msg, sizeof msg, "branch: Reset to %s",
index f1a25ab6ad881fc903a533595792b1a46b40ea91..9fb42fdd714a7785f6d75486db0d48fecceaacd6 100644 (file)
@@ -1441,7 +1441,7 @@ static void get_commit_info(struct am_state *state, struct commit *commit)
        assert(!state->msg);
        msg = strstr(buffer, "\n\n");
        if (!msg)
-               die(_("unable to parse commit %s"), sha1_to_hex(commit->object.sha1));
+               die(_("unable to parse commit %s"), oid_to_hex(&commit->object.oid));
        state->msg = xstrdup(msg + 2);
        state->msg_len = strlen(state->msg);
 }
index 2afe82864b122018fabb832c4363977b58dae309..1df13cf7f4b501ed82dcbffdf4620706591a245e 100644 (file)
@@ -506,7 +506,7 @@ static int fill_blob_sha1_and_mode(struct origin *origin)
 {
        if (!is_null_sha1(origin->blob_sha1))
                return 0;
-       if (get_tree_entry(origin->commit->object.sha1,
+       if (get_tree_entry(origin->commit->object.oid.hash,
                           origin->path,
                           origin->blob_sha1, &origin->mode))
                goto error_out;
@@ -557,11 +557,11 @@ static struct origin *find_origin(struct scoreboard *sb,
                       PATHSPEC_LITERAL_PATH, "", paths);
        diff_setup_done(&diff_opts);
 
-       if (is_null_sha1(origin->commit->object.sha1))
-               do_diff_cache(parent->tree->object.sha1, &diff_opts);
+       if (is_null_oid(&origin->commit->object.oid))
+               do_diff_cache(parent->tree->object.oid.hash, &diff_opts);
        else
-               diff_tree_sha1(parent->tree->object.sha1,
-                              origin->commit->tree->object.sha1,
+               diff_tree_sha1(parent->tree->object.oid.hash,
+                              origin->commit->tree->object.oid.hash,
                               "", &diff_opts);
        diffcore_std(&diff_opts);
 
@@ -627,11 +627,11 @@ static struct origin *find_rename(struct scoreboard *sb,
        diff_opts.single_follow = origin->path;
        diff_setup_done(&diff_opts);
 
-       if (is_null_sha1(origin->commit->object.sha1))
-               do_diff_cache(parent->tree->object.sha1, &diff_opts);
+       if (is_null_oid(&origin->commit->object.oid))
+               do_diff_cache(parent->tree->object.oid.hash, &diff_opts);
        else
-               diff_tree_sha1(parent->tree->object.sha1,
-                              origin->commit->tree->object.sha1,
+               diff_tree_sha1(parent->tree->object.oid.hash,
+                              origin->commit->tree->object.oid.hash,
                               "", &diff_opts);
        diffcore_std(&diff_opts);
 
@@ -977,8 +977,8 @@ static void pass_blame_to_parent(struct scoreboard *sb,
 
        if (diff_hunks(&file_p, &file_o, 0, blame_chunk_cb, &d))
                die("unable to generate diff (%s -> %s)",
-                   sha1_to_hex(parent->commit->object.sha1),
-                   sha1_to_hex(target->commit->object.sha1));
+                   oid_to_hex(&parent->commit->object.oid),
+                   oid_to_hex(&target->commit->object.oid));
        /* The rest are the same as the parent */
        blame_chunk(&d.dstq, &d.srcq, INT_MAX, d.offset, INT_MAX, parent);
        *d.dstq = NULL;
@@ -1126,7 +1126,7 @@ static void find_copy_in_blob(struct scoreboard *sb,
        memset(split, 0, sizeof(struct blame_entry [3]));
        if (diff_hunks(file_p, &file_o, 1, handle_split_cb, &d))
                die("unable to generate diff (%s)",
-                   sha1_to_hex(parent->commit->object.sha1));
+                   oid_to_hex(&parent->commit->object.oid));
        /* remainder, if any, all match the preimage */
        handle_split(sb, ent, d.tlno, d.plno, ent->num_lines, parent, split);
 }
@@ -1275,11 +1275,11 @@ static void find_copy_in_parent(struct scoreboard *sb,
                && (!porigin || strcmp(target->path, porigin->path))))
                DIFF_OPT_SET(&diff_opts, FIND_COPIES_HARDER);
 
-       if (is_null_sha1(target->commit->object.sha1))
-               do_diff_cache(parent->tree->object.sha1, &diff_opts);
+       if (is_null_oid(&target->commit->object.oid))
+               do_diff_cache(parent->tree->object.oid.hash, &diff_opts);
        else
-               diff_tree_sha1(parent->tree->object.sha1,
-                              target->commit->tree->object.sha1,
+               diff_tree_sha1(parent->tree->object.oid.hash,
+                              target->commit->tree->object.oid.hash,
                               "", &diff_opts);
 
        if (!DIFF_OPT_TST(&diff_opts, FIND_COPIES_HARDER))
@@ -1690,7 +1690,7 @@ static void get_commit_info(struct commit *commit,
        if (len)
                strbuf_add(&ret->summary, subject, len);
        else
-               strbuf_addf(&ret->summary, "(%s)", sha1_to_hex(commit->object.sha1));
+               strbuf_addf(&ret->summary, "(%s)", oid_to_hex(&commit->object.oid));
 
        unuse_commit_buffer(commit, message);
 }
@@ -1733,7 +1733,7 @@ static int emit_one_suspect_detail(struct origin *suspect, int repeat)
                printf("boundary\n");
        if (suspect->previous) {
                struct origin *prev = suspect->previous;
-               printf("previous %s ", sha1_to_hex(prev->commit->object.sha1));
+               printf("previous %s ", oid_to_hex(&prev->commit->object.oid));
                write_name_quoted(prev->path, stdout, '\n');
        }
 
@@ -1752,7 +1752,7 @@ static void found_guilty_entry(struct blame_entry *ent)
                struct origin *suspect = ent->suspect;
 
                printf("%s %d %d %d\n",
-                      sha1_to_hex(suspect->commit->object.sha1),
+                      oid_to_hex(&suspect->commit->object.oid),
                       ent->s_lno + 1, ent->lno + 1, ent->num_lines);
                emit_one_suspect_detail(suspect, 0);
                write_filename_info(suspect->path);
@@ -1882,7 +1882,7 @@ static void emit_porcelain(struct scoreboard *sb, struct blame_entry *ent,
        struct origin *suspect = ent->suspect;
        char hex[GIT_SHA1_HEXSZ + 1];
 
-       sha1_to_hex_r(hex, suspect->commit->object.sha1);
+       sha1_to_hex_r(hex, suspect->commit->object.oid.hash);
        printf("%s %d %d %d\n",
               hex,
               ent->s_lno + 1,
@@ -1922,7 +1922,7 @@ static void emit_other(struct scoreboard *sb, struct blame_entry *ent, int opt)
        int show_raw_time = !!(opt & OUTPUT_RAW_TIMESTAMP);
 
        get_commit_info(suspect->commit, &ci, 1);
-       sha1_to_hex_r(hex, suspect->commit->object.sha1);
+       sha1_to_hex_r(hex, suspect->commit->object.oid.hash);
 
        cp = nth_line(sb, ent->lno);
        for (cnt = 0; cnt < ent->num_lines; cnt++) {
@@ -2077,7 +2077,7 @@ static int read_ancestry(const char *graft_file)
 
 static int update_auto_abbrev(int auto_abbrev, struct origin *suspect)
 {
-       const char *uniq = find_unique_abbrev(suspect->commit->object.sha1,
+       const char *uniq = find_unique_abbrev(suspect->commit->object.oid.hash,
                                              auto_abbrev);
        int len = strlen(uniq);
        if (auto_abbrev < len)
@@ -2153,7 +2153,7 @@ static void sanity_check_refcnt(struct scoreboard *sb)
                if (ent->suspect->refcnt <= 0) {
                        fprintf(stderr, "%s in %s has negative refcnt %d\n",
                                ent->suspect->path,
-                               sha1_to_hex(ent->suspect->commit->object.sha1),
+                               oid_to_hex(&ent->suspect->commit->object.oid),
                                ent->suspect->refcnt);
                        baa = 1;
                }
@@ -2216,7 +2216,7 @@ static void verify_working_tree_path(struct commit *work_tree, const char *path)
        struct commit_list *parents;
 
        for (parents = work_tree->parents; parents; parents = parents->next) {
-               const unsigned char *commit_sha1 = parents->item->object.sha1;
+               const unsigned char *commit_sha1 = parents->item->object.oid.hash;
                unsigned char blob_sha1[20];
                unsigned mode;
 
@@ -2310,7 +2310,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
        strbuf_addstr(&msg, "tree 0000000000000000000000000000000000000000\n");
        for (parent = commit->parents; parent; parent = parent->next)
                strbuf_addf(&msg, "parent %s\n",
-                           sha1_to_hex(parent->item->object.sha1));
+                           oid_to_hex(&parent->item->object.oid));
        strbuf_addf(&msg,
                    "author %s\n"
                    "committer %s\n\n"
@@ -2738,7 +2738,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
 
                sb.revs->children.name = "children";
                while (c->parents &&
-                      hashcmp(c->object.sha1, sb.final->object.sha1)) {
+                      oidcmp(&c->object.oid, &sb.final->object.oid)) {
                        struct commit_list *l = xcalloc(1, sizeof(*l));
 
                        l->item = c;
@@ -2748,11 +2748,11 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
                        c = c->parents->item;
                }
 
-               if (hashcmp(c->object.sha1, sb.final->object.sha1))
+               if (oidcmp(&c->object.oid, &sb.final->object.oid))
                        die("--reverse --first-parent together require range along first-parent chain");
        }
 
-       if (is_null_sha1(sb.final->object.sha1)) {
+       if (is_null_oid(&sb.final->object.oid)) {
                o = sb.final->util;
                sb.final_buf = xmemdupz(o->file.ptr, o->file.size);
                sb.final_buf_size = o->file.size;
index b99a436ef36ecfcc70636741642fdcf07b5a5810..3f6c825db1caf9c7cdd2ca7c1280e5ad157f9a27 100644 (file)
@@ -349,7 +349,7 @@ static void add_verbose_info(struct strbuf *out, struct ref_array_item *item,
                fill_tracking_info(&stat, refname, filter->verbose > 1);
 
        strbuf_addf(out, " %s %s%s",
-               find_unique_abbrev(item->commit->object.sha1, filter->abbrev),
+               find_unique_abbrev(item->commit->object.oid.hash, filter->abbrev),
                stat.buf, sub);
        strbuf_release(&stat);
        strbuf_release(&subject);
index e346f521b0b1c197a3a883cb040080048b970ebb..e8110a9243f648129ffbea0de2af039ad7791aa1 100644 (file)
@@ -56,8 +56,8 @@ static int post_checkout_hook(struct commit *old, struct commit *new,
                              int changed)
 {
        return run_hook_le(NULL, "post-checkout",
-                          sha1_to_hex(old ? old->object.sha1 : null_sha1),
-                          sha1_to_hex(new ? new->object.sha1 : null_sha1),
+                          sha1_to_hex(old ? old->object.oid.hash : null_sha1),
+                          sha1_to_hex(new ? new->object.oid.hash : null_sha1),
                           changed ? "1" : "0", NULL);
        /* "new" can be NULL when checking out from the index before
           a commit exists. */
@@ -401,7 +401,7 @@ static void describe_detached_head(const char *msg, struct commit *commit)
        if (!parse_commit(commit))
                pp_commit_easy(CMIT_FMT_ONELINE, commit, &sb);
        fprintf(stderr, "%s %s... %s\n", msg,
-               find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV), sb.buf);
+               find_unique_abbrev(commit->object.oid.hash, DEFAULT_ABBREV), sb.buf);
        strbuf_release(&sb);
 }
 
@@ -510,10 +510,10 @@ static int merge_working_tree(const struct checkout_opts *opts,
                        setup_standard_excludes(topts.dir);
                }
                tree = parse_tree_indirect(old->commit ?
-                                          old->commit->object.sha1 :
+                                          old->commit->object.oid.hash :
                                           EMPTY_TREE_SHA1_BIN);
                init_tree_desc(&trees[0], tree->buffer, tree->size);
-               tree = parse_tree_indirect(new->commit->object.sha1);
+               tree = parse_tree_indirect(new->commit->object.oid.hash);
                init_tree_desc(&trees[1], tree->buffer, tree->size);
 
                ret = unpack_trees(2, trees, &topts);
@@ -641,7 +641,7 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
 
        old_desc = old->name;
        if (!old_desc && old->commit)
-               old_desc = sha1_to_hex(old->commit->object.sha1);
+               old_desc = oid_to_hex(&old->commit->object.oid);
 
        reflog_msg = getenv("GIT_REFLOG_ACTION");
        if (!reflog_msg)
@@ -653,7 +653,7 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
        if (!strcmp(new->name, "HEAD") && !new->path && !opts->force_detach) {
                /* Nothing to do. */
        } else if (opts->force_detach || !new->path) {  /* No longer on any branch. */
-               update_ref(msg.buf, "HEAD", new->commit->object.sha1, NULL,
+               update_ref(msg.buf, "HEAD", new->commit->object.oid.hash, NULL,
                           REF_NODEREF, UPDATE_REFS_DIE_ON_ERR);
                if (!opts->quiet) {
                        if (old->path && advice_detached_head)
@@ -704,7 +704,7 @@ static void describe_one_orphan(struct strbuf *sb, struct commit *commit)
 {
        strbuf_addstr(sb, "  ");
        strbuf_addstr(sb,
-               find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV));
+               find_unique_abbrev(commit->object.oid.hash, DEFAULT_ABBREV));
        strbuf_addch(sb, ' ');
        if (!parse_commit(commit))
                pp_commit_easy(CMIT_FMT_ONELINE, commit, sb);
@@ -762,7 +762,7 @@ static void suggest_reattach(struct commit *commit, struct rev_info *revs)
                        " git branch <new-branch-name> %s\n\n",
                        /* Give ngettext() the count */
                        lost),
-                       find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV));
+                       find_unique_abbrev(commit->object.oid.hash, DEFAULT_ABBREV));
 }
 
 /*
@@ -780,10 +780,10 @@ static void orphaned_commit_warning(struct commit *old, struct commit *new)
        setup_revisions(0, NULL, &revs, NULL);
 
        object->flags &= ~UNINTERESTING;
-       add_pending_object(&revs, object, sha1_to_hex(object->sha1));
+       add_pending_object(&revs, object, oid_to_hex(&object->oid));
 
        for_each_ref(add_pending_uninteresting_ref, &revs);
-       add_pending_sha1(&revs, "HEAD", new->object.sha1, UNINTERESTING);
+       add_pending_sha1(&revs, "HEAD", new->object.oid.hash, UNINTERESTING);
 
        refs = revs.pending;
        revs.leak_pending = 1;
index caae43e7a390d8666cda259e995c14079103d20d..a0b3cd9e5617b5a3a45dd01c8a2c7af0b2fd9668 100644 (file)
@@ -559,7 +559,7 @@ static void write_remote_refs(const struct ref *local_refs)
        for (r = local_refs; r; r = r->next) {
                if (!r->peer_ref)
                        continue;
-               if (ref_transaction_create(t, r->peer_ref->name, r->old_sha1,
+               if (ref_transaction_create(t, r->peer_ref->name, r->old_oid.hash,
                                           0, NULL, &err))
                        die("%s", err.buf);
        }
@@ -579,9 +579,9 @@ static void write_followtags(const struct ref *refs, const char *msg)
                        continue;
                if (ends_with(ref->name, "^{}"))
                        continue;
-               if (!has_sha1_file(ref->old_sha1))
+               if (!has_object_file(&ref->old_oid))
                        continue;
-               update_ref(msg, ref->name, ref->old_sha1,
+               update_ref(msg, ref->name, ref->old_oid.hash,
                           NULL, 0, UPDATE_REFS_DIE_ON_ERR);
        }
 }
@@ -601,7 +601,7 @@ static int iterate_ref_map(void *cb_data, unsigned char sha1[20])
        if (!ref)
                return -1;
 
-       hashcpy(sha1, ref->old_sha1);
+       hashcpy(sha1, ref->old_oid.hash);
        *rm = ref->next;
        return 0;
 }
@@ -650,14 +650,14 @@ static void update_head(const struct ref *our, const struct ref *remote,
                /* Local default branch link */
                create_symref("HEAD", our->name, NULL);
                if (!option_bare) {
-                       update_ref(msg, "HEAD", our->old_sha1, NULL, 0,
+                       update_ref(msg, "HEAD", our->old_oid.hash, NULL, 0,
                                   UPDATE_REFS_DIE_ON_ERR);
                        install_branch_config(0, head, option_origin, our->name);
                }
        } else if (our) {
-               struct commit *c = lookup_commit_reference(our->old_sha1);
+               struct commit *c = lookup_commit_reference(our->old_oid.hash);
                /* --branch specifies a non-branch (i.e. tags), detach HEAD */
-               update_ref(msg, "HEAD", c->object.sha1,
+               update_ref(msg, "HEAD", c->object.oid.hash,
                           NULL, REF_NODEREF, UPDATE_REFS_DIE_ON_ERR);
        } else if (remote) {
                /*
@@ -665,7 +665,7 @@ static void update_head(const struct ref *our, const struct ref *remote,
                 * HEAD points to a branch but we don't know which one.
                 * Detach HEAD in all these cases.
                 */
-               update_ref(msg, "HEAD", remote->old_sha1,
+               update_ref(msg, "HEAD", remote->old_oid.hash,
                           NULL, REF_NODEREF, UPDATE_REFS_DIE_ON_ERR);
        }
 }
@@ -1016,7 +1016,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
                 * remote HEAD check.
                 */
                for (ref = refs; ref; ref = ref->next)
-                       if (is_null_sha1(ref->old_sha1)) {
+                       if (is_null_oid(&ref->old_oid)) {
                                complete_refs_before_fetch = 0;
                                break;
                        }
index 8747c0f2fbe6426b97571bd29df0892efd1fa810..3feeffeab1ccd51a5e30098c31b4daa62e7ef684 100644 (file)
@@ -16,11 +16,11 @@ static const char *sign_commit;
 
 static void new_parent(struct commit *parent, struct commit_list **parents_p)
 {
-       unsigned char *sha1 = parent->object.sha1;
+       struct object_id *oid = &parent->object.oid;
        struct commit_list *parents;
        for (parents = *parents_p; parents; parents = parents->next) {
                if (parents->item == parent) {
-                       error("duplicate parent %s ignored", sha1_to_hex(sha1));
+                       error("duplicate parent %s ignored", oid_to_hex(oid));
                        return;
                }
                parents_p = &parents->next;
index f2a8b78c7a7c5f52c46e03e644cf50413b643d3e..d054f849606b248a82f7b29103308feab36ca9e9 100644 (file)
@@ -300,7 +300,7 @@ static void create_base_index(const struct commit *current_head)
        opts.dst_index = &the_index;
 
        opts.fn = oneway_merge;
-       tree = parse_tree_indirect(current_head->object.sha1);
+       tree = parse_tree_indirect(current_head->object.oid.hash);
        if (!tree)
                die(_("failed to unpack HEAD tree object"));
        parse_tree(tree);
@@ -1769,7 +1769,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
        if (!transaction ||
            ref_transaction_update(transaction, "HEAD", sha1,
                                   current_head
-                                  ? current_head->object.sha1 : null_sha1,
+                                  ? current_head->object.oid.hash : null_sha1,
                                   0, sb.buf, &err) ||
            ref_transaction_commit(transaction, &err)) {
                rollback_index_files();
@@ -1796,10 +1796,10 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
                cfg = init_copy_notes_for_rewrite("amend");
                if (cfg) {
                        /* we are amending, so current_head is not NULL */
-                       copy_note_for_rewrite(cfg, current_head->object.sha1, sha1);
+                       copy_note_for_rewrite(cfg, current_head->object.oid.hash, sha1);
                        finish_copy_notes_for_rewrite(cfg, "Notes added by 'git commit --amend'");
                }
-               run_rewrite_hook(current_head->object.sha1, sha1);
+               run_rewrite_hook(current_head->object.oid.hash, sha1);
        }
        if (!quiet)
                print_summary(prefix, sha1, !current_head);
index 7df554326b08581c49f391d061be14cd1164ea88..8a25abe0a03e2b2463ac352daafc326c4322ac32 100644 (file)
@@ -252,14 +252,14 @@ static void describe(const char *arg, int last_one)
        if (!cmit)
                die(_("%s is not a valid '%s' object"), arg, commit_type);
 
-       n = find_commit_name(cmit->object.sha1);
+       n = find_commit_name(cmit->object.oid.hash);
        if (n && (tags || all || n->prio == 2)) {
                /*
                 * Exact match to an existing ref.
                 */
                display_name(n);
                if (longformat)
-                       show_suffix(0, n->tag ? n->tag->tagged->sha1 : sha1);
+                       show_suffix(0, n->tag ? n->tag->tagged->oid.hash : sha1);
                if (dirty)
                        printf("%s", dirty);
                printf("\n");
@@ -267,7 +267,7 @@ static void describe(const char *arg, int last_one)
        }
 
        if (!max_candidates)
-               die(_("no tag exactly matches '%s'"), sha1_to_hex(cmit->object.sha1));
+               die(_("no tag exactly matches '%s'"), oid_to_hex(&cmit->object.oid));
        if (debug)
                fprintf(stderr, _("searching to describe %s\n"), arg);
 
@@ -317,7 +317,7 @@ static void describe(const char *arg, int last_one)
                if (annotated_cnt && !list) {
                        if (debug)
                                fprintf(stderr, _("finished search at %s\n"),
-                                       sha1_to_hex(c->object.sha1));
+                                       oid_to_hex(&c->object.oid));
                        break;
                }
                while (parents) {
@@ -334,9 +334,9 @@ static void describe(const char *arg, int last_one)
        }
 
        if (!match_cnt) {
-               const unsigned char *sha1 = cmit->object.sha1;
+               struct object_id *oid = &cmit->object.oid;
                if (always) {
-                       printf("%s", find_unique_abbrev(sha1, abbrev));
+                       printf("%s", find_unique_abbrev(oid->hash, abbrev));
                        if (dirty)
                                printf("%s", dirty);
                        printf("\n");
@@ -345,11 +345,11 @@ static void describe(const char *arg, int last_one)
                if (unannotated_cnt)
                        die(_("No annotated tags can describe '%s'.\n"
                            "However, there were unannotated tags: try --tags."),
-                           sha1_to_hex(sha1));
+                           oid_to_hex(oid));
                else
                        die(_("No tags can describe '%s'.\n"
                            "Try --always, or create some tags."),
-                           sha1_to_hex(sha1));
+                           oid_to_hex(oid));
        }
 
        qsort(all_matches, match_cnt, sizeof(all_matches[0]), compare_pt);
@@ -374,13 +374,13 @@ static void describe(const char *arg, int last_one)
                                _("more than %i tags found; listed %i most recent\n"
                                "gave up search at %s\n"),
                                max_candidates, max_candidates,
-                               sha1_to_hex(gave_up_on->object.sha1));
+                               oid_to_hex(&gave_up_on->object.oid));
                }
        }
 
        display_name(all_matches[0].name);
        if (abbrev)
-               show_suffix(all_matches[0].depth, cmit->object.sha1);
+               show_suffix(all_matches[0].depth, cmit->object.oid.hash);
        if (dirty)
                printf("%s", dirty);
        printf("\n");
index 12b683d0217856a23cb4c3271a173ce1b7bfbe68..2a12b81e065bfb75f05baf6694e1a9d53129bc40 100644 (file)
@@ -49,9 +49,9 @@ static int stdin_diff_trees(struct tree *tree1, char *line, int len)
        tree2 = lookup_tree(sha1);
        if (!tree2 || parse_tree(tree2))
                return -1;
-       printf("%s %s\n", sha1_to_hex(tree1->object.sha1),
-                         sha1_to_hex(tree2->object.sha1));
-       diff_tree_sha1(tree1->object.sha1, tree2->object.sha1,
+       printf("%s %s\n", oid_to_hex(&tree1->object.oid),
+                         oid_to_hex(&tree2->object.oid));
+       diff_tree_sha1(tree1->object.oid.hash, tree2->object.oid.hash,
                       "", &log_tree_opt.diffopt);
        log_tree_diff_flush(&log_tree_opt);
        return 0;
@@ -139,7 +139,7 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
                break;
        case 1:
                tree1 = opt->pending.objects[0].item;
-               diff_tree_commit_sha1(tree1->sha1);
+               diff_tree_commit_sha1(tree1->oid.hash);
                break;
        case 2:
                tree1 = opt->pending.objects[0].item;
@@ -149,8 +149,8 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
                        tree2 = tree1;
                        tree1 = tmp;
                }
-               diff_tree_sha1(tree1->sha1,
-                              tree2->sha1,
+               diff_tree_sha1(tree1->oid.hash,
+                              tree2->oid.hash,
                               "", &opt->diffopt);
                log_tree_diff_flush(opt);
                break;
index 4326fa56bfa2021c6518c225eaa3f89b8b852e11..ed0acca91fb870d3f773779b34f4e24c401945e5 100644 (file)
@@ -175,8 +175,8 @@ static int builtin_diff_tree(struct rev_info *revs,
         */
        if (ent1->item->flags & UNINTERESTING)
                swap = 1;
-       sha1[swap] = ent0->item->sha1;
-       sha1[1 - swap] = ent1->item->sha1;
+       sha1[swap] = ent0->item->oid.hash;
+       sha1[1 - swap] = ent1->item->oid.hash;
        diff_tree_sha1(sha1[0], sha1[1], "", &revs->diffopt);
        log_tree_diff_flush(revs);
        return 0;
@@ -196,8 +196,8 @@ static int builtin_diff_combined(struct rev_info *revs,
        if (!revs->dense_combined_merges && !revs->combine_merges)
                revs->dense_combined_merges = revs->combine_merges = 1;
        for (i = 1; i < ents; i++)
-               sha1_array_append(&parents, ent[i].item->sha1);
-       diff_tree_combined(ent[0].item->sha1, &parents,
+               sha1_array_append(&parents, ent[i].item->oid.hash);
+       diff_tree_combined(ent[0].item->oid.hash, &parents,
                           revs->dense_combined_merges, revs);
        sha1_array_clear(&parents);
        return 0;
@@ -395,7 +395,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
                const char *name = entry->name;
                int flags = (obj->flags & UNINTERESTING);
                if (!obj->parsed)
-                       obj = parse_object(obj->sha1);
+                       obj = parse_object(obj->oid.hash);
                obj = deref_tag(obj, NULL, 0);
                if (!obj)
                        die(_("invalid object '%s' given."), name);
@@ -408,7 +408,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
                } else if (obj->type == OBJ_BLOB) {
                        if (2 <= blobs)
                                die(_("more than two blobs given: '%s'"), name);
-                       hashcpy(blob[blobs].sha1, obj->sha1);
+                       hashcpy(blob[blobs].sha1, obj->oid.hash);
                        blob[blobs].name = name;
                        blob[blobs].mode = entry->mode;
                        blobs++;
index d23f3beba9b35a65c3de63d3843ca6158aef72f0..d9ac5d8410b30e02fbb8edb06a1991655c5be8f4 100644 (file)
@@ -544,13 +544,13 @@ static void handle_commit(struct commit *commit, struct rev_info *rev)
        author = strstr(commit_buffer, "\nauthor ");
        if (!author)
                die ("Could not find author in commit %s",
-                    sha1_to_hex(commit->object.sha1));
+                    oid_to_hex(&commit->object.oid));
        author++;
        author_end = strchrnul(author, '\n');
        committer = strstr(author_end, "\ncommitter ");
        if (!committer)
                die ("Could not find committer in commit %s",
-                    sha1_to_hex(commit->object.sha1));
+                    oid_to_hex(&commit->object.oid));
        committer++;
        committer_end = strchrnul(committer, '\n');
        message = strstr(committer_end, "\n\n");
@@ -562,11 +562,11 @@ static void handle_commit(struct commit *commit, struct rev_info *rev)
            get_object_mark(&commit->parents->item->object) != 0 &&
            !full_tree) {
                parse_commit_or_die(commit->parents->item);
-               diff_tree_sha1(commit->parents->item->tree->object.sha1,
-                              commit->tree->object.sha1, "", &rev->diffopt);
+               diff_tree_sha1(commit->parents->item->tree->object.oid.hash,
+                              commit->tree->object.oid.hash, "", &rev->diffopt);
        }
        else
-               diff_root_tree_sha1(commit->tree->object.sha1,
+               diff_root_tree_sha1(commit->tree->object.oid.hash,
                                    "", &rev->diffopt);
 
        /* Export the referenced blobs, and remember the marks. */
@@ -661,13 +661,13 @@ static void handle_tag(const char *name, struct tag *tag)
        }
        if (tagged->type == OBJ_TREE) {
                warning("Omitting tag %s,\nsince tags of trees (or tags of tags of trees, etc.) are not supported.",
-                       sha1_to_hex(tag->object.sha1));
+                       oid_to_hex(&tag->object.oid));
                return;
        }
 
-       buf = read_sha1_file(tag->object.sha1, &type, &size);
+       buf = read_sha1_file(tag->object.oid.hash, &type, &size);
        if (!buf)
-               die ("Could not read tag %s", sha1_to_hex(tag->object.sha1));
+               die ("Could not read tag %s", oid_to_hex(&tag->object.oid));
        message = memmem(buf, size, "\n\n", 2);
        if (message) {
                message += 2;
@@ -706,16 +706,16 @@ static void handle_tag(const char *name, struct tag *tag)
                        case ABORT:
                                die ("Encountered signed tag %s; use "
                                     "--signed-tags=<mode> to handle it.",
-                                    sha1_to_hex(tag->object.sha1));
+                                    oid_to_hex(&tag->object.oid));
                        case WARN:
                                warning ("Exporting signed tag %s",
-                                        sha1_to_hex(tag->object.sha1));
+                                        oid_to_hex(&tag->object.oid));
                                /* fallthru */
                        case VERBATIM:
                                break;
                        case WARN_STRIP:
                                warning ("Stripping signature from tag %s",
-                                        sha1_to_hex(tag->object.sha1));
+                                        oid_to_hex(&tag->object.oid));
                                /* fallthru */
                        case STRIP:
                                message_size = signature + 1 - message;
@@ -731,14 +731,14 @@ static void handle_tag(const char *name, struct tag *tag)
                case ABORT:
                        die ("Tag %s tags unexported object; use "
                             "--tag-of-filtered-object=<mode> to handle it.",
-                            sha1_to_hex(tag->object.sha1));
+                            oid_to_hex(&tag->object.oid));
                case DROP:
                        /* Ignore this tag altogether */
                        return;
                case REWRITE:
                        if (tagged->type != OBJ_COMMIT) {
                                die ("Tag %s tags unexported %s!",
-                                    sha1_to_hex(tag->object.sha1),
+                                    oid_to_hex(&tag->object.oid),
                                     typename(tagged->type));
                        }
                        p = (struct commit *)tagged;
@@ -751,7 +751,7 @@ static void handle_tag(const char *name, struct tag *tag)
                                        break;
                                if (!p->parents)
                                        die ("Can't find replacement commit for tag %s\n",
-                                            sha1_to_hex(tag->object.sha1));
+                                            oid_to_hex(&tag->object.oid));
                                p = p->parents->item;
                        }
                        tagged_mark = get_object_mark(&p->object);
@@ -777,7 +777,7 @@ static struct commit *get_commit(struct rev_cmdline_entry *e, char *full_name)
 
                /* handle nested tags */
                while (tag && tag->object.type == OBJ_TAG) {
-                       parse_object(tag->object.sha1);
+                       parse_object(tag->object.oid.hash);
                        string_list_append(&extra_refs, full_name)->util = tag;
                        tag = (struct tag *)tag->tagged;
                }
@@ -828,7 +828,7 @@ static void get_tags_and_duplicates(struct rev_cmdline_info *info)
                case OBJ_COMMIT:
                        break;
                case OBJ_BLOB:
-                       export_blob(commit->object.sha1);
+                       export_blob(commit->object.oid.hash);
                        continue;
                default: /* OBJ_TAG (nested tags) is already handled */
                        warning("Tag points to object of unexpected type %s, skipping.",
@@ -888,7 +888,7 @@ static void export_marks(char *file)
                if (deco->base && deco->base->type == 1) {
                        mark = ptr_to_mark(deco->decoration);
                        if (fprintf(f, ":%"PRIu32" %s\n", mark,
-                               sha1_to_hex(deco->base->sha1)) < 0) {
+                               oid_to_hex(&deco->base->oid)) < 0) {
                            e = 1;
                            break;
                        }
index 4a6b340ab67622a1e0c57a2bd38e2de4f1ad91a5..cf3019e05bdf45e1fa16a483621a6773976f98c5 100644 (file)
@@ -14,12 +14,14 @@ static void add_sought_entry_mem(struct ref ***sought, int *nr, int *alloc,
                                 const char *name, int namelen)
 {
        struct ref *ref = xcalloc(1, sizeof(*ref) + namelen + 1);
-       unsigned char sha1[20];
-
-       if (namelen > 41 && name[40] == ' ' && !get_sha1_hex(name, sha1)) {
-               hashcpy(ref->old_sha1, sha1);
-               name += 41;
-               namelen -= 41;
+       struct object_id oid;
+       const int chunksz = GIT_SHA1_HEXSZ + 1;
+
+       if (namelen > chunksz && name[chunksz - 1] == ' ' &&
+               !get_oid_hex(name, &oid)) {
+               oidcpy(&ref->old_oid, &oid);
+               name += chunksz;
+               namelen -= chunksz;
        }
 
        memcpy(ref->name, name, namelen);
@@ -210,7 +212,7 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
 
        while (ref) {
                printf("%s %s\n",
-                      sha1_to_hex(ref->old_sha1), ref->name);
+                      oid_to_hex(&ref->old_oid), ref->name);
                ref = ref->next;
        }
 
index ed84963a57b692ab36aecfed61606afcfaa6d2cd..c85f3471d4b53ce7db7662b5531ddebe5513b7b0 100644 (file)
@@ -196,7 +196,7 @@ static int will_fetch(struct ref **head, const unsigned char *sha1)
 {
        struct ref *rm = *head;
        while (rm) {
-               if (!hashcmp(rm->old_sha1, sha1))
+               if (!hashcmp(rm->old_oid.hash, sha1))
                        return 1;
                rm = rm->next;
        }
@@ -224,8 +224,8 @@ static void find_non_local_tags(struct transport *transport,
                 * as one to ignore by setting util to NULL.
                 */
                if (ends_with(ref->name, "^{}")) {
-                       if (item && !has_sha1_file(ref->old_sha1) &&
-                           !will_fetch(head, ref->old_sha1) &&
+                       if (item && !has_object_file(&ref->old_oid) &&
+                           !will_fetch(head, ref->old_oid.hash) &&
                            !has_sha1_file(item->util) &&
                            !will_fetch(head, item->util))
                                item->util = NULL;
@@ -251,7 +251,7 @@ static void find_non_local_tags(struct transport *transport,
                        continue;
 
                item = string_list_insert(&remote_refs, ref->name);
-               item->util = (void *)ref->old_sha1;
+               item->util = (void *)&ref->old_oid;
        }
        string_list_clear(&existing_refs, 1);
 
@@ -273,7 +273,7 @@ static void find_non_local_tags(struct transport *transport,
                {
                        struct ref *rm = alloc_ref(item->string);
                        rm->peer_ref = alloc_ref(item->string);
-                       hashcpy(rm->old_sha1, item->util);
+                       oidcpy(&rm->old_oid, item->util);
                        **tail = rm;
                        *tail = &rm->next;
                }
@@ -419,8 +419,8 @@ static int s_update_ref(const char *action,
        transaction = ref_transaction_begin(&err);
        if (!transaction ||
            ref_transaction_update(transaction, ref->name,
-                                  ref->new_sha1,
-                                  check_old ? ref->old_sha1 : NULL,
+                                  ref->new_oid.hash,
+                                  check_old ? ref->old_oid.hash : NULL,
                                   0, msg, &err))
                goto fail;
 
@@ -453,11 +453,11 @@ static int update_local_ref(struct ref *ref,
        struct branch *current_branch = branch_get(NULL);
        const char *pretty_ref = prettify_refname(ref->name);
 
-       type = sha1_object_info(ref->new_sha1, NULL);
+       type = sha1_object_info(ref->new_oid.hash, NULL);
        if (type < 0)
-               die(_("object %s not found"), sha1_to_hex(ref->new_sha1));
+               die(_("object %s not found"), oid_to_hex(&ref->new_oid));
 
-       if (!hashcmp(ref->old_sha1, ref->new_sha1)) {
+       if (!oidcmp(&ref->old_oid, &ref->new_oid)) {
                if (verbosity > 0)
                        strbuf_addf(display, "= %-*s %-*s -> %s",
                                    TRANSPORT_SUMMARY(_("[up to date]")),
@@ -468,7 +468,7 @@ static int update_local_ref(struct ref *ref,
        if (current_branch &&
            !strcmp(ref->name, current_branch->name) &&
            !(update_head_ok || is_bare_repository()) &&
-           !is_null_sha1(ref->old_sha1)) {
+           !is_null_oid(&ref->old_oid)) {
                /*
                 * If this is the head, and it's not okay to update
                 * the head, and the old value of the head isn't empty...
@@ -480,7 +480,7 @@ static int update_local_ref(struct ref *ref,
                return 1;
        }
 
-       if (!is_null_sha1(ref->old_sha1) &&
+       if (!is_null_oid(&ref->old_oid) &&
            starts_with(ref->name, "refs/tags/")) {
                int r;
                r = s_update_ref("updating tag", ref, 0);
@@ -492,8 +492,8 @@ static int update_local_ref(struct ref *ref,
                return r;
        }
 
-       current = lookup_commit_reference_gently(ref->old_sha1, 1);
-       updated = lookup_commit_reference_gently(ref->new_sha1, 1);
+       current = lookup_commit_reference_gently(ref->old_oid.hash, 1);
+       updated = lookup_commit_reference_gently(ref->new_oid.hash, 1);
        if (!current || !updated) {
                const char *msg;
                const char *what;
@@ -517,7 +517,7 @@ static int update_local_ref(struct ref *ref,
 
                if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
                    (recurse_submodules != RECURSE_SUBMODULES_ON))
-                       check_for_new_submodule_commits(ref->new_sha1);
+                       check_for_new_submodule_commits(ref->new_oid.hash);
                r = s_update_ref(msg, ref, 0);
                strbuf_addf(display, "%c %-*s %-*s -> %s%s",
                            r ? '!' : '*',
@@ -530,12 +530,12 @@ static int update_local_ref(struct ref *ref,
        if (in_merge_bases(current, updated)) {
                struct strbuf quickref = STRBUF_INIT;
                int r;
-               strbuf_add_unique_abbrev(&quickref, current->object.sha1, DEFAULT_ABBREV);
+               strbuf_add_unique_abbrev(&quickref, current->object.oid.hash, DEFAULT_ABBREV);
                strbuf_addstr(&quickref, "..");
-               strbuf_add_unique_abbrev(&quickref, ref->new_sha1, DEFAULT_ABBREV);
+               strbuf_add_unique_abbrev(&quickref, ref->new_oid.hash, DEFAULT_ABBREV);
                if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
                    (recurse_submodules != RECURSE_SUBMODULES_ON))
-                       check_for_new_submodule_commits(ref->new_sha1);
+                       check_for_new_submodule_commits(ref->new_oid.hash);
                r = s_update_ref("fast-forward", ref, 1);
                strbuf_addf(display, "%c %-*s %-*s -> %s%s",
                            r ? '!' : ' ',
@@ -547,12 +547,12 @@ static int update_local_ref(struct ref *ref,
        } else if (force || ref->force) {
                struct strbuf quickref = STRBUF_INIT;
                int r;
-               strbuf_add_unique_abbrev(&quickref, current->object.sha1, DEFAULT_ABBREV);
+               strbuf_add_unique_abbrev(&quickref, current->object.oid.hash, DEFAULT_ABBREV);
                strbuf_addstr(&quickref, "...");
-               strbuf_add_unique_abbrev(&quickref, ref->new_sha1, DEFAULT_ABBREV);
+               strbuf_add_unique_abbrev(&quickref, ref->new_oid.hash, DEFAULT_ABBREV);
                if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
                    (recurse_submodules != RECURSE_SUBMODULES_ON))
-                       check_for_new_submodule_commits(ref->new_sha1);
+                       check_for_new_submodule_commits(ref->new_oid.hash);
                r = s_update_ref("forced-update", ref, 1);
                strbuf_addf(display, "%c %-*s %-*s -> %s  (%s)",
                            r ? '!' : '+',
@@ -580,7 +580,7 @@ static int iterate_ref_map(void *cb_data, unsigned char sha1[20])
        if (!ref)
                return -1; /* end of the list */
        *rm = ref->next;
-       hashcpy(sha1, ref->old_sha1);
+       hashcpy(sha1, ref->old_oid.hash);
        return 0;
 }
 
@@ -631,7 +631,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
                                continue;
                        }
 
-                       commit = lookup_commit_reference_gently(rm->old_sha1, 1);
+                       commit = lookup_commit_reference_gently(rm->old_oid.hash, 1);
                        if (!commit)
                                rm->fetch_head_status = FETCH_HEAD_NOT_FOR_MERGE;
 
@@ -640,8 +640,8 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
 
                        if (rm->peer_ref) {
                                ref = alloc_ref(rm->peer_ref->name);
-                               hashcpy(ref->old_sha1, rm->peer_ref->old_sha1);
-                               hashcpy(ref->new_sha1, rm->old_sha1);
+                               oidcpy(&ref->old_oid, &rm->peer_ref->old_oid);
+                               oidcpy(&ref->new_oid, &rm->old_oid);
                                ref->force = rm->peer_ref->force;
                        }
 
@@ -686,7 +686,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
                                /* fall-through */
                        case FETCH_HEAD_MERGE:
                                fprintf(fp, "%s\t%s\t%s",
-                                       sha1_to_hex(rm->old_sha1),
+                                       oid_to_hex(&rm->old_oid),
                                        merge_status_marker,
                                        note.buf);
                                for (i = 0; i < url_len; ++i)
@@ -928,7 +928,7 @@ static int do_fetch(struct transport *transport,
                                                   rm->peer_ref->name);
                        if (peer_item) {
                                struct object_id *old_oid = peer_item->util;
-                               hashcpy(rm->peer_ref->old_sha1, old_oid->hash);
+                               oidcpy(&rm->peer_ref->old_oid, old_oid);
                        }
                }
        }
index 846004b83358cd8adfd5f7de96b2d551700037a1..e5658c320ee45c208d4087e2b9761f38e0aeca92 100644 (file)
@@ -378,7 +378,7 @@ static void shortlog(const char *name,
 
                if (!sb.len)
                        string_list_append(&subjects,
-                                          sha1_to_hex(commit->object.sha1));
+                                          oid_to_hex(&commit->object.oid));
                else
                        string_list_append(&subjects, strbuf_detach(&sb, NULL));
        }
@@ -568,7 +568,7 @@ static void find_merge_parents(struct merge_parents *result,
                if (!parent)
                        continue;
                commit_list_insert(parent, &parents);
-               add_merge_parent(result, obj->sha1, parent->object.sha1);
+               add_merge_parent(result, obj->oid.hash, parent->object.oid.hash);
        }
        head_commit = lookup_commit(head);
        if (head_commit)
@@ -578,7 +578,7 @@ static void find_merge_parents(struct merge_parents *result,
        while (parents) {
                struct commit *cmit = pop_commit(&parents);
                for (i = 0; i < result->nr; i++)
-                       if (!hashcmp(result->item[i].commit, cmit->object.sha1))
+                       if (!hashcmp(result->item[i].commit, cmit->object.oid.hash))
                                result->item[i].used = 1;
        }
 
index 8b8bb42c51d13ce9263c0a6fd30fa36810fef78c..55eac756f7c83e496daae7cb8874552caaa58ff5 100644 (file)
@@ -67,7 +67,7 @@ static void objreport(struct object *obj, const char *msg_type,
                        const char *err)
 {
        fprintf(stderr, "%s in %s %s: %s\n",
-               msg_type, typename(obj->type), sha1_to_hex(obj->sha1), err);
+               msg_type, typename(obj->type), oid_to_hex(&obj->oid), err);
 }
 
 static int objerror(struct object *obj, const char *err)
@@ -97,7 +97,7 @@ static int mark_object(struct object *obj, int type, void *data, struct fsck_opt
        if (!obj) {
                /* ... these references to parent->fld are safe here */
                printf("broken link from %7s %s\n",
-                          typename(parent->type), sha1_to_hex(parent->sha1));
+                          typename(parent->type), oid_to_hex(&parent->oid));
                printf("broken link from %7s %s\n",
                           (type == OBJ_ANY ? "unknown" : typename(type)), "unknown");
                errors_found |= ERROR_REACHABLE;
@@ -112,11 +112,11 @@ static int mark_object(struct object *obj, int type, void *data, struct fsck_opt
                return 0;
        obj->flags |= REACHABLE;
        if (!(obj->flags & HAS_OBJ)) {
-               if (parent && !has_sha1_file(obj->sha1)) {
+               if (parent && !has_object_file(&obj->oid)) {
                        printf("broken link from %7s %s\n",
-                                typename(parent->type), sha1_to_hex(parent->sha1));
+                                typename(parent->type), oid_to_hex(&parent->oid));
                        printf("              to %7s %s\n",
-                                typename(obj->type), sha1_to_hex(obj->sha1));
+                                typename(obj->type), oid_to_hex(&obj->oid));
                        errors_found |= ERROR_REACHABLE;
                }
                return 1;
@@ -186,11 +186,11 @@ static void check_reachable_object(struct object *obj)
         * do a full fsck
         */
        if (!(obj->flags & HAS_OBJ)) {
-               if (has_sha1_pack(obj->sha1))
+               if (has_sha1_pack(obj->oid.hash))
                        return; /* it is in pack - forget about it */
-               if (connectivity_only && has_sha1_file(obj->sha1))
+               if (connectivity_only && has_object_file(&obj->oid))
                        return;
-               printf("missing %s %s\n", typename(obj->type), sha1_to_hex(obj->sha1));
+               printf("missing %s %s\n", typename(obj->type), oid_to_hex(&obj->oid));
                errors_found |= ERROR_REACHABLE;
                return;
        }
@@ -215,7 +215,7 @@ static void check_unreachable_object(struct object *obj)
         * since this is something that is prunable.
         */
        if (show_unreachable) {
-               printf("unreachable %s %s\n", typename(obj->type), sha1_to_hex(obj->sha1));
+               printf("unreachable %s %s\n", typename(obj->type), oid_to_hex(&obj->oid));
                return;
        }
 
@@ -234,11 +234,11 @@ static void check_unreachable_object(struct object *obj)
        if (!obj->used) {
                if (show_dangling)
                        printf("dangling %s %s\n", typename(obj->type),
-                              sha1_to_hex(obj->sha1));
+                              oid_to_hex(&obj->oid));
                if (write_lost_and_found) {
                        char *filename = git_pathdup("lost-found/%s/%s",
                                obj->type == OBJ_COMMIT ? "commit" : "other",
-                               sha1_to_hex(obj->sha1));
+                               oid_to_hex(&obj->oid));
                        FILE *f;
 
                        if (safe_create_leading_directories_const(filename)) {
@@ -249,10 +249,10 @@ static void check_unreachable_object(struct object *obj)
                        if (!(f = fopen(filename, "w")))
                                die_errno("Could not open '%s'", filename);
                        if (obj->type == OBJ_BLOB) {
-                               if (stream_blob_to_fd(fileno(f), obj->sha1, NULL, 1))
+                               if (stream_blob_to_fd(fileno(f), obj->oid.hash, NULL, 1))
                                        die_errno("Could not write '%s'", filename);
                        } else
-                               fprintf(f, "%s\n", sha1_to_hex(obj->sha1));
+                               fprintf(f, "%s\n", oid_to_hex(&obj->oid));
                        if (fclose(f))
                                die_errno("Could not finish '%s'",
                                          filename);
@@ -271,7 +271,7 @@ static void check_unreachable_object(struct object *obj)
 static void check_object(struct object *obj)
 {
        if (verbose)
-               fprintf(stderr, "Checking %s\n", sha1_to_hex(obj->sha1));
+               fprintf(stderr, "Checking %s\n", oid_to_hex(&obj->oid));
 
        if (obj->flags & REACHABLE)
                check_reachable_object(obj);
@@ -307,7 +307,7 @@ static int fsck_obj(struct object *obj)
 
        if (verbose)
                fprintf(stderr, "Checking %s %s\n",
-                       typename(obj->type), sha1_to_hex(obj->sha1));
+                       typename(obj->type), oid_to_hex(&obj->oid));
 
        if (fsck_walk(obj, NULL, &fsck_obj_options))
                objerror(obj, "broken links");
@@ -326,15 +326,15 @@ static int fsck_obj(struct object *obj)
                free_commit_buffer(commit);
 
                if (!commit->parents && show_root)
-                       printf("root %s\n", sha1_to_hex(commit->object.sha1));
+                       printf("root %s\n", oid_to_hex(&commit->object.oid));
        }
 
        if (obj->type == OBJ_TAG) {
                struct tag *tag = (struct tag *) obj;
 
                if (show_tags && tag->tagged) {
-                       printf("tagged %s %s", typename(tag->tagged->type), sha1_to_hex(tag->tagged->sha1));
-                       printf(" (%s) in %s\n", tag->tag, sha1_to_hex(tag->object.sha1));
+                       printf("tagged %s %s", typename(tag->tagged->type), oid_to_hex(&tag->tagged->oid));
+                       printf(" (%s) in %s\n", tag->tag, oid_to_hex(&tag->object.oid));
                }
        }
 
index 749e346f4907abca7e9803248e236f9517c4e430..4229cae390ddddcc74f3506dc892ed02b45d7eae 100644 (file)
@@ -459,7 +459,7 @@ static int grep_object(struct grep_opt *opt, const struct pathspec *pathspec,
                       struct object *obj, const char *name, const char *path)
 {
        if (obj->type == OBJ_BLOB)
-               return grep_sha1(opt, obj->sha1, name, 0, path);
+               return grep_sha1(opt, obj->oid.hash, name, 0, path);
        if (obj->type == OBJ_COMMIT || obj->type == OBJ_TREE) {
                struct tree_desc tree;
                void *data;
@@ -468,12 +468,12 @@ static int grep_object(struct grep_opt *opt, const struct pathspec *pathspec,
                int hit, len;
 
                grep_read_lock();
-               data = read_object_with_reference(obj->sha1, tree_type,
+               data = read_object_with_reference(obj->oid.hash, tree_type,
                                                  &size, NULL);
                grep_read_unlock();
 
                if (!data)
-                       die(_("unable to read tree (%s)"), sha1_to_hex(obj->sha1));
+                       die(_("unable to read tree (%s)"), oid_to_hex(&obj->oid));
 
                len = name ? strlen(name) : 0;
                strbuf_init(&base, PATH_MAX + len + 1);
index 1ad1bde69600d3097d71ed67d230d2e2f916544e..6a015095877a8d201e68348ecd76ddc5331af357 100644 (file)
@@ -199,7 +199,7 @@ static int mark_link(struct object *obj, int type, void *data, struct fsck_optio
                return -1;
 
        if (type != OBJ_ANY && obj->type != type)
-               die(_("object type mismatch at %s"), sha1_to_hex(obj->sha1));
+               die(_("object type mismatch at %s"), oid_to_hex(&obj->oid));
 
        obj->flags |= FLAG_LINK;
        return 0;
@@ -217,13 +217,13 @@ static unsigned check_object(struct object *obj)
 
        if (!(obj->flags & FLAG_CHECKED)) {
                unsigned long size;
-               int type = sha1_object_info(obj->sha1, &size);
+               int type = sha1_object_info(obj->oid.hash, &size);
                if (type <= 0)
                        die(_("did not receive expected object %s"),
-                             sha1_to_hex(obj->sha1));
+                             oid_to_hex(&obj->oid));
                if (type != obj->type)
                        die(_("object %s: expected type %s, found %s"),
-                           sha1_to_hex(obj->sha1),
+                           oid_to_hex(&obj->oid),
                            typename(obj->type), typename(type));
                obj->flags |= FLAG_CHECKED;
                return 1;
@@ -842,7 +842,7 @@ static void sha1_object(const void *data, struct object_entry *obj_entry,
                            fsck_object(obj, buf, size, &fsck_options))
                                die(_("Error in object"));
                        if (fsck_walk(obj, NULL, &fsck_options))
-                               die(_("Not all child objects of %s are reachable"), sha1_to_hex(obj->sha1));
+                               die(_("Not all child objects of %s are reachable"), oid_to_hex(&obj->oid));
 
                        if (obj->type == OBJ_TREE) {
                                struct tree *item = (struct tree *) obj;
index dda671d975255494a6987e82e2ccf23f7f69f7ee..069bd3a909045af432213b21eb4b98bdd29a3443 100644 (file)
@@ -552,7 +552,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
                const char *name = objects[i].name;
                switch (o->type) {
                case OBJ_BLOB:
-                       ret = show_blob_object(o->sha1, &rev, name);
+                       ret = show_blob_object(o->oid.hash, &rev, name);
                        break;
                case OBJ_TAG: {
                        struct tag *t = (struct tag *)o;
@@ -563,14 +563,14 @@ int cmd_show(int argc, const char **argv, const char *prefix)
                                        diff_get_color_opt(&rev.diffopt, DIFF_COMMIT),
                                        t->tag,
                                        diff_get_color_opt(&rev.diffopt, DIFF_RESET));
-                       ret = show_tag_object(o->sha1, &rev);
+                       ret = show_tag_object(o->oid.hash, &rev);
                        rev.shown_one = 1;
                        if (ret)
                                break;
-                       o = parse_object(t->tagged->sha1);
+                       o = parse_object(t->tagged->oid.hash);
                        if (!o)
                                ret = error(_("Could not read object %s"),
-                                           sha1_to_hex(t->tagged->sha1));
+                                           oid_to_hex(&t->tagged->oid));
                        objects[i].item = o;
                        i--;
                        break;
@@ -830,8 +830,8 @@ static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids)
        o2 = rev->pending.objects[1].item;
        flags1 = o1->flags;
        flags2 = o2->flags;
-       c1 = lookup_commit_reference(o1->sha1);
-       c2 = lookup_commit_reference(o2->sha1);
+       c1 = lookup_commit_reference(o1->oid.hash);
+       c2 = lookup_commit_reference(o2->oid.hash);
 
        if ((flags1 & UNINTERESTING) == (flags2 & UNINTERESTING))
                die(_("Not a range."));
@@ -896,8 +896,8 @@ static void add_branch_description(struct strbuf *buf, const char *branch_name)
 static char *find_branch_name(struct rev_info *rev)
 {
        int i, positive = -1;
-       unsigned char branch_sha1[20];
-       const unsigned char *tip_sha1;
+       struct object_id branch_oid;
+       const struct object_id *tip_oid;
        const char *ref, *v;
        char *full_ref, *branch = NULL;
 
@@ -912,10 +912,10 @@ static char *find_branch_name(struct rev_info *rev)
        if (positive < 0)
                return NULL;
        ref = rev->cmdline.rev[positive].name;
-       tip_sha1 = rev->cmdline.rev[positive].item->sha1;
-       if (dwim_ref(ref, strlen(ref), branch_sha1, &full_ref) &&
+       tip_oid = &rev->cmdline.rev[positive].item->oid;
+       if (dwim_ref(ref, strlen(ref), branch_oid.hash, &full_ref) &&
            skip_prefix(full_ref, "refs/heads/", &v) &&
-           !hashcmp(tip_sha1, branch_sha1))
+           !oidcmp(tip_oid, &branch_oid))
                branch = xstrdup(v);
        free(full_ref);
        return branch;
@@ -993,8 +993,8 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
 
        diff_setup_done(&opts);
 
-       diff_tree_sha1(origin->tree->object.sha1,
-                      head->tree->object.sha1,
+       diff_tree_sha1(origin->tree->object.oid.hash,
+                      head->tree->object.oid.hash,
                       "", &opts);
        diffcore_std(&opts);
        diff_flush(&opts);
@@ -1443,7 +1443,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                /* Don't say anything if head and upstream are the same. */
                if (rev.pending.nr == 2) {
                        struct object_array_entry *o = rev.pending.objects;
-                       if (hashcmp(o[0].item->sha1, o[1].item->sha1) == 0)
+                       if (oidcmp(&o[0].item->oid, &o[1].item->oid) == 0)
                                return 0;
                }
                get_patch_ids(&rev, &ids);
@@ -1550,7 +1550,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                                        string_list_append(rev.ref_message_ids,
                                                           rev.message_id);
                        }
-                       gen_message_id(&rev, sha1_to_hex(commit->object.sha1));
+                       gen_message_id(&rev, oid_to_hex(&commit->object.oid));
                }
 
                if (!use_stdout &&
@@ -1612,12 +1612,12 @@ static void print_commit(char sign, struct commit *commit, int verbose,
 {
        if (!verbose) {
                printf("%c %s\n", sign,
-                      find_unique_abbrev(commit->object.sha1, abbrev));
+                      find_unique_abbrev(commit->object.oid.hash, abbrev));
        } else {
                struct strbuf buf = STRBUF_INIT;
                pp_commit_easy(CMIT_FMT_ONELINE, commit, &buf);
                printf("%c %s %s\n", sign,
-                      find_unique_abbrev(commit->object.sha1, abbrev),
+                      find_unique_abbrev(commit->object.oid.hash, abbrev),
                       buf.buf);
                strbuf_release(&buf);
        }
@@ -1675,7 +1675,7 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)
        /* Don't say anything if head and upstream are the same. */
        if (revs.pending.nr == 2) {
                struct object_array_entry *o = revs.pending.objects;
-               if (hashcmp(o[0].item->sha1, o[1].item->sha1) == 0)
+               if (oidcmp(&o[0].item->oid, &o[1].item->oid) == 0)
                        return 0;
        }
 
index a31024900b0a812c94dfa86024cdf45df36b96a1..fa65a8448aadcb2d26613867cab7822e02e4853c 100644 (file)
@@ -125,7 +125,7 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
                        continue;
                if (!tail_match(pattern, ref->name))
                        continue;
-               printf("%s      %s\n", sha1_to_hex(ref->old_sha1), ref->name);
+               printf("%s      %s\n", oid_to_hex(&ref->old_oid), ref->name);
                status = 0; /* we found something */
        }
        return status;
index 08a8217890df599100ad0da04dc2cfaabd3a11f6..a8911626c2ca9e178c8f4373d544c670afdb6aea 100644 (file)
@@ -16,7 +16,7 @@ static int show_merge_base(struct commit **rev, int rev_nr, int show_all)
                return 1;
 
        while (result) {
-               printf("%s\n", sha1_to_hex(result->item->object.sha1));
+               printf("%s\n", oid_to_hex(&result->item->object.oid));
                if (!show_all)
                        return 0;
                result = result->next;
@@ -62,7 +62,7 @@ static int handle_independent(int count, const char **args)
                return 1;
 
        while (result) {
-               printf("%s\n", sha1_to_hex(result->item->object.sha1));
+               printf("%s\n", oid_to_hex(&result->item->object.oid));
                result = result->next;
        }
        return 0;
@@ -83,7 +83,7 @@ static int handle_octopus(int count, const char **args, int show_all)
                return 1;
 
        while (result) {
-               printf("%s\n", sha1_to_hex(result->item->object.sha1));
+               printf("%s\n", oid_to_hex(&result->item->object.oid));
                if (!show_all)
                        return 0;
                result = result->next;
@@ -196,7 +196,7 @@ static int handle_fork_point(int argc, const char **argv)
                goto cleanup_return;
        }
 
-       printf("%s\n", sha1_to_hex(bases->item->object.sha1));
+       printf("%s\n", oid_to_hex(&bases->item->object.oid));
 
 cleanup_return:
        free_commit_list(bases);
index 2a4aafec6a906e22713b88d90f350071bfdb1d59..d4f0cbd45149eebe15f53ff8c34eefd9b3803d82 100644 (file)
@@ -60,7 +60,7 @@ static void *result(struct merge_list *entry, unsigned long *size)
        const char *path = entry->path;
 
        if (!entry->stage)
-               return read_sha1_file(entry->blob->object.sha1, &type, size);
+               return read_sha1_file(entry->blob->object.oid.hash, &type, size);
        base = NULL;
        if (entry->stage == 1) {
                base = entry->blob;
@@ -82,7 +82,7 @@ static void *origin(struct merge_list *entry, unsigned long *size)
        enum object_type type;
        while (entry) {
                if (entry->stage == 2)
-                       return read_sha1_file(entry->blob->object.sha1, &type, size);
+                       return read_sha1_file(entry->blob->object.oid.hash, &type, size);
                entry = entry->link;
        }
        return NULL;
@@ -130,7 +130,7 @@ static void show_result_list(struct merge_list *entry)
        do {
                struct merge_list *link = entry->link;
                static const char *desc[4] = { "result", "base", "our", "their" };
-               printf("  %-6s %o %s %s\n", desc[entry->stage], entry->mode, sha1_to_hex(entry->blob->object.sha1), entry->path);
+               printf("  %-6s %o %s %s\n", desc[entry->stage], entry->mode, oid_to_hex(&entry->blob->object.oid), entry->path);
                entry = link;
        } while (entry);
 }
index bbf3110f88ae118065da4994de63f345cf414ba7..15bf95b3ac6c54727992103b1943515a1da32ff4 100644 (file)
@@ -365,7 +365,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead
        while ((commit = get_revision(&rev)) != NULL) {
                strbuf_addch(&out, '\n');
                strbuf_addf(&out, "commit %s\n",
-                       sha1_to_hex(commit->object.sha1));
+                       oid_to_hex(&commit->object.oid));
                pretty_print_commit(&ctx, commit, &out);
        }
        if (write_in_full(fd, out.buf, out.len) != out.len)
@@ -380,7 +380,7 @@ static void finish(struct commit *head_commit,
                   const unsigned char *new_head, const char *msg)
 {
        struct strbuf reflog_message = STRBUF_INIT;
-       const unsigned char *head = head_commit->object.sha1;
+       const unsigned char *head = head_commit->object.oid.hash;
 
        if (!msg)
                strbuf_addstr(&reflog_message, getenv("GIT_REFLOG_ACTION"));
@@ -497,7 +497,7 @@ static void merge_name(const char *remote, struct strbuf *msg)
                if (ref_exists(truname.buf)) {
                        strbuf_addf(msg,
                                    "%s\t\tbranch '%s'%s of .\n",
-                                   sha1_to_hex(remote_head->object.sha1),
+                                   sha1_to_hex(remote_head->object.oid.hash),
                                    truname.buf + 11,
                                    (early ? " (early part)" : ""));
                        strbuf_release(&truname);
@@ -511,7 +511,7 @@ static void merge_name(const char *remote, struct strbuf *msg)
                desc = merge_remote_util(remote_head);
                if (desc && desc->obj && desc->obj->type == OBJ_TAG) {
                        strbuf_addf(msg, "%s\t\t%s '%s'\n",
-                                   sha1_to_hex(desc->obj->sha1),
+                                   sha1_to_hex(desc->obj->oid.hash),
                                    typename(desc->obj->type),
                                    remote);
                        goto cleanup;
@@ -519,7 +519,7 @@ static void merge_name(const char *remote, struct strbuf *msg)
        }
 
        strbuf_addf(msg, "%s\t\tcommit '%s'\n",
-               sha1_to_hex(remote_head->object.sha1), remote);
+               sha1_to_hex(remote_head->object.oid.hash), remote);
 cleanup:
        strbuf_release(&buf);
        strbuf_release(&bname);
@@ -892,7 +892,7 @@ static struct commit *is_old_style_invocation(int argc, const char **argv,
                second_token = lookup_commit_reference_gently(second_sha1, 0);
                if (!second_token)
                        die(_("'%s' is not a commit"), argv[1]);
-               if (hashcmp(second_token->object.sha1, head))
+               if (hashcmp(second_token->object.oid.hash, head))
                        return NULL;
        }
        return second_token;
@@ -958,14 +958,14 @@ static void write_merge_state(struct commit_list *remoteheads)
        struct strbuf buf = STRBUF_INIT;
 
        for (j = remoteheads; j; j = j->next) {
-               unsigned const char *sha1;
+               struct object_id *oid;
                struct commit *c = j->item;
                if (c->util && merge_remote_util(c)->obj) {
-                       sha1 = merge_remote_util(c)->obj->sha1;
+                       oid = &merge_remote_util(c)->obj->oid;
                } else {
-                       sha1 = c->object.sha1;
+                       oid = &c->object.oid;
                }
-               strbuf_addf(&buf, "%s\n", sha1_to_hex(sha1));
+               strbuf_addf(&buf, "%s\n", oid_to_hex(oid));
        }
        filename = git_path_merge_head();
        fd = open(filename, O_WRONLY | O_CREAT, 0666);
@@ -1274,8 +1274,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                        die(_("%s - not something we can merge"), argv[0]);
                if (remoteheads->next)
                        die(_("Can merge only exactly one commit into empty head"));
-               read_empty(remote_head->object.sha1, 0);
-               update_ref("initial pull", "HEAD", remote_head->object.sha1,
+               read_empty(remote_head->object.oid.hash, 0);
+               update_ref("initial pull", "HEAD", remote_head->object.oid.hash,
                           NULL, 0, UPDATE_REFS_DIE_ON_ERR);
                goto done;
        }
@@ -1289,7 +1289,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
         * additional safety measure to check for it.
         */
        if (!have_message &&
-           is_old_style_invocation(argc, argv, head_commit->object.sha1)) {
+           is_old_style_invocation(argc, argv, head_commit->object.oid.hash)) {
                warning("old-style 'git merge <msg> HEAD <commit>' is deprecated.");
                strbuf_addstr(&merge_msg, argv[0]);
                head_arg = argv[1];
@@ -1323,7 +1323,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 
                        check_commit_signature(commit, &signature_check);
 
-                       find_unique_abbrev_r(hex, commit->object.sha1, DEFAULT_ABBREV);
+                       find_unique_abbrev_r(hex, commit->object.oid.hash, DEFAULT_ABBREV);
                        switch (signature_check.result) {
                        case 'G':
                                break;
@@ -1353,7 +1353,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
        for (p = remoteheads; p; p = p->next) {
                struct commit *commit = p->item;
                strbuf_addf(&buf, "GITHEAD_%s",
-                           sha1_to_hex(commit->object.sha1));
+                           sha1_to_hex(commit->object.oid.hash));
                setenv(buf.buf, merge_remote_util(commit)->name, 1);
                strbuf_reset(&buf);
                if (fast_forward != FF_ONLY &&
@@ -1393,7 +1393,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                free(list);
        }
 
-       update_ref("updating ORIG_HEAD", "ORIG_HEAD", head_commit->object.sha1,
+       update_ref("updating ORIG_HEAD", "ORIG_HEAD", head_commit->object.oid.hash,
                   NULL, 0, UPDATE_REFS_DIE_ON_ERR);
 
        if (remoteheads && !common)
@@ -1409,16 +1409,16 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                goto done;
        } else if (fast_forward != FF_NO && !remoteheads->next &&
                        !common->next &&
-                       !hashcmp(common->item->object.sha1, head_commit->object.sha1)) {
+                       !hashcmp(common->item->object.oid.hash, head_commit->object.oid.hash)) {
                /* Again the most common case of merging one remote. */
                struct strbuf msg = STRBUF_INIT;
                struct commit *commit;
 
                if (verbosity >= 0) {
                        char from[GIT_SHA1_HEXSZ + 1], to[GIT_SHA1_HEXSZ + 1];
-                       find_unique_abbrev_r(from, head_commit->object.sha1,
+                       find_unique_abbrev_r(from, head_commit->object.oid.hash,
                                              DEFAULT_ABBREV);
-                       find_unique_abbrev_r(to, remoteheads->item->object.sha1,
+                       find_unique_abbrev_r(to, remoteheads->item->object.oid.hash,
                                              DEFAULT_ABBREV);
                        printf(_("Updating %s..%s\n"), from, to);
                }
@@ -1432,14 +1432,14 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                        goto done;
                }
 
-               if (checkout_fast_forward(head_commit->object.sha1,
-                                         commit->object.sha1,
+               if (checkout_fast_forward(head_commit->object.oid.hash,
+                                         commit->object.oid.hash,
                                          overwrite_ignore)) {
                        ret = 1;
                        goto done;
                }
 
-               finish(head_commit, remoteheads, commit->object.sha1, msg.buf);
+               finish(head_commit, remoteheads, commit->object.oid.hash, msg.buf);
                drop_save();
                goto done;
        } else if (!remoteheads->next && common->next)
@@ -1458,9 +1458,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                        /* See if it is really trivial. */
                        git_committer_info(IDENT_STRICT);
                        printf(_("Trying really trivial in-index merge...\n"));
-                       if (!read_tree_trivial(common->item->object.sha1,
-                                              head_commit->object.sha1,
-                                              remoteheads->item->object.sha1)) {
+                       if (!read_tree_trivial(common->item->object.oid.hash,
+                                              head_commit->object.oid.hash,
+                                              remoteheads->item->object.oid.hash)) {
                                ret = merge_trivial(head_commit, remoteheads);
                                goto done;
                        }
@@ -1483,8 +1483,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                         * HEAD^^" would be missed.
                         */
                        common_one = get_merge_bases(head_commit, j->item);
-                       if (hashcmp(common_one->item->object.sha1,
-                               j->item->object.sha1)) {
+                       if (hashcmp(common_one->item->object.oid.hash,
+                               j->item->object.oid.hash)) {
                                up_to_date = 0;
                                break;
                        }
@@ -1520,7 +1520,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                int ret;
                if (i) {
                        printf(_("Rewinding the tree to pristine...\n"));
-                       restore_state(head_commit->object.sha1, stash);
+                       restore_state(head_commit->object.oid.hash, stash);
                }
                if (use_strategies_nr != 1)
                        printf(_("Trying merge strategy %s...\n"),
@@ -1586,7 +1586,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
         * it up.
         */
        if (!best_strategy) {
-               restore_state(head_commit->object.sha1, stash);
+               restore_state(head_commit->object.oid.hash, stash);
                if (use_strategies_nr > 1)
                        fprintf(stderr,
                                _("No merge strategy handled the merge.\n"));
@@ -1599,7 +1599,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                ; /* We already have its result in the working tree. */
        else {
                printf(_("Rewinding the tree to pristine...\n"));
-               restore_state(head_commit->object.sha1, stash);
+               restore_state(head_commit->object.oid.hash, stash);
                printf(_("Using the %s to prepare resolving by hand.\n"),
                        best_strategy);
                try_merge_strategy(best_strategy, common, remoteheads,
index 0377fc11428b8148b508658547987ea8954723e6..092e03c3cc9b24445ee5ed92cee5b202e04c9ec7 100644 (file)
@@ -162,7 +162,7 @@ static int name_ref(const char *path, const struct object_id *oid, int flags, vo
                struct tag *t = (struct tag *) o;
                if (!t->tagged)
                        break; /* broken repository */
-               o = parse_object(t->tagged->sha1);
+               o = parse_object(t->tagged->oid.hash);
                deref = 1;
        }
        if (o && o->type == OBJ_COMMIT) {
@@ -193,7 +193,7 @@ static const char *get_exact_ref_match(const struct object *o)
                tip_table.sorted = 1;
        }
 
-       found = sha1_pos(o->sha1, tip_table.table, tip_table.nr,
+       found = sha1_pos(o->oid.hash, tip_table.table, tip_table.nr,
                         nth_tip_table_ent);
        if (0 <= found)
                return tip_table.table[found].refname;
@@ -232,19 +232,19 @@ static void show_name(const struct object *obj,
                      int always, int allow_undefined, int name_only)
 {
        const char *name;
-       const unsigned char *sha1 = obj->sha1;
+       const struct object_id *oid = &obj->oid;
 
        if (!name_only)
-               printf("%s ", caller_name ? caller_name : sha1_to_hex(sha1));
+               printf("%s ", caller_name ? caller_name : oid_to_hex(oid));
        name = get_rev_name(obj);
        if (name)
                printf("%s\n", name);
        else if (allow_undefined)
                printf("undefined\n");
        else if (always)
-               printf("%s\n", find_unique_abbrev(sha1, DEFAULT_ABBREV));
+               printf("%s\n", find_unique_abbrev(oid->hash, DEFAULT_ABBREV));
        else
-               die("cannot describe '%s'", sha1_to_hex(sha1));
+               die("cannot describe '%s'", oid_to_hex(oid));
 }
 
 static char const * const name_rev_usage[] = {
index 515cebbeb8a33eb982a1ddccdc9d69e09beefb1d..52aa9af74be8d47780d4762185c5cbe09624b382 100644 (file)
@@ -707,7 +707,7 @@ static int merge_commit(struct notes_merge_options *o)
                die("Could not parse commit from NOTES_MERGE_PARTIAL.");
 
        if (partial->parents)
-               hashcpy(parent_sha1, partial->parents->item->object.sha1);
+               hashcpy(parent_sha1, partial->parents->item->object.oid.hash);
        else
                hashclr(parent_sha1);
 
index 1c63f8f28c7d925ee5647f190d236e64fc6e05a2..4dae5b11c28deb3c296cbd89753cafe3ca7a1e90 100644 (file)
@@ -2277,7 +2277,7 @@ static void read_object_list_from_stdin(void)
 
 static void show_commit(struct commit *commit, void *data)
 {
-       add_object_entry(commit->object.sha1, OBJ_COMMIT, NULL, 0);
+       add_object_entry(commit->object.oid.hash, OBJ_COMMIT, NULL, 0);
        commit->object.flags |= OBJECT_ADDED;
 
        if (write_bitmap_index)
@@ -2291,7 +2291,7 @@ static void show_object(struct object *obj,
        char *name = path_name(path, last);
 
        add_preferred_base_object(name);
-       add_object_entry(obj->sha1, obj->type, name, 0);
+       add_object_entry(obj->oid.hash, obj->type, name, 0);
        obj->flags |= OBJECT_ADDED;
 
        /*
@@ -2303,7 +2303,7 @@ static void show_object(struct object *obj,
 
 static void show_edge(struct commit *commit)
 {
-       add_preferred_base(commit->object.sha1);
+       add_preferred_base(commit->object.oid.hash);
 }
 
 struct in_pack_object {
@@ -2319,7 +2319,7 @@ struct in_pack {
 
 static void mark_in_pack_object(struct object *object, struct packed_git *p, struct in_pack *in_pack)
 {
-       in_pack->array[in_pack->nr].offset = find_pack_entry_one(object->sha1, p);
+       in_pack->array[in_pack->nr].offset = find_pack_entry_one(object->oid.hash, p);
        in_pack->array[in_pack->nr].object = object;
        in_pack->nr++;
 }
@@ -2338,7 +2338,7 @@ static int ofscmp(const void *a_, const void *b_)
        else if (a->offset > b->offset)
                return 1;
        else
-               return hashcmp(a->object->sha1, b->object->sha1);
+               return oidcmp(&a->object->oid, &b->object->oid);
 }
 
 static void add_objects_in_unpacked_packs(struct rev_info *revs)
@@ -2376,7 +2376,7 @@ static void add_objects_in_unpacked_packs(struct rev_info *revs)
                      ofscmp);
                for (i = 0; i < in_pack.nr; i++) {
                        struct object *o = in_pack.array[i].object;
-                       add_object_entry(o->sha1, o->type, "", 0);
+                       add_object_entry(o->oid.hash, o->type, "", 0);
                }
        }
        free(in_pack.array);
@@ -2484,12 +2484,12 @@ static void record_recent_object(struct object *obj,
                                 const char *last,
                                 void *data)
 {
-       sha1_array_append(&recent_objects, obj->sha1);
+       sha1_array_append(&recent_objects, obj->oid.hash);
 }
 
 static void record_recent_commit(struct commit *commit, void *data)
 {
-       sha1_array_append(&recent_objects, commit->object.sha1);
+       sha1_array_append(&recent_objects, commit->object.oid.hash);
 }
 
 static void get_object_list(int ac, const char **av)
index bf3fd3f9c8d80ff84ace4150214118355585e917..5145fc60a0377a7fb799555892909f979aca9076 100644 (file)
@@ -743,7 +743,7 @@ static int get_octopus_merge_base(unsigned char *merge_base,
        if (!result)
                return 1;
 
-       hashcpy(merge_base, result->item->object.sha1);
+       hashcpy(merge_base, result->item->object.oid.hash);
        return 0;
 }
 
index f06f70a75f4926d7573e3b1d8f06dbe385e10fdc..ca38131873aad1c5dd5b8001aceb39ed906b3c2d 100644 (file)
@@ -246,7 +246,7 @@ static void show_one_alternate_sha1(const unsigned char sha1[20], void *unused)
 static void collect_one_alternate_ref(const struct ref *ref, void *data)
 {
        struct sha1_array *sa = data;
-       sha1_array_append(sa, ref->old_sha1);
+       sha1_array_append(sa, ref->old_oid.hash);
 }
 
 static void write_head_info(void)
index cf1145e635c559206a6b0d61e41321fa914e5e42..f39960e5e480abcd08898b2f04aa444c1d7bec17 100644 (file)
@@ -126,7 +126,7 @@ static int commit_is_complete(struct commit *commit)
                struct commit_list *parent;
 
                c = (struct commit *)study.objects[--study.nr].item;
-               if (!c->object.parsed && !parse_object(c->object.sha1))
+               if (!c->object.parsed && !parse_object(c->object.oid.hash))
                        c->object.flags |= INCOMPLETE;
 
                if (c->object.flags & INCOMPLETE) {
@@ -152,7 +152,7 @@ static int commit_is_complete(struct commit *commit)
                for (i = 0; i < found.nr; i++) {
                        struct commit *c =
                                (struct commit *)found.objects[i].item;
-                       if (!tree_is_complete(c->tree->object.sha1)) {
+                       if (!tree_is_complete(c->tree->object.oid.hash)) {
                                is_incomplete = 1;
                                c->object.flags |= INCOMPLETE;
                        }
index e4c3ea130c98b01f87bed617a6386b03158b42d5..6694cf20efdc01fb59d0b6afa41f7b1557c9b2d5 100644 (file)
@@ -401,7 +401,7 @@ static int get_push_ref_states(const struct ref *remote_refs,
 
                if (!ref->peer_ref)
                        continue;
-               hashcpy(ref->new_sha1, ref->peer_ref->new_sha1);
+               oidcpy(&ref->new_oid, &ref->peer_ref->new_oid);
 
                item = string_list_append(&states->push,
                                          abbrev_branch(ref->peer_ref->name));
@@ -410,14 +410,14 @@ static int get_push_ref_states(const struct ref *remote_refs,
                info->forced = ref->force;
                info->dest = xstrdup(abbrev_branch(ref->name));
 
-               if (is_null_sha1(ref->new_sha1)) {
+               if (is_null_oid(&ref->new_oid)) {
                        info->status = PUSH_STATUS_DELETE;
-               } else if (!hashcmp(ref->old_sha1, ref->new_sha1))
+               } else if (!oidcmp(&ref->old_oid, &ref->new_oid))
                        info->status = PUSH_STATUS_UPTODATE;
-               else if (is_null_sha1(ref->old_sha1))
+               else if (is_null_oid(&ref->old_oid))
                        info->status = PUSH_STATUS_CREATE;
-               else if (has_sha1_file(ref->old_sha1) &&
-                        ref_newer(ref->new_sha1, ref->old_sha1))
+               else if (has_object_file(&ref->old_oid) &&
+                        ref_newer(&ref->new_oid, &ref->old_oid))
                        info->status = PUSH_STATUS_FASTFORWARD;
                else
                        info->status = PUSH_STATUS_OUTOFDATE;
index 6b3c469a331e62e13fb6f9626ee5a64f28747c06..748c6ca954679e3fc47c25991dd50e539eaa543d 100644 (file)
@@ -358,10 +358,10 @@ static void check_one_mergetag(struct commit *commit,
 
        /* iterate over new parents */
        for (i = 1; i < mergetag_data->argc; i++) {
-               unsigned char sha1[20];
-               if (get_sha1(mergetag_data->argv[i], sha1) < 0)
+               struct object_id oid;
+               if (get_sha1(mergetag_data->argv[i], oid.hash) < 0)
                        die(_("Not a valid object name: '%s'"), mergetag_data->argv[i]);
-               if (!hashcmp(tag->tagged->sha1, sha1))
+               if (!oidcmp(&tag->tagged->oid, &oid))
                        return; /* found */
        }
 
index c503e75a590df93bcc46e564583352dcffa60891..092c3a5399c731e83058233f8e3e459be493e140 100644 (file)
@@ -96,7 +96,7 @@ static void print_new_head_line(struct commit *commit)
        const char *hex, *body;
        const char *msg;
 
-       hex = find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV);
+       hex = find_unique_abbrev(commit->object.oid.hash, DEFAULT_ABBREV);
        printf(_("HEAD is now at %s"), hex);
        msg = logmsg_reencode(commit, NULL, get_log_output_encoding());
        body = strstr(msg, "\n\n");
@@ -269,7 +269,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
        int reset_type = NONE, update_ref_status = 0, quiet = 0;
        int patch_mode = 0, unborn;
        const char *rev;
-       unsigned char sha1[20];
+       struct object_id oid;
        struct pathspec pathspec;
        int intent_to_add = 0;
        const struct option options[] = {
@@ -295,26 +295,26 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
                                                PARSE_OPT_KEEP_DASHDASH);
        parse_args(&pathspec, argv, prefix, patch_mode, &rev);
 
-       unborn = !strcmp(rev, "HEAD") && get_sha1("HEAD", sha1);
+       unborn = !strcmp(rev, "HEAD") && get_sha1("HEAD", oid.hash);
        if (unborn) {
                /* reset on unborn branch: treat as reset to empty tree */
-               hashcpy(sha1, EMPTY_TREE_SHA1_BIN);
+               hashcpy(oid.hash, EMPTY_TREE_SHA1_BIN);
        } else if (!pathspec.nr) {
                struct commit *commit;
-               if (get_sha1_committish(rev, sha1))
+               if (get_sha1_committish(rev, oid.hash))
                        die(_("Failed to resolve '%s' as a valid revision."), rev);
-               commit = lookup_commit_reference(sha1);
+               commit = lookup_commit_reference(oid.hash);
                if (!commit)
                        die(_("Could not parse object '%s'."), rev);
-               hashcpy(sha1, commit->object.sha1);
+               oidcpy(&oid, &commit->object.oid);
        } else {
                struct tree *tree;
-               if (get_sha1_treeish(rev, sha1))
+               if (get_sha1_treeish(rev, oid.hash))
                        die(_("Failed to resolve '%s' as a valid tree."), rev);
-               tree = parse_tree_indirect(sha1);
+               tree = parse_tree_indirect(oid.hash);
                if (!tree)
                        die(_("Could not parse object '%s'."), rev);
-               hashcpy(sha1, tree->object.sha1);
+               oidcpy(&oid, &tree->object.oid);
        }
 
        if (patch_mode) {
@@ -357,15 +357,15 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
                hold_locked_index(lock, 1);
                if (reset_type == MIXED) {
                        int flags = quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN;
-                       if (read_from_tree(&pathspec, sha1, intent_to_add))
+                       if (read_from_tree(&pathspec, oid.hash, intent_to_add))
                                return 1;
                        if (get_git_work_tree())
                                refresh_index(&the_index, flags, NULL, NULL,
                                              _("Unstaged changes after reset:"));
                } else {
-                       int err = reset_index(sha1, reset_type, quiet);
+                       int err = reset_index(oid.hash, reset_type, quiet);
                        if (reset_type == KEEP && !err)
-                               err = reset_index(sha1, MIXED, quiet);
+                               err = reset_index(oid.hash, MIXED, quiet);
                        if (err)
                                die(_("Could not reset index file to revision '%s'."), rev);
                }
@@ -377,10 +377,10 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
        if (!pathspec.nr && !unborn) {
                /* Any resets without paths update HEAD to the head being
                 * switched to, saving the previous head in ORIG_HEAD before. */
-               update_ref_status = reset_refs(rev, sha1);
+               update_ref_status = reset_refs(rev, oid.hash);
 
                if (reset_type == HARD && !update_ref_status && !quiet)
-                       print_new_head_line(lookup_commit_reference(sha1));
+                       print_new_head_line(lookup_commit_reference(oid.hash));
        }
        if (!pathspec.nr)
                remove_branch_state();
index 491d298fa25cebb1afd9b33cbbd099efe72629bc..3aa89a1a3cd951afdb97cf1fe371404fc96bca8d 100644 (file)
@@ -81,14 +81,14 @@ static void show_commit(struct commit *commit, void *data)
        if (!revs->graph)
                fputs(get_revision_mark(revs, commit), stdout);
        if (revs->abbrev_commit && revs->abbrev)
-               fputs(find_unique_abbrev(commit->object.sha1, revs->abbrev),
+               fputs(find_unique_abbrev(commit->object.oid.hash, revs->abbrev),
                      stdout);
        else
-               fputs(sha1_to_hex(commit->object.sha1), stdout);
+               fputs(oid_to_hex(&commit->object.oid), stdout);
        if (revs->print_parents) {
                struct commit_list *parents = commit->parents;
                while (parents) {
-                       printf(" %s", sha1_to_hex(parents->item->object.sha1));
+                       printf(" %s", oid_to_hex(&parents->item->object.oid));
                        parents = parents->next;
                }
        }
@@ -97,7 +97,7 @@ static void show_commit(struct commit *commit, void *data)
 
                children = lookup_decoration(&revs->children, &commit->object);
                while (children) {
-                       printf(" %s", sha1_to_hex(children->item->object.sha1));
+                       printf(" %s", oid_to_hex(&children->item->object.oid));
                        children = children->next;
                }
        }
@@ -182,10 +182,10 @@ static void finish_object(struct object *obj,
                          void *cb_data)
 {
        struct rev_list_info *info = cb_data;
-       if (obj->type == OBJ_BLOB && !has_sha1_file(obj->sha1))
-               die("missing blob object '%s'", sha1_to_hex(obj->sha1));
+       if (obj->type == OBJ_BLOB && !has_object_file(&obj->oid))
+               die("missing blob object '%s'", oid_to_hex(&obj->oid));
        if (info->revs->verify_objects && !obj->parsed && obj->type != OBJ_COMMIT)
-               parse_object(obj->sha1);
+               parse_object(obj->oid.hash);
 }
 
 static void show_object(struct object *obj,
@@ -201,7 +201,7 @@ static void show_object(struct object *obj,
 
 static void show_edge(struct commit *commit)
 {
-       printf("-%s\n", sha1_to_hex(commit->object.sha1));
+       printf("-%s\n", oid_to_hex(&commit->object.oid));
 }
 
 static void print_var_str(const char *var, const char *val)
@@ -242,7 +242,7 @@ static int show_bisect_vars(struct rev_list_info *info, int reaches, int all)
                cnt = reaches;
 
        if (revs->commits)
-               sha1_to_hex_r(hex, revs->commits->item->object.sha1);
+               sha1_to_hex_r(hex, revs->commits->item->object.oid.hash);
 
        if (flags & BISECT_SHOW_ALL) {
                traverse_commit_list(revs, show_commit, show_object, info);
index e92a782f7729f0e5522969238920be2b7e607366..7e074aad408ee7d63d86643878ff5c5bb311f732 100644 (file)
@@ -282,7 +282,7 @@ static int try_difference(const char *arg)
                        exclude = get_merge_bases(a, b);
                        while (exclude) {
                                struct commit *commit = pop_commit(&exclude);
-                               show_rev(REVERSED, commit->object.sha1, NULL);
+                               show_rev(REVERSED, commit->object.oid.hash, NULL);
                        }
                }
                *dotdot = '.';
@@ -319,7 +319,7 @@ static int try_parent_shorthands(const char *arg)
        commit = lookup_commit_reference(sha1);
        for (parents = commit->parents; parents; parents = parents->next)
                show_rev(parents_only ? NORMAL : REVERSED,
-                               parents->item->object.sha1, arg);
+                               parents->item->object.oid.hash, arg);
 
        *dotdot = '^';
        return 1;
index 007cc66a036429d602cf7afe19c163fcf6d06395..35ebd17f80d7784f17023a4f76ac71e1317a94d0 100644 (file)
@@ -129,7 +129,7 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit)
        }
        if (!author) {
                warning(_("Missing author: %s"),
-                   sha1_to_hex(commit->object.sha1));
+                   oid_to_hex(&commit->object.oid));
                return;
        }
        if (log->user_format) {
index e17744bc0dad37b75865b5da8c8c3037bcc02167..25669357e97e892ffb050d879b74d13a91d4fafc 100644 (file)
@@ -291,7 +291,7 @@ static void show_one_commit(struct commit *commit, int no_name)
                }
                else
                        printf("[%s] ",
-                              find_unique_abbrev(commit->object.sha1,
+                              find_unique_abbrev(commit->object.oid.hash,
                                                  DEFAULT_ABBREV));
        }
        puts(pretty_str);
@@ -496,7 +496,7 @@ static int show_merge_base(struct commit_list *seen, int num_rev)
                int flags = commit->object.flags & all_mask;
                if (!(flags & UNINTERESTING) &&
                    ((flags & all_revs) == all_revs)) {
-                       puts(sha1_to_hex(commit->object.sha1));
+                       puts(oid_to_hex(&commit->object.oid));
                        exit_status = 0;
                        commit->object.flags |= UNINTERESTING;
                }
@@ -516,7 +516,7 @@ static int show_independent(struct commit **rev,
                unsigned int flag = rev_mask[i];
 
                if (commit->object.flags == flag)
-                       puts(sha1_to_hex(commit->object.sha1));
+                       puts(oid_to_hex(&commit->object.oid));
                commit->object.flags |= UNINTERESTING;
        }
        return 0;
@@ -867,7 +867,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
                                                  head_len,
                                                  ref_name[i],
                                                  head_oid.hash,
-                                                 rev[i]->object.sha1);
+                                                 rev[i]->object.oid.hash);
                        if (extra < 0)
                                printf("%c [%s] ",
                                       is_head ? '*' : ' ', ref_name[i]);
index 7c3e79c48d68251f8af94d91ef51d22567c53c07..875e7ed99820998aa5d0e18f73b59763201cdb6c 100644 (file)
@@ -46,7 +46,7 @@ static void add_object_buffer(struct object *object, char *buffer, unsigned long
        obj->buffer = buffer;
        obj->size = size;
        if (add_decoration(&obj_decorate, object, obj))
-               die("object %s tried to add buffer twice!", sha1_to_hex(object->sha1));
+               die("object %s tried to add buffer twice!", oid_to_hex(&object->oid));
 }
 
 /*
@@ -170,7 +170,7 @@ static void write_cached_object(struct object *obj, struct obj_buffer *obj_buf)
        unsigned char sha1[20];
 
        if (write_sha1_file(obj_buf->buffer, obj_buf->size, typename(obj->type), sha1) < 0)
-               die("failed to write object %s", sha1_to_hex(obj->sha1));
+               die("failed to write object %s", oid_to_hex(&obj->oid));
        obj->flags |= FLAG_WRITTEN;
 }
 
@@ -194,7 +194,7 @@ static int check_object(struct object *obj, int type, void *data, struct fsck_op
 
        if (!(obj->flags & FLAG_OPEN)) {
                unsigned long size;
-               int type = sha1_object_info(obj->sha1, &size);
+               int type = sha1_object_info(obj->oid.hash, &size);
                if (type != obj->type || type <= 0)
                        die("object of unexpected type");
                obj->flags |= FLAG_WRITTEN;
@@ -203,12 +203,12 @@ static int check_object(struct object *obj, int type, void *data, struct fsck_op
 
        obj_buf = lookup_object_buffer(obj);
        if (!obj_buf)
-               die("Whoops! Cannot find object '%s'", sha1_to_hex(obj->sha1));
+               die("Whoops! Cannot find object '%s'", oid_to_hex(&obj->oid));
        if (fsck_object(obj, obj_buf->buffer, obj_buf->size, &fsck_options))
                die("Error in object");
        fsck_options.walk = check_object;
        if (fsck_walk(obj, NULL, &fsck_options))
-               die("Error on reachable objects of %s", sha1_to_hex(obj->sha1));
+               die("Error on reachable objects of %s", oid_to_hex(&obj->oid));
        write_cached_object(obj, obj_buf);
        return 0;
 }
index d281f6d887691fb43ebb052091f84e78aabe6d01..475b9581a5583166c43199f1662b510842c59c7d 100644 (file)
@@ -277,7 +277,7 @@ static int add_worktree(const char *path, const char *refname,
 
        if (commit)
                argv_array_pushl(&cp.args, "update-ref", "HEAD",
-                                sha1_to_hex(commit->object.sha1), NULL);
+                                oid_to_hex(&commit->object.oid), NULL);
        else
                argv_array_pushl(&cp.args, "symbolic-ref", "HEAD",
                                 symref.buf, NULL);
index b9dacc0241f0c58244b62ddff137c85291c37dd0..506ac49691bb7d53b07baf2a1d2581bf6f7ca82a 100644 (file)
--- a/bundle.c
+++ b/bundle.c
@@ -171,7 +171,7 @@ int verify_bundle(struct bundle_header *header, int verbose)
                if (!(refs.objects[i].item->flags & SHOWN)) {
                        if (++ret == 1)
                                error("%s", message);
-                       error("%s %s", sha1_to_hex(refs.objects[i].item->sha1),
+                       error("%s %s", oid_to_hex(&refs.objects[i].item->oid),
                                refs.objects[i].name);
                }
 
@@ -217,7 +217,7 @@ static int is_tag_in_date_range(struct object *tag, struct rev_info *revs)
        if (revs->max_age == -1 && revs->min_age == -1)
                goto out;
 
-       buf = read_sha1_file(tag->sha1, &type, &size);
+       buf = read_sha1_file(tag->oid.hash, &type, &size);
        if (!buf)
                goto out;
        line = memmem(buf, size, "\ntagger ", 8);
@@ -256,7 +256,7 @@ static int write_pack_data(int bundle_fd, struct rev_info *revs)
                struct object *object = revs->pending.objects[i].item;
                if (object->flags & UNINTERESTING)
                        write_or_die(pack_objects.in, "^", 1);
-               write_or_die(pack_objects.in, sha1_to_hex(object->sha1), 40);
+               write_or_die(pack_objects.in, oid_to_hex(&object->oid), GIT_SHA1_HEXSZ);
                write_or_die(pack_objects.in, "\n", 1);
        }
        close(pack_objects.in);
@@ -321,16 +321,16 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
 
        for (i = 0; i < revs->pending.nr; i++) {
                struct object_array_entry *e = revs->pending.objects + i;
-               unsigned char sha1[20];
+               struct object_id oid;
                char *ref;
                const char *display_ref;
                int flag;
 
                if (e->item->flags & UNINTERESTING)
                        continue;
-               if (dwim_ref(e->name, strlen(e->name), sha1, &ref) != 1)
+               if (dwim_ref(e->name, strlen(e->name), oid.hash, &ref) != 1)
                        goto skip_write_ref;
-               if (read_ref_full(e->name, RESOLVE_REF_READING, sha1, &flag))
+               if (read_ref_full(e->name, RESOLVE_REF_READING, oid.hash, &flag))
                        flag = 0;
                display_ref = (flag & REF_ISSYMREF) ? e->name : ref;
 
@@ -360,13 +360,13 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
                 * commit that is referenced by the tag, and not the tag
                 * itself.
                 */
-               if (hashcmp(sha1, e->item->sha1)) {
+               if (oidcmp(&oid, &e->item->oid)) {
                        /*
                         * Is this the positive end of a range expressed
                         * in terms of a tag (e.g. v2.0 from the range
                         * "v1.0..v2.0")?
                         */
-                       struct commit *one = lookup_commit_reference(sha1);
+                       struct commit *one = lookup_commit_reference(oid.hash);
                        struct object *obj;
 
                        if (e->item == &(one->object)) {
@@ -378,7 +378,7 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
                                 * end up triggering "empty bundle"
                                 * error.
                                 */
-                               obj = parse_object_or_die(sha1, e->name);
+                               obj = parse_object_or_die(oid.hash, e->name);
                                obj->flags |= SHOWN;
                                add_pending_object(revs, obj, e->name);
                        }
@@ -386,7 +386,7 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
                }
 
                ref_count++;
-               write_or_die(bundle_fd, sha1_to_hex(e->item->sha1), 40);
+               write_or_die(bundle_fd, oid_to_hex(&e->item->oid), 40);
                write_or_die(bundle_fd, " ", 1);
                write_or_die(bundle_fd, display_ref, strlen(display_ref));
                write_or_die(bundle_fd, "\n", 1);
index feace8bd90913ff28fa7ec2d052b355ad23935ca..a59e6f1e1fcfb65bd2fe9cdba0db60d6d87e7d96 100644 (file)
@@ -657,7 +657,7 @@ static void prime_cache_tree_rec(struct cache_tree *it, struct tree *tree)
        struct name_entry entry;
        int cnt;
 
-       hashcpy(it->sha1, tree->object.sha1);
+       hashcpy(it->sha1, tree->object.oid.hash);
        init_tree_desc(&desc, tree->buffer, tree->size);
        cnt = 0;
        while (tree_entry(&desc, &entry)) {
diff --git a/cache.h b/cache.h
index c3b196ef0b1a4bf4255f09f3ec592db931536dd6..5ab6cb50a61e24dc418b351db8acc648b740c244 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -1048,6 +1048,9 @@ static inline int has_sha1_file(const unsigned char *sha1)
        return has_sha1_file_with_flags(sha1, 0);
 }
 
+/* Same as the above, except for struct object_id. */
+extern int has_object_file(const struct object_id *oid);
+
 /*
  * Return true iff an alternate object database has a loose object
  * with the specified name.  This function does not respect replace
index 0f62f54b5ef4bb4ec81cff5aead2d6cd66da194e..55713049a4d6764722307e2a2c870996ff9b373b 100644 (file)
@@ -1540,9 +1540,9 @@ void diff_tree_combined_merge(const struct commit *commit, int dense,
        struct sha1_array parents = SHA1_ARRAY_INIT;
 
        while (parent) {
-               sha1_array_append(&parents, parent->item->object.sha1);
+               sha1_array_append(&parents, parent->item->object.oid.hash);
                parent = parent->next;
        }
-       diff_tree_combined(commit->object.sha1, &parents, dense, rev);
+       diff_tree_combined(commit->object.oid.hash, &parents, dense, rev);
        sha1_array_clear(&parents);
 }
index d1810c940b3cb354437e86eee38e2c2499375e80..40388d71e754bb35e3879a73f6e8a0ad8904ca41 100644 (file)
--- a/commit.c
+++ b/commit.c
@@ -38,7 +38,7 @@ struct commit *lookup_commit_or_die(const unsigned char *sha1, const char *ref_n
        struct commit *c = lookup_commit_reference(sha1);
        if (!c)
                die(_("could not parse %s"), ref_name);
-       if (hashcmp(sha1, c->object.sha1)) {
+       if (hashcmp(sha1, c->object.oid.hash)) {
                warning(_("%s %s is not a commit!"),
                        ref_name, sha1_to_hex(sha1));
        }
@@ -262,13 +262,13 @@ const void *get_commit_buffer(const struct commit *commit, unsigned long *sizep)
        if (!ret) {
                enum object_type type;
                unsigned long size;
-               ret = read_sha1_file(commit->object.sha1, &type, &size);
+               ret = read_sha1_file(commit->object.oid.hash, &type, &size);
                if (!ret)
                        die("cannot read commit object %s",
-                           sha1_to_hex(commit->object.sha1));
+                           oid_to_hex(&commit->object.oid));
                if (type != OBJ_COMMIT)
                        die("expected commit for %s, got %s",
-                           sha1_to_hex(commit->object.sha1), typename(type));
+                           oid_to_hex(&commit->object.oid), typename(type));
                if (sizep)
                        *sizep = size;
        }
@@ -327,22 +327,22 @@ int parse_commit_buffer(struct commit *item, const void *buffer, unsigned long s
        tail += size;
        if (tail <= bufptr + tree_entry_len + 1 || memcmp(bufptr, "tree ", 5) ||
                        bufptr[tree_entry_len] != '\n')
-               return error("bogus commit object %s", sha1_to_hex(item->object.sha1));
+               return error("bogus commit object %s", oid_to_hex(&item->object.oid));
        if (get_sha1_hex(bufptr + 5, parent.hash) < 0)
                return error("bad tree pointer in commit %s",
-                            sha1_to_hex(item->object.sha1));
+                            oid_to_hex(&item->object.oid));
        item->tree = lookup_tree(parent.hash);
        bufptr += tree_entry_len + 1; /* "tree " + "hex sha1" + "\n" */
        pptr = &item->parents;
 
-       graft = lookup_commit_graft(item->object.sha1);
+       graft = lookup_commit_graft(item->object.oid.hash);
        while (bufptr + parent_entry_len < tail && !memcmp(bufptr, "parent ", 7)) {
                struct commit *new_parent;
 
                if (tail <= bufptr + parent_entry_len + 1 ||
                    get_sha1_hex(bufptr + 7, parent.hash) ||
                    bufptr[parent_entry_len] != '\n')
-                       return error("bad parents in commit %s", sha1_to_hex(item->object.sha1));
+                       return error("bad parents in commit %s", oid_to_hex(&item->object.oid));
                bufptr += parent_entry_len + 1;
                /*
                 * The clone is shallow if nr_parent < 0, and we must
@@ -380,15 +380,15 @@ int parse_commit_gently(struct commit *item, int quiet_on_missing)
                return -1;
        if (item->object.parsed)
                return 0;
-       buffer = read_sha1_file(item->object.sha1, &type, &size);
+       buffer = read_sha1_file(item->object.oid.hash, &type, &size);
        if (!buffer)
                return quiet_on_missing ? -1 :
                        error("Could not read %s",
-                            sha1_to_hex(item->object.sha1));
+                            oid_to_hex(&item->object.oid));
        if (type != OBJ_COMMIT) {
                free(buffer);
                return error("Object %s not a commit",
-                            sha1_to_hex(item->object.sha1));
+                            oid_to_hex(&item->object.oid));
        }
        ret = parse_commit_buffer(item, buffer, size);
        if (save_commit_buffer && !ret) {
@@ -403,7 +403,7 @@ void parse_commit_or_die(struct commit *item)
 {
        if (parse_commit(item))
                die("unable to parse commit %s",
-                   item ? sha1_to_hex(item->object.sha1) : "(null)");
+                   item ? oid_to_hex(&item->object.oid) : "(null)");
 }
 
 int find_commit_subject(const char *commit_buffer, const char **subject)
@@ -563,7 +563,7 @@ void clear_commit_marks_for_object_array(struct object_array *a, unsigned mark)
 
        for (i = 0; i < a->nr; i++) {
                object = a->objects[i].item;
-               commit = lookup_commit_reference_gently(object->sha1, 1);
+               commit = lookup_commit_reference_gently(object->oid.hash, 1);
                if (commit)
                        clear_commit_marks(commit, mark);
        }
@@ -1206,7 +1206,7 @@ static void handle_signed_tag(struct commit *parent, struct commit_extra_header
        desc = merge_remote_util(parent);
        if (!desc || !desc->obj)
                return;
-       buf = read_sha1_file(desc->obj->sha1, &type, &size);
+       buf = read_sha1_file(desc->obj->oid.hash, &type, &size);
        if (!buf || type != OBJ_TAG)
                goto free_return;
        len = parse_signature(buf, size);
@@ -1539,7 +1539,7 @@ int commit_tree_extended(const char *msg, size_t msg_len,
        while (parents) {
                struct commit *parent = pop_commit(&parents);
                strbuf_addf(&buffer, "parent %s\n",
-                           sha1_to_hex(parent->object.sha1));
+                           oid_to_hex(&parent->object.oid));
        }
 
        /* Person/date information */
@@ -1623,7 +1623,7 @@ void print_commit_list(struct commit_list *list,
 {
        for ( ; list; list = list->next) {
                const char *format = list->next ? format_cur : format_last;
-               printf(format, sha1_to_hex(list->item->object.sha1));
+               printf(format, oid_to_hex(&list->item->object.oid));
        }
 }
 
index 108f5ab60e0ab122f0a86612ba9e4875ded29f26..fd7ffe1840e64417cf94d208840cf97c91e962b7 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -120,7 +120,7 @@ struct ref **get_remote_heads(int in, char *src_buf, size_t src_len,
        *list = NULL;
        for (;;) {
                struct ref *ref;
-               unsigned char old_sha1[20];
+               struct object_id old_oid;
                char *name;
                int len, name_len;
                char *buffer = packet_buffer;
@@ -139,34 +139,36 @@ struct ref **get_remote_heads(int in, char *src_buf, size_t src_len,
                if (len > 4 && skip_prefix(buffer, "ERR ", &arg))
                        die("remote error: %s", arg);
 
-               if (len == 48 && skip_prefix(buffer, "shallow ", &arg)) {
-                       if (get_sha1_hex(arg, old_sha1))
+               if (len == GIT_SHA1_HEXSZ + strlen("shallow ") &&
+                       skip_prefix(buffer, "shallow ", &arg)) {
+                       if (get_oid_hex(arg, &old_oid))
                                die("protocol error: expected shallow sha-1, got '%s'", arg);
                        if (!shallow_points)
                                die("repository on the other end cannot be shallow");
-                       sha1_array_append(shallow_points, old_sha1);
+                       sha1_array_append(shallow_points, old_oid.hash);
                        continue;
                }
 
-               if (len < 42 || get_sha1_hex(buffer, old_sha1) || buffer[40] != ' ')
+               if (len < GIT_SHA1_HEXSZ + 2 || get_oid_hex(buffer, &old_oid) ||
+                       buffer[GIT_SHA1_HEXSZ] != ' ')
                        die("protocol error: expected sha/ref, got '%s'", buffer);
-               name = buffer + 41;
+               name = buffer + GIT_SHA1_HEXSZ + 1;
 
                name_len = strlen(name);
-               if (len != name_len + 41) {
+               if (len != name_len + GIT_SHA1_HEXSZ + 1) {
                        free(server_capabilities);
                        server_capabilities = xstrdup(name + name_len + 1);
                }
 
                if (extra_have && !strcmp(name, ".have")) {
-                       sha1_array_append(extra_have, old_sha1);
+                       sha1_array_append(extra_have, old_oid.hash);
                        continue;
                }
 
                if (!check_ref(name, flags))
                        continue;
-               ref = alloc_ref(buffer + 41);
-               hashcpy(ref->old_sha1, old_sha1);
+               ref = alloc_ref(buffer + GIT_SHA1_HEXSZ + 1);
+               oidcpy(&ref->old_oid, &old_oid);
                *list = ref;
                list = &ref->next;
                got_at_least_one_head = 1;
index b2aac90c26296eacdd6c2cdb68a15f3744c595e9..270eb2519764f1378fe53352021cd7afb3ea306a 100644 (file)
@@ -8,7 +8,7 @@
 
 static unsigned int hash_obj(const struct object *obj, unsigned int n)
 {
-       return sha1hash(obj->sha1) % n;
+       return sha1hash(obj->oid.hash) % n;
 }
 
 static void *insert_decoration(struct decoration *n, const struct object *base, void *decoration)
index 241a8435eb1f7ddb88664343a5d9c42a1951886f..bc49c708c1854a0f67c25e4fd2b77a9ad50ff511 100644 (file)
@@ -493,7 +493,7 @@ int run_diff_index(struct rev_info *revs, int cached)
        struct object_array_entry *ent;
 
        ent = revs->pending.objects;
-       if (diff_cache(revs, ent->item->sha1, ent->name, cached))
+       if (diff_cache(revs, ent->item->oid.hash, ent->name, cached))
                exit(128);
 
        diff_set_mnemonic_prefix(&revs->diffopt, "c/", cached ? "i/" : "w/");
index 2dabee97b28915ccf5c06b58dd0193bf03a01db8..01e34b689b975799610eabc15fc9138990706ff8 100644 (file)
@@ -169,7 +169,7 @@ static const unsigned char *get_rev(void)
                }
        }
 
-       return commit->object.sha1;
+       return commit->object.oid.hash;
 }
 
 enum ack_type {
@@ -238,7 +238,7 @@ static void send_request(struct fetch_pack_args *args,
 
 static void insert_one_alternate_ref(const struct ref *ref, void *unused)
 {
-       rev_list_insert_ref(NULL, ref->old_sha1);
+       rev_list_insert_ref(NULL, ref->old_oid.hash);
 }
 
 #define INITIAL_FLUSH 16
@@ -280,7 +280,7 @@ static int find_common(struct fetch_pack_args *args,
 
        fetching = 0;
        for ( ; refs ; refs = refs->next) {
-               unsigned char *remote = refs->old_sha1;
+               unsigned char *remote = refs->old_oid.hash;
                const char *remote_hex;
                struct object *o;
 
@@ -487,7 +487,7 @@ static int mark_complete(const unsigned char *sha1)
                if (!t->tagged)
                        break; /* broken repository */
                o->flags |= COMPLETE;
-               o = parse_object(t->tagged->sha1);
+               o = parse_object(t->tagged->oid.hash);
        }
        if (o && o->type == OBJ_COMMIT) {
                struct commit *commit = (struct commit *)o;
@@ -511,7 +511,7 @@ static void mark_recent_complete_commits(struct fetch_pack_args *args,
        while (complete && cutoff <= complete->item->date) {
                if (args->verbose)
                        fprintf(stderr, "Marking %s as complete\n",
-                               sha1_to_hex(complete->item->object.sha1));
+                               oid_to_hex(&complete->item->object.oid));
                pop_most_recent_commit(&complete, COMPLETE);
        }
 }
@@ -570,7 +570,7 @@ static void filter_refs(struct fetch_pack_args *args,
                                continue;
                        if (get_sha1_hex(ref->name, sha1) ||
                            ref->name[40] != '\0' ||
-                           hashcmp(sha1, ref->old_sha1))
+                           hashcmp(sha1, ref->old_oid.hash))
                                continue;
 
                        ref->matched = 1;
@@ -583,7 +583,7 @@ static void filter_refs(struct fetch_pack_args *args,
 
 static void mark_alternate_complete(const struct ref *ref, void *unused)
 {
-       mark_complete(ref->old_sha1);
+       mark_complete(ref->old_oid.hash);
 }
 
 static int everything_local(struct fetch_pack_args *args,
@@ -599,10 +599,10 @@ static int everything_local(struct fetch_pack_args *args,
        for (ref = *refs; ref; ref = ref->next) {
                struct object *o;
 
-               if (!has_sha1_file(ref->old_sha1))
+               if (!has_object_file(&ref->old_oid))
                        continue;
 
-               o = parse_object(ref->old_sha1);
+               o = parse_object(ref->old_oid.hash);
                if (!o)
                        continue;
 
@@ -630,7 +630,7 @@ static int everything_local(struct fetch_pack_args *args,
         * Don't mark them common yet; the server has to be told so first.
         */
        for (ref = *refs; ref; ref = ref->next) {
-               struct object *o = deref_tag(lookup_object(ref->old_sha1),
+               struct object *o = deref_tag(lookup_object(ref->old_oid.hash),
                                             NULL, 0);
 
                if (!o || o->type != OBJ_COMMIT || !(o->flags & COMPLETE))
@@ -646,7 +646,7 @@ static int everything_local(struct fetch_pack_args *args,
        filter_refs(args, refs, sought, nr_sought);
 
        for (retval = 1, ref = *refs; ref ; ref = ref->next) {
-               const unsigned char *remote = ref->old_sha1;
+               const unsigned char *remote = ref->old_oid.hash;
                struct object *o;
 
                o = lookup_object(remote);
@@ -985,7 +985,7 @@ static void update_shallow(struct fetch_pack_args *args,
        if (!si->nr_ours && !si->nr_theirs)
                return;
        for (i = 0; i < nr_sought; i++)
-               sha1_array_append(&ref, sought[i]->old_sha1);
+               sha1_array_append(&ref, sought[i]->old_oid.hash);
        si->ref = &ref;
 
        if (args->update_shallow) {
diff --git a/fsck.c b/fsck.c
index 4060f1f551bec0b42359a0c4b7a0670ab08cdf11..c637f6676b639beb90240e4667ed07ceb83cdbf8 100644 (file)
--- a/fsck.c
+++ b/fsck.c
@@ -276,7 +276,7 @@ static int report(struct fsck_options *options, struct object *object,
                return 0;
 
        if (options->skiplist && object &&
-                       sha1_array_lookup(options->skiplist, object->sha1) >= 0)
+                       sha1_array_lookup(options->skiplist, object->oid.hash) >= 0)
                return 0;
 
        if (msg_type == FSCK_FATAL)
@@ -316,7 +316,7 @@ static int fsck_walk_tree(struct tree *tree, void *data, struct fsck_options *op
                        result = options->walk(&lookup_blob(entry.sha1)->object, OBJ_BLOB, data, options);
                else {
                        result = error("in tree %s: entry %s has bad mode %.6o",
-                                       sha1_to_hex(tree->object.sha1), entry.path, entry.mode);
+                                       oid_to_hex(&tree->object.oid), entry.path, entry.mode);
                }
                if (result < 0)
                        return result;
@@ -373,7 +373,7 @@ int fsck_walk(struct object *obj, void *data, struct fsck_options *options)
        case OBJ_TAG:
                return fsck_walk_tag((struct tag *)obj, data, options);
        default:
-               error("Unknown object type for %s", sha1_to_hex(obj->sha1));
+               error("Unknown object type for %s", oid_to_hex(&obj->oid));
                return -1;
        }
 }
@@ -630,7 +630,7 @@ static int fsck_commit_buffer(struct commit *commit, const char *buffer,
                buffer += 41;
                parent_line_count++;
        }
-       graft = lookup_commit_graft(commit->object.sha1);
+       graft = lookup_commit_graft(commit->object.oid.hash);
        parent_count = commit_list_count(commit->parents);
        if (graft) {
                if (graft->nr_parent == -1 && !parent_count)
@@ -696,7 +696,7 @@ static int fsck_tag_buffer(struct tag *tag, const char *data,
                enum object_type type;
 
                buffer = to_free =
-                       read_sha1_file(tag->object.sha1, &type, &size);
+                       read_sha1_file(tag->object.oid.hash, &type, &size);
                if (!buffer)
                        return report(options, &tag->object,
                                FSCK_MSG_MISSING_TAG_OBJECT,
@@ -810,9 +810,9 @@ int fsck_object(struct object *obj, void *data, unsigned long size,
 int fsck_error_function(struct object *obj, int msg_type, const char *message)
 {
        if (msg_type == FSCK_WARN) {
-               warning("object %s: %s", sha1_to_hex(obj->sha1), message);
+               warning("object %s: %s", oid_to_hex(&obj->oid), message);
                return 0;
        }
-       error("object %s: %s", sha1_to_hex(obj->sha1), message);
+       error("object %s: %s", oid_to_hex(&obj->oid), message);
        return 1;
 }
index bac40ef6e6e3566a0ceda81303a6ebb769ac520d..8870a2681eb375505e4273b03a0d3e034e59a48e 100644 (file)
@@ -436,7 +436,7 @@ static int show_text_ref(const char *name, const struct object_id *oid,
                o = deref_tag(o, name, 0);
                if (!o)
                        return 0;
-               strbuf_addf(buf, "%s\t%s^{}\n", sha1_to_hex(o->sha1),
+               strbuf_addf(buf, "%s\t%s^{}\n", oid_to_hex(&o->oid),
                            name_nons);
        }
        return 0;
index 48f39b7f71c632aae6a42d65be929a9e44874d84..d857b131a8f7b02e3120900c5a4e525d9f8de591 100644 (file)
@@ -251,7 +251,7 @@ static void start_fetch_loose(struct transfer_request *request)
        struct active_request_slot *slot;
        struct http_object_request *obj_req;
 
-       obj_req = new_http_object_request(repo->url, request->obj->sha1);
+       obj_req = new_http_object_request(repo->url, request->obj->oid.hash);
        if (obj_req == NULL) {
                request->state = ABORTED;
                return;
@@ -275,7 +275,7 @@ static void start_fetch_loose(struct transfer_request *request)
 
 static void start_mkcol(struct transfer_request *request)
 {
-       char *hex = sha1_to_hex(request->obj->sha1);
+       char *hex = oid_to_hex(&request->obj->oid);
        struct active_request_slot *slot;
 
        request->url = get_remote_object_url(repo->url, hex, 1);
@@ -304,16 +304,16 @@ static void start_fetch_packed(struct transfer_request *request)
        struct transfer_request *check_request = request_queue_head;
        struct http_pack_request *preq;
 
-       target = find_sha1_pack(request->obj->sha1, repo->packs);
+       target = find_sha1_pack(request->obj->oid.hash, repo->packs);
        if (!target) {
-               fprintf(stderr, "Unable to fetch %s, will not be able to update server info refs\n", sha1_to_hex(request->obj->sha1));
+               fprintf(stderr, "Unable to fetch %s, will not be able to update server info refs\n", oid_to_hex(&request->obj->oid));
                repo->can_update_info_refs = 0;
                release_request(request);
                return;
        }
 
        fprintf(stderr, "Fetching pack %s\n", sha1_to_hex(target->sha1));
-       fprintf(stderr, " which contains %s\n", sha1_to_hex(request->obj->sha1));
+       fprintf(stderr, " which contains %s\n", oid_to_hex(&request->obj->oid));
 
        preq = new_http_pack_request(target, repo->url);
        if (preq == NULL) {
@@ -350,7 +350,7 @@ static void start_fetch_packed(struct transfer_request *request)
 
 static void start_put(struct transfer_request *request)
 {
-       char *hex = sha1_to_hex(request->obj->sha1);
+       char *hex = oid_to_hex(&request->obj->oid);
        struct active_request_slot *slot;
        struct strbuf buf = STRBUF_INIT;
        enum object_type type;
@@ -361,7 +361,7 @@ static void start_put(struct transfer_request *request)
        ssize_t size;
        git_zstream stream;
 
-       unpacked = read_sha1_file(request->obj->sha1, &type, &len);
+       unpacked = read_sha1_file(request->obj->oid.hash, &type, &len);
        hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %lu", typename(type), len) + 1;
 
        /* Set it up */
@@ -533,11 +533,11 @@ static void finish_request(struct transfer_request *request)
        if (request->state == RUN_MKCOL) {
                if (request->curl_result == CURLE_OK ||
                    request->http_code == 405) {
-                       remote_dir_exists[request->obj->sha1[0]] = 1;
+                       remote_dir_exists[request->obj->oid.hash[0]] = 1;
                        start_put(request);
                } else {
                        fprintf(stderr, "MKCOL %s failed, aborting (%d/%ld)\n",
-                               sha1_to_hex(request->obj->sha1),
+                               oid_to_hex(&request->obj->oid),
                                request->curl_result, request->http_code);
                        request->state = ABORTED;
                        aborted = 1;
@@ -547,7 +547,7 @@ static void finish_request(struct transfer_request *request)
                        start_move(request);
                } else {
                        fprintf(stderr, "PUT %s failed, aborting (%d/%ld)\n",
-                               sha1_to_hex(request->obj->sha1),
+                               oid_to_hex(&request->obj->oid),
                                request->curl_result, request->http_code);
                        request->state = ABORTED;
                        aborted = 1;
@@ -556,12 +556,12 @@ static void finish_request(struct transfer_request *request)
                if (request->curl_result == CURLE_OK) {
                        if (push_verbosely)
                                fprintf(stderr, "    sent %s\n",
-                                       sha1_to_hex(request->obj->sha1));
+                                       oid_to_hex(&request->obj->oid));
                        request->obj->flags |= REMOTE;
                        release_request(request);
                } else {
                        fprintf(stderr, "MOVE %s failed, aborting (%d/%ld)\n",
-                               sha1_to_hex(request->obj->sha1),
+                               oid_to_hex(&request->obj->oid),
                                request->curl_result, request->http_code);
                        request->state = ABORTED;
                        aborted = 1;
@@ -614,7 +614,7 @@ static int fill_active_slot(void *unused)
                        start_fetch_loose(request);
                        return 1;
                } else if (pushing && request->state == NEED_PUSH) {
-                       if (remote_dir_exists[request->obj->sha1[0]] == 1) {
+                       if (remote_dir_exists[request->obj->oid.hash[0]] == 1) {
                                start_put(request);
                        } else {
                                start_mkcol(request);
@@ -638,8 +638,8 @@ static void add_fetch_request(struct object *obj)
         * Don't fetch the object if it's known to exist locally
         * or is already in the request queue
         */
-       if (remote_dir_exists[obj->sha1[0]] == -1)
-               get_remote_object_list(obj->sha1[0]);
+       if (remote_dir_exists[obj->oid.hash[0]] == -1)
+               get_remote_object_list(obj->oid.hash[0]);
        if (obj->flags & (LOCAL | FETCHING))
                return;
 
@@ -671,11 +671,11 @@ static int add_send_request(struct object *obj, struct remote_lock *lock)
         * Don't push the object if it's known to exist on the remote
         * or is already in the request queue
         */
-       if (remote_dir_exists[obj->sha1[0]] == -1)
-               get_remote_object_list(obj->sha1[0]);
+       if (remote_dir_exists[obj->oid.hash[0]] == -1)
+               get_remote_object_list(obj->oid.hash[0]);
        if (obj->flags & (REMOTE | PUSHING))
                return 0;
-       target = find_sha1_pack(obj->sha1, repo->packs);
+       target = find_sha1_pack(obj->oid.hash, repo->packs);
        if (target) {
                obj->flags |= REMOTE;
                return 0;
@@ -1307,7 +1307,7 @@ static struct object_list **process_tree(struct tree *tree,
        if (obj->flags & (UNINTERESTING | SEEN))
                return p;
        if (parse_tree(tree) < 0)
-               die("bad tree object %s", sha1_to_hex(obj->sha1));
+               die("bad tree object %s", oid_to_hex(&obj->oid));
 
        obj->flags |= SEEN;
        name = xstrdup(name);
@@ -1369,7 +1369,7 @@ static int get_delta(struct rev_info *revs, struct remote_lock *lock)
                        p = process_blob((struct blob *)obj, p, NULL, name);
                        continue;
                }
-               die("unknown pending object %s (%s)", sha1_to_hex(obj->sha1), name);
+               die("unknown pending object %s (%s)", oid_to_hex(&obj->oid), name);
        }
 
        while (objects) {
@@ -1438,11 +1438,11 @@ static void one_remote_ref(const char *refname)
         * Fetch a copy of the object if it doesn't exist locally - it
         * may be required for updating server info later.
         */
-       if (repo->can_update_info_refs && !has_sha1_file(ref->old_sha1)) {
-               obj = lookup_unknown_object(ref->old_sha1);
+       if (repo->can_update_info_refs && !has_object_file(&ref->old_oid)) {
+               obj = lookup_unknown_object(ref->old_oid.hash);
                if (obj) {
                        fprintf(stderr, "  fetch %s for %s\n",
-                               sha1_to_hex(ref->old_sha1), refname);
+                               oid_to_hex(&ref->old_oid), refname);
                        add_fetch_request(obj);
                }
        }
@@ -1473,24 +1473,24 @@ static void add_remote_info_ref(struct remote_ls_ctx *ls)
                return;
        }
 
-       o = parse_object(ref->old_sha1);
+       o = parse_object(ref->old_oid.hash);
        if (!o) {
                fprintf(stderr,
                        "Unable to parse object %s for remote ref %s\n",
-                       sha1_to_hex(ref->old_sha1), ls->dentry_name);
+                       oid_to_hex(&ref->old_oid), ls->dentry_name);
                aborted = 1;
                free(ref);
                return;
        }
 
        strbuf_addf(buf, "%s\t%s\n",
-                   sha1_to_hex(ref->old_sha1), ls->dentry_name);
+                   oid_to_hex(&ref->old_oid), ls->dentry_name);
 
        if (o->type == OBJ_TAG) {
                o = deref_tag(o, ls->dentry_name, 0);
                if (o)
                        strbuf_addf(buf, "%s\t%s^{}\n",
-                                   sha1_to_hex(o->sha1), ls->dentry_name);
+                                   oid_to_hex(&o->oid), ls->dentry_name);
        }
        free(ref);
 }
@@ -1581,7 +1581,7 @@ static void fetch_symref(const char *path, char **symref, unsigned char *sha1)
 static int verify_merge_base(unsigned char *head_sha1, struct ref *remote)
 {
        struct commit *head = lookup_commit_or_die(head_sha1, "HEAD");
-       struct commit *branch = lookup_commit_or_die(remote->old_sha1, remote->name);
+       struct commit *branch = lookup_commit_or_die(remote->old_oid.hash, remote->name);
 
        return in_merge_bases(branch, head);
 }
@@ -1644,11 +1644,11 @@ static int delete_remote_branch(const char *pattern, int force)
                        return error("Remote HEAD resolves to object %s\nwhich does not exist locally, perhaps you need to fetch?", sha1_to_hex(head_sha1));
 
                /* Remote branch must resolve to a known object */
-               if (is_null_sha1(remote_ref->old_sha1))
+               if (is_null_oid(&remote_ref->old_oid))
                        return error("Unable to resolve remote branch %s",
                                     remote_ref->name);
-               if (!has_sha1_file(remote_ref->old_sha1))
-                       return error("Remote branch %s resolves to object %s\nwhich does not exist locally, perhaps you need to fetch?", remote_ref->name, sha1_to_hex(remote_ref->old_sha1));
+               if (!has_object_file(&remote_ref->old_oid))
+                       return error("Remote branch %s resolves to object %s\nwhich does not exist locally, perhaps you need to fetch?", remote_ref->name, oid_to_hex(&remote_ref->old_oid));
 
                /* Remote branch must be an ancestor of remote HEAD */
                if (!verify_merge_base(head_sha1, remote_ref)) {
@@ -1861,7 +1861,7 @@ int main(int argc, char **argv)
                if (!ref->peer_ref)
                        continue;
 
-               if (is_null_sha1(ref->peer_ref->new_sha1)) {
+               if (is_null_oid(&ref->peer_ref->new_oid)) {
                        if (delete_remote_branch(ref->name, 1) == -1) {
                                error("Could not remove %s", ref->name);
                                if (helper_status)
@@ -1874,7 +1874,7 @@ int main(int argc, char **argv)
                        continue;
                }
 
-               if (!hashcmp(ref->old_sha1, ref->peer_ref->new_sha1)) {
+               if (!oidcmp(&ref->old_oid, &ref->peer_ref->new_oid)) {
                        if (push_verbosely)
                                fprintf(stderr, "'%s': up-to-date\n", ref->name);
                        if (helper_status)
@@ -1883,11 +1883,11 @@ int main(int argc, char **argv)
                }
 
                if (!force_all &&
-                   !is_null_sha1(ref->old_sha1) &&
+                   !is_null_oid(&ref->old_oid) &&
                    !ref->force) {
-                       if (!has_sha1_file(ref->old_sha1) ||
-                           !ref_newer(ref->peer_ref->new_sha1,
-                                      ref->old_sha1)) {
+                       if (!has_object_file(&ref->old_oid) ||
+                           !ref_newer(&ref->peer_ref->new_oid,
+                                      &ref->old_oid)) {
                                /*
                                 * We do not have the remote ref, or
                                 * we know that the remote ref is not
@@ -1908,14 +1908,14 @@ int main(int argc, char **argv)
                                continue;
                        }
                }
-               hashcpy(ref->new_sha1, ref->peer_ref->new_sha1);
+               oidcpy(&ref->new_oid, &ref->peer_ref->new_oid);
                new_refs++;
 
                fprintf(stderr, "updating '%s'", ref->name);
                if (strcmp(ref->name, ref->peer_ref->name))
                        fprintf(stderr, " using '%s'", ref->peer_ref->name);
                fprintf(stderr, "\n  from %s\n  to   %s\n",
-                       sha1_to_hex(ref->old_sha1), sha1_to_hex(ref->new_sha1));
+                       oid_to_hex(&ref->old_oid), oid_to_hex(&ref->new_oid));
                if (dry_run) {
                        if (helper_status)
                                printf("ok %s\n", ref->name);
@@ -1936,10 +1936,10 @@ int main(int argc, char **argv)
                /* Set up revision info for this refspec */
                argv_array_push(&commit_argv, ""); /* ignored */
                argv_array_push(&commit_argv, "--objects");
-               argv_array_push(&commit_argv, sha1_to_hex(ref->new_sha1));
-               if (!push_all && !is_null_sha1(ref->old_sha1))
+               argv_array_push(&commit_argv, oid_to_hex(&ref->new_oid));
+               if (!push_all && !is_null_oid(&ref->old_oid))
                        argv_array_pushf(&commit_argv, "^%s",
-                                        sha1_to_hex(ref->old_sha1));
+                                        oid_to_hex(&ref->old_oid));
                init_revisions(&revs, setup_git_directory());
                setup_revisions(commit_argv.argc, commit_argv.argv, &revs, NULL);
                revs.edge_hint = 0; /* just in case */
@@ -1962,7 +1962,7 @@ int main(int argc, char **argv)
                run_request_queue();
 
                /* Update the remote branch if all went well */
-               if (aborted || !update_remote(ref->new_sha1, ref_lock))
+               if (aborted || !update_remote(ref->new_oid.hash, ref_lock))
                        rc = 1;
 
                if (!rc)
diff --git a/http.c b/http.c
index 7d4cb2d4483524ce7b5b02cd324424f0c740ad02..0da9e6639832a493f932e3ba332683d3d4ae73ae 100644 (file)
--- a/http.c
+++ b/http.c
@@ -1402,7 +1402,7 @@ int http_fetch_ref(const char *base, struct ref *ref)
        if (http_get_strbuf(url, &buffer, &options) == HTTP_OK) {
                strbuf_rtrim(&buffer);
                if (buffer.len == 40)
-                       ret = get_sha1_hex(buffer.buf, ref->old_sha1);
+                       ret = get_oid_hex(buffer.buf, &ref->old_oid);
                else if (starts_with(buffer.buf, "ref: ")) {
                        ref->symref = xstrdup(buffer.buf + 5);
                        ret = 0;
index 626b22cc31726c146347f44d73daa80b776ab74f..af6e2f799ec7e2447ee888854442a7cbfe7644e4 100644 (file)
@@ -502,7 +502,7 @@ static void fill_blob_sha1(struct commit *commit, struct diff_filespec *spec)
        unsigned mode;
        unsigned char sha1[20];
 
-       if (get_tree_entry(commit->object.sha1, spec->path,
+       if (get_tree_entry(commit->object.oid.hash, spec->path,
                           sha1, &mode))
                die("There is no path %s in the commit", spec->path);
        fill_filespec(spec, sha1, 1, mode);
@@ -824,8 +824,8 @@ static void queue_diffs(struct line_log_data *range,
        assert(commit);
 
        DIFF_QUEUE_CLEAR(&diff_queued_diff);
-       diff_tree_sha1(parent ? parent->tree->object.sha1 : NULL,
-                       commit->tree->object.sha1, "", opt);
+       diff_tree_sha1(parent ? parent->tree->object.oid.hash : NULL,
+                       commit->tree->object.oid.hash, "", opt);
        if (opt->detect_rename) {
                filter_diffs_for_paths(range, 1);
                if (diff_might_be_rename())
index 41736d23727e2ff246d7000ee74a47ce80ea189d..11732d93883ee6af8990ad311d07f28028af9876 100644 (file)
@@ -84,7 +84,7 @@ static void process_tree(struct rev_info *revs,
        if (parse_tree_gently(tree, revs->ignore_missing_links) < 0) {
                if (revs->ignore_missing_links)
                        return;
-               die("bad tree object %s", sha1_to_hex(obj->sha1));
+               die("bad tree object %s", oid_to_hex(&obj->oid));
        }
        obj->flags |= SEEN;
        show(obj, path, name, cb_data);
@@ -229,7 +229,7 @@ void traverse_commit_list(struct rev_info *revs,
                        continue;
                }
                die("unknown pending object %s (%s)",
-                   sha1_to_hex(obj->sha1), name);
+                   oid_to_hex(&obj->oid), name);
        }
        object_array_clear(&revs->pending);
        strbuf_release(&base);
index 7b1b57aaf6e48a430f664fa8deafb75a0cfcc576..35e780170a2529cf528f4edfcd6bac9dcab5591f 100644 (file)
@@ -133,7 +133,7 @@ static int add_ref_decoration(const char *refname, const struct object_id *oid,
                if (!obj)
                        break;
                if (!obj->parsed)
-                       parse_object(obj->sha1);
+                       parse_object(obj->oid.hash);
                add_name_decoration(DECORATION_REF_TAG, refname, obj);
        }
        return 0;
@@ -165,7 +165,7 @@ static void show_parents(struct commit *commit, int abbrev)
        struct commit_list *p;
        for (p = commit->parents; p ; p = p->next) {
                struct commit *parent = p->item;
-               printf(" %s", find_unique_abbrev(parent->object.sha1, abbrev));
+               printf(" %s", find_unique_abbrev(parent->object.oid.hash, abbrev));
        }
 }
 
@@ -173,7 +173,7 @@ static void show_children(struct rev_info *opt, struct commit *commit, int abbre
 {
        struct commit_list *p = lookup_decoration(&opt->children, &commit->object);
        for ( ; p; p = p->next) {
-               printf(" %s", find_unique_abbrev(p->item->object.sha1, abbrev));
+               printf(" %s", find_unique_abbrev(p->item->object.oid.hash, abbrev));
        }
 }
 
@@ -342,7 +342,7 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit,
 {
        const char *subject = NULL;
        const char *extra_headers = opt->extra_headers;
-       const char *name = sha1_to_hex(commit->object.sha1);
+       const char *name = oid_to_hex(&commit->object.oid);
 
        *need_8bit_cte_p = 0; /* unknown */
        if (opt->total > 0) {
@@ -469,7 +469,7 @@ static int which_parent(const unsigned char *sha1, const struct commit *commit)
        const struct commit_list *parent;
 
        for (nth = 0, parent = commit->parents; parent; parent = parent->next) {
-               if (!hashcmp(parent->item->object.sha1, sha1))
+               if (!hashcmp(parent->item->object.oid.hash, sha1))
                        return nth;
                nth++;
        }
@@ -503,13 +503,13 @@ static void show_one_mergetag(struct commit *commit,
        if (parse_tag_buffer(tag, extra->value, extra->len))
                strbuf_addstr(&verify_message, "malformed mergetag\n");
        else if (is_common_merge(commit) &&
-                !hashcmp(tag->tagged->sha1,
-                         commit->parents->next->item->object.sha1))
+                !oidcmp(&tag->tagged->oid,
+                         &commit->parents->next->item->object.oid))
                strbuf_addf(&verify_message,
                            "merged tag '%s'\n", tag->tag);
-       else if ((nth = which_parent(tag->tagged->sha1, commit)) < 0)
+       else if ((nth = which_parent(tag->tagged->oid.hash, commit)) < 0)
                strbuf_addf(&verify_message, "tag %s names a non-parent %s\n",
-                                   tag->tag, tag->tagged->sha1);
+                                   tag->tag, tag->tagged->oid.hash);
        else
                strbuf_addf(&verify_message,
                            "parent #%d, tagged '%s'\n", nth + 1, tag->tag);
@@ -553,7 +553,7 @@ void show_log(struct rev_info *opt)
 
                if (!opt->graph)
                        put_revision_mark(opt, commit);
-               fputs(find_unique_abbrev(commit->object.sha1, abbrev_commit), stdout);
+               fputs(find_unique_abbrev(commit->object.oid.hash, abbrev_commit), stdout);
                if (opt->print_parents)
                        show_parents(commit, abbrev_commit);
                if (opt->children.name)
@@ -613,7 +613,7 @@ void show_log(struct rev_info *opt)
 
                if (!opt->graph)
                        put_revision_mark(opt, commit);
-               fputs(find_unique_abbrev(commit->object.sha1, abbrev_commit),
+               fputs(find_unique_abbrev(commit->object.oid.hash, abbrev_commit),
                      stdout);
                if (opt->print_parents)
                        show_parents(commit, abbrev_commit);
@@ -621,7 +621,7 @@ void show_log(struct rev_info *opt)
                        show_children(opt, commit, abbrev_commit);
                if (parent)
                        printf(" (from %s)",
-                              find_unique_abbrev(parent->object.sha1,
+                              find_unique_abbrev(parent->object.oid.hash,
                                                  abbrev_commit));
                fputs(diff_get_color_opt(&opt->diffopt, DIFF_RESET), stdout);
                show_decorations(opt, commit);
@@ -660,7 +660,7 @@ void show_log(struct rev_info *opt)
                struct strbuf notebuf = STRBUF_INIT;
 
                raw = (opt->commit_format == CMIT_FMT_USERFORMAT);
-               format_display_notes(commit->object.sha1, &notebuf,
+               format_display_notes(commit->object.oid.hash, &notebuf,
                                     get_log_output_encoding(), raw);
                ctx.notes_message = notebuf.len
                        ? strbuf_detach(&notebuf, NULL)
@@ -796,19 +796,19 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
 {
        int showed_log;
        struct commit_list *parents;
-       unsigned const char *sha1;
+       struct object_id *oid;
 
        if (!opt->diff && !DIFF_OPT_TST(&opt->diffopt, EXIT_WITH_STATUS))
                return 0;
 
        parse_commit_or_die(commit);
-       sha1 = commit->tree->object.sha1;
+       oid = &commit->tree->object.oid;
 
        /* Root commit? */
        parents = get_saved_parents(opt, commit);
        if (!parents) {
                if (opt->show_root_diff) {
-                       diff_root_tree_sha1(sha1, "", &opt->diffopt);
+                       diff_root_tree_sha1(oid->hash, "", &opt->diffopt);
                        log_tree_diff_flush(opt);
                }
                return !opt->loginfo;
@@ -827,8 +827,8 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
                         * we merged _in_.
                         */
                        parse_commit_or_die(parents->item);
-                       diff_tree_sha1(parents->item->tree->object.sha1,
-                                      sha1, "", &opt->diffopt);
+                       diff_tree_sha1(parents->item->tree->object.oid.hash,
+                                      oid->hash, "", &opt->diffopt);
                        log_tree_diff_flush(opt);
                        return !opt->loginfo;
                }
@@ -842,8 +842,8 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
                struct commit *parent = parents->item;
 
                parse_commit_or_die(parent);
-               diff_tree_sha1(parent->tree->object.sha1,
-                              sha1, "", &opt->diffopt);
+               diff_tree_sha1(parent->tree->object.oid.hash,
+                              oid->hash, "", &opt->diffopt);
                log_tree_diff_flush(opt);
 
                showed_log |= !opt->loginfo;
index 7abb894c684d1ff7bc26b30ffa41597451750f20..ddca601c77fcab7d9d68362ce5c4f252ab7ccf51 100644 (file)
@@ -11,7 +11,7 @@ static int fill_mmfile_blob(mmfile_t *f, struct blob *obj)
        unsigned long size;
        enum object_type type;
 
-       buf = read_sha1_file(obj->object.sha1, &type, &size);
+       buf = read_sha1_file(obj->object.oid.hash, &type, &size);
        if (!buf)
                return -1;
        if (type != OBJ_BLOB) {
@@ -100,7 +100,7 @@ void *merge_blobs(const char *path, struct blob *base, struct blob *our, struct
                        return NULL;
                if (!our)
                        our = their;
-               return read_sha1_file(our->object.sha1, &type, size);
+               return read_sha1_file(our->object.oid.hash, &type, size);
        }
 
        if (fill_mmfile_blob(&f1, our) < 0)
index 21e680a78e758eeaf03cf03a8b485095d96bcf5d..8eabde20fbe030a1242cf934d6e2e4cdb6ac14e7 100644 (file)
 static struct tree *shift_tree_object(struct tree *one, struct tree *two,
                                      const char *subtree_shift)
 {
-       unsigned char shifted[20];
+       struct object_id shifted;
 
        if (!*subtree_shift) {
-               shift_tree(one->object.sha1, two->object.sha1, shifted, 0);
+               shift_tree(one->object.oid.hash, two->object.oid.hash, shifted.hash, 0);
        } else {
-               shift_tree_by(one->object.sha1, two->object.sha1, shifted,
+               shift_tree_by(one->object.oid.hash, two->object.oid.hash, shifted.hash,
                              subtree_shift);
        }
-       if (!hashcmp(two->object.sha1, shifted))
+       if (!oidcmp(&two->object.oid, &shifted))
                return two;
-       return lookup_tree(shifted);
+       return lookup_tree(shifted.hash);
 }
 
 static struct commit *make_virtual_commit(struct tree *tree, const char *comment)
@@ -184,7 +184,7 @@ static void output_commit_title(struct merge_options *o, struct commit *commit)
        if (commit->util)
                printf("virtual %s\n", merge_remote_util(commit)->name);
        else {
-               printf("%s ", find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV));
+               printf("%s ", find_unique_abbrev(commit->object.oid.hash, DEFAULT_ABBREV));
                if (parse_commit(commit) != 0)
                        printf(_("(bad commit)\n"));
                else {
@@ -313,11 +313,11 @@ static struct stage_data *insert_stage_data(const char *path,
 {
        struct string_list_item *item;
        struct stage_data *e = xcalloc(1, sizeof(struct stage_data));
-       get_tree_entry(o->object.sha1, path,
+       get_tree_entry(o->object.oid.hash, path,
                        e->stages[1].sha, &e->stages[1].mode);
-       get_tree_entry(a->object.sha1, path,
+       get_tree_entry(a->object.oid.hash, path,
                        e->stages[2].sha, &e->stages[2].mode);
-       get_tree_entry(b->object.sha1, path,
+       get_tree_entry(b->object.oid.hash, path,
                        e->stages[3].sha, &e->stages[3].mode);
        item = string_list_insert(entries, path);
        item->util = e;
@@ -493,7 +493,7 @@ static struct string_list *get_renames(struct merge_options *o,
        opts.show_rename_progress = o->show_rename_progress;
        opts.output_format = DIFF_FORMAT_NO_OUTPUT;
        diff_setup_done(&opts);
-       diff_tree_sha1(o_tree->object.sha1, tree->object.sha1, "", &opts);
+       diff_tree_sha1(o_tree->object.oid.hash, tree->object.oid.hash, "", &opts);
        diffcore_std(&opts);
        if (opts.needed_rename_limit > o->needed_rename_limit)
                o->needed_rename_limit = opts.needed_rename_limit;
@@ -1812,7 +1812,7 @@ int merge_trees(struct merge_options *o,
                common = shift_tree_object(head, common, o->subtree_shift);
        }
 
-       if (sha_eq(common->object.sha1, merge->object.sha1)) {
+       if (sha_eq(common->object.oid.hash, merge->object.oid.hash)) {
                output(o, 0, _("Already up-to-date!"));
                *result = head;
                return 1;
@@ -1823,8 +1823,8 @@ int merge_trees(struct merge_options *o,
        if (code != 0) {
                if (show(o, 4) || o->call_depth)
                        die(_("merging of trees %s and %s failed"),
-                           sha1_to_hex(head->object.sha1),
-                           sha1_to_hex(merge->object.sha1));
+                           oid_to_hex(&head->object.oid),
+                           oid_to_hex(&merge->object.oid));
                else
                        exit(128);
        }
diff --git a/merge.c b/merge.c
index fcff632bd63a113ca78b0bd86da1e6af8bc6f7dc..5db7d56b90c3413bbd831f90de73d3306e10ce2f 100644 (file)
--- a/merge.c
+++ b/merge.c
@@ -10,7 +10,7 @@
 static const char *merge_argument(struct commit *commit)
 {
        if (commit)
-               return sha1_to_hex(commit->object.sha1);
+               return oid_to_hex(&commit->object.oid);
        else
                return EMPTY_TREE_SHA1_HEX;
 }
index b3d1dab51fb9e7aea4af05211326a1a91b1279d7..34bfac0c685f18c635b30dbf19d7b25250faa1c6 100644 (file)
@@ -602,15 +602,15 @@ int notes_merge(struct notes_merge_options *o,
                if (o->verbosity >= 4)
                        printf("No merge base found; doing history-less merge\n");
        } else if (!bases->next) {
-               base_sha1 = bases->item->object.sha1;
-               base_tree_sha1 = bases->item->tree->object.sha1;
+               base_sha1 = bases->item->object.oid.hash;
+               base_tree_sha1 = bases->item->tree->object.oid.hash;
                if (o->verbosity >= 4)
                        printf("One merge base found (%.7s)\n",
                                sha1_to_hex(base_sha1));
        } else {
                /* TODO: How to handle multiple merge-bases? */
-               base_sha1 = bases->item->object.sha1;
-               base_tree_sha1 = bases->item->tree->object.sha1;
+               base_sha1 = bases->item->object.oid.hash;
+               base_tree_sha1 = bases->item->tree->object.oid.hash;
                if (o->verbosity >= 3)
                        printf("Multiple merge bases found. Using the first "
                                "(%.7s)\n", sha1_to_hex(base_sha1));
@@ -618,27 +618,27 @@ int notes_merge(struct notes_merge_options *o,
 
        if (o->verbosity >= 4)
                printf("Merging remote commit %.7s into local commit %.7s with "
-                       "merge-base %.7s\n", sha1_to_hex(remote->object.sha1),
-                       sha1_to_hex(local->object.sha1),
+                       "merge-base %.7s\n", oid_to_hex(&remote->object.oid),
+                       oid_to_hex(&local->object.oid),
                        sha1_to_hex(base_sha1));
 
-       if (!hashcmp(remote->object.sha1, base_sha1)) {
+       if (!hashcmp(remote->object.oid.hash, base_sha1)) {
                /* Already merged; result == local commit */
                if (o->verbosity >= 2)
                        printf("Already up-to-date!\n");
-               hashcpy(result_sha1, local->object.sha1);
+               hashcpy(result_sha1, local->object.oid.hash);
                goto found_result;
        }
-       if (!hashcmp(local->object.sha1, base_sha1)) {
+       if (!hashcmp(local->object.oid.hash, base_sha1)) {
                /* Fast-forward; result == remote commit */
                if (o->verbosity >= 2)
                        printf("Fast-forward\n");
-               hashcpy(result_sha1, remote->object.sha1);
+               hashcpy(result_sha1, remote->object.oid.hash);
                goto found_result;
        }
 
-       result = merge_from_diffs(o, base_tree_sha1, local->tree->object.sha1,
-                                 remote->tree->object.sha1, local_tree);
+       result = merge_from_diffs(o, base_tree_sha1, local->tree->object.oid.hash,
+                                 remote->tree->object.oid.hash, local_tree);
 
        if (result != 0) { /* non-trivial merge (with or without conflicts) */
                /* Commit (partial) result */
index 980ac5fcdfa7654667c9902aa56407f1ce7053ba..67d9a9e2211fc2f6ab5772bfe58e42a2a95e469d 100644 (file)
--- a/object.c
+++ b/object.c
@@ -68,7 +68,7 @@ static unsigned int hash_obj(const unsigned char *sha1, unsigned int n)
  */
 static void insert_obj_hash(struct object *obj, struct object **hash, unsigned int size)
 {
-       unsigned int j = hash_obj(obj->sha1, size);
+       unsigned int j = hash_obj(obj->oid.hash, size);
 
        while (hash[j]) {
                j++;
@@ -92,7 +92,7 @@ struct object *lookup_object(const unsigned char *sha1)
 
        first = i = hash_obj(sha1, obj_hash_size);
        while ((obj = obj_hash[i]) != NULL) {
-               if (!hashcmp(sha1, obj->sha1))
+               if (!hashcmp(sha1, obj->oid.hash))
                        break;
                i++;
                if (i == obj_hash_size)
@@ -145,7 +145,7 @@ void *create_object(const unsigned char *sha1, void *o)
        obj->parsed = 0;
        obj->used = 0;
        obj->flags = 0;
-       hashcpy(obj->sha1, sha1);
+       hashcpy(obj->oid.hash, sha1);
 
        if (obj_hash_size - 1 <= nr_objs * 2)
                grow_object_hash();
@@ -168,7 +168,7 @@ void *object_as_type(struct object *obj, enum object_type type, int quiet)
        else {
                if (!quiet)
                        error("object %s is a %s, not a %s",
-                             sha1_to_hex(obj->sha1),
+                             oid_to_hex(&obj->oid),
                              typename(obj->type), typename(type));
                return NULL;
        }
index 6416247defa133c5c7ca43c69dfe09ae00ac03f7..f8b644263ff7e3b244bc1804b8527f87f7dbcf84 100644 (file)
--- a/object.h
+++ b/object.h
@@ -49,7 +49,7 @@ struct object {
        unsigned used : 1;
        unsigned type : TYPE_BITS;
        unsigned flags : FLAG_BITS;
-       unsigned char sha1[20];
+       struct object_id oid;
 };
 
 extern const char *typename(unsigned int type);
index c05d1386af7210e75a1012f3772745315ecc3592..6bff970c905b6a9c8a04773d64afb164dd124cbe 100644 (file)
@@ -152,7 +152,7 @@ static void show_object(struct object *object, const struct name_path *path,
                        const char *last, void *data)
 {
        struct bitmap *base = data;
-       bitmap_set(base, find_object_pos(object->sha1));
+       bitmap_set(base, find_object_pos(object->oid.hash));
        mark_as_seen(object);
 }
 
@@ -165,12 +165,12 @@ static int
 add_to_include_set(struct bitmap *base, struct commit *commit)
 {
        khiter_t hash_pos;
-       uint32_t bitmap_pos = find_object_pos(commit->object.sha1);
+       uint32_t bitmap_pos = find_object_pos(commit->object.oid.hash);
 
        if (bitmap_get(base, bitmap_pos))
                return 0;
 
-       hash_pos = kh_get_sha1(writer.bitmaps, commit->object.sha1);
+       hash_pos = kh_get_sha1(writer.bitmaps, commit->object.oid.hash);
        if (hash_pos < kh_end(writer.bitmaps)) {
                struct bitmapped_commit *bc = kh_value(writer.bitmaps, hash_pos);
                bitmap_or_ewah(base, bc->bitmap);
@@ -308,10 +308,10 @@ void bitmap_writer_build(struct packing_data *to_pack)
                if (i >= reuse_after)
                        stored->flags |= BITMAP_FLAG_REUSE;
 
-               hash_pos = kh_put_sha1(writer.bitmaps, object->sha1, &hash_ret);
+               hash_pos = kh_put_sha1(writer.bitmaps, object->oid.hash, &hash_ret);
                if (hash_ret == 0)
                        die("Duplicate entry when writing index: %s",
-                           sha1_to_hex(object->sha1));
+                           oid_to_hex(&object->oid));
 
                kh_value(writer.bitmaps, hash_pos) = stored;
                display_progress(writer.progress, writer.selected_nr - i);
@@ -414,14 +414,14 @@ void bitmap_writer_select_commits(struct commit **indexed_commits,
 
                if (next == 0) {
                        chosen = indexed_commits[i];
-                       reused_bitmap = find_reused_bitmap(chosen->object.sha1);
+                       reused_bitmap = find_reused_bitmap(chosen->object.oid.hash);
                } else {
                        chosen = indexed_commits[i + next];
 
                        for (j = 0; j <= next; ++j) {
                                struct commit *cm = indexed_commits[i + j];
 
-                               reused_bitmap = find_reused_bitmap(cm->object.sha1);
+                               reused_bitmap = find_reused_bitmap(cm->object.oid.hash);
                                if (reused_bitmap || (cm->object.flags & NEEDS_BITMAP) != 0) {
                                        chosen = cm;
                                        break;
@@ -474,7 +474,7 @@ static void write_selected_commits_v1(struct sha1file *f,
                struct bitmapped_commit *stored = &writer.selected[i];
 
                int commit_pos =
-                       sha1_pos(stored->commit->object.sha1, index, index_nr, sha1_access);
+                       sha1_pos(stored->commit->object.oid.hash, index, index_nr, sha1_access);
 
                if (commit_pos < 0)
                        die("BUG: trying to write commit not in index");
index 7dfcb341d61aa93e2c655963571ba1809fc93d40..cb9c62280389cfdb3bcaf483ac4edf2f0a00969f 100644 (file)
@@ -397,7 +397,7 @@ static int ext_index_add_object(struct object *object, const char *name)
        int hash_ret;
        int bitmap_pos;
 
-       hash_pos = kh_put_sha1_pos(eindex->positions, object->sha1, &hash_ret);
+       hash_pos = kh_put_sha1_pos(eindex->positions, object->oid.hash, &hash_ret);
        if (hash_ret > 0) {
                if (eindex->count >= eindex->alloc) {
                        eindex->alloc = (eindex->alloc + 16) * 3 / 2;
@@ -423,7 +423,7 @@ static void show_object(struct object *object, const struct name_path *path,
        struct bitmap *base = data;
        int bitmap_pos;
 
-       bitmap_pos = bitmap_position(object->sha1);
+       bitmap_pos = bitmap_position(object->oid.hash);
 
        if (bitmap_pos < 0) {
                char *name = path_name(path, last);
@@ -466,11 +466,11 @@ static int should_include(struct commit *commit, void *_data)
        struct include_data *data = _data;
        int bitmap_pos;
 
-       bitmap_pos = bitmap_position(commit->object.sha1);
+       bitmap_pos = bitmap_position(commit->object.oid.hash);
        if (bitmap_pos < 0)
                bitmap_pos = ext_index_add_object((struct object *)commit, NULL);
 
-       if (!add_to_include_set(data, commit->object.sha1, bitmap_pos)) {
+       if (!add_to_include_set(data, commit->object.oid.hash, bitmap_pos)) {
                struct commit_list *parent = commit->parents;
 
                while (parent) {
@@ -506,7 +506,7 @@ static struct bitmap *find_objects(struct rev_info *revs,
                roots = roots->next;
 
                if (object->type == OBJ_COMMIT) {
-                       khiter_t pos = kh_get_sha1(bitmap_git.bitmaps, object->sha1);
+                       khiter_t pos = kh_get_sha1(bitmap_git.bitmaps, object->oid.hash);
 
                        if (pos < kh_end(bitmap_git.bitmaps)) {
                                struct stored_bitmap *st = kh_value(bitmap_git.bitmaps, pos);
@@ -548,7 +548,7 @@ static struct bitmap *find_objects(struct rev_info *revs,
                int pos;
 
                roots = roots->next;
-               pos = bitmap_position(object->sha1);
+               pos = bitmap_position(object->oid.hash);
 
                if (pos < 0 || base == NULL || !bitmap_get(base, pos)) {
                        object->flags &= ~UNINTERESTING;
@@ -593,7 +593,7 @@ static void show_extended_objects(struct bitmap *objects,
                        continue;
 
                obj = eindex->objects[i];
-               show_reach(obj->sha1, obj->type, 0, eindex->hashes[i], NULL, 0);
+               show_reach(obj->oid.hash, obj->type, 0, eindex->hashes[i], NULL, 0);
        }
 }
 
@@ -650,7 +650,7 @@ static int in_bitmapped_pack(struct object_list *roots)
                struct object *object = roots->item;
                roots = roots->next;
 
-               if (find_pack_entry_one(object->sha1, bitmap_git.pack) > 0)
+               if (find_pack_entry_one(object->oid.hash, bitmap_git.pack) > 0)
                        return 1;
        }
 
@@ -680,7 +680,7 @@ int prepare_bitmap_walk(struct rev_info *revs)
                struct object *object = pending_e[i].item;
 
                if (object->type == OBJ_NONE)
-                       parse_object_or_die(object->sha1, NULL);
+                       parse_object_or_die(object->oid.hash, NULL);
 
                while (object->type == OBJ_TAG) {
                        struct tag *tag = (struct tag *) object;
@@ -692,7 +692,7 @@ int prepare_bitmap_walk(struct rev_info *revs)
 
                        if (!tag->tagged)
                                die("bad tag");
-                       object = parse_object_or_die(tag->tagged->sha1, NULL);
+                       object = parse_object_or_die(tag->tagged->oid.hash, NULL);
                }
 
                if (object->flags & UNINTERESTING)
@@ -904,9 +904,9 @@ static void test_show_object(struct object *object,
        struct bitmap_test_data *tdata = data;
        int bitmap_pos;
 
-       bitmap_pos = bitmap_position(object->sha1);
+       bitmap_pos = bitmap_position(object->oid.hash);
        if (bitmap_pos < 0)
-               die("Object not in bitmap: %s\n", sha1_to_hex(object->sha1));
+               die("Object not in bitmap: %s\n", oid_to_hex(&object->oid));
 
        bitmap_set(tdata->base, bitmap_pos);
        display_progress(tdata->prg, ++tdata->seen);
@@ -917,9 +917,9 @@ static void test_show_commit(struct commit *commit, void *data)
        struct bitmap_test_data *tdata = data;
        int bitmap_pos;
 
-       bitmap_pos = bitmap_position(commit->object.sha1);
+       bitmap_pos = bitmap_position(commit->object.oid.hash);
        if (bitmap_pos < 0)
-               die("Object not in bitmap: %s\n", sha1_to_hex(commit->object.sha1));
+               die("Object not in bitmap: %s\n", oid_to_hex(&commit->object.oid));
 
        bitmap_set(tdata->base, bitmap_pos);
        display_progress(tdata->prg, ++tdata->seen);
@@ -943,20 +943,20 @@ void test_bitmap_walk(struct rev_info *revs)
                bitmap_git.version, bitmap_git.entry_count);
 
        root = revs->pending.objects[0].item;
-       pos = kh_get_sha1(bitmap_git.bitmaps, root->sha1);
+       pos = kh_get_sha1(bitmap_git.bitmaps, root->oid.hash);
 
        if (pos < kh_end(bitmap_git.bitmaps)) {
                struct stored_bitmap *st = kh_value(bitmap_git.bitmaps, pos);
                struct ewah_bitmap *bm = lookup_stored_bitmap(st);
 
                fprintf(stderr, "Found bitmap for %s. %d bits / %08x checksum\n",
-                       sha1_to_hex(root->sha1), (int)bm->bit_size, ewah_checksum(bm));
+                       oid_to_hex(&root->oid), (int)bm->bit_size, ewah_checksum(bm));
 
                result = ewah_to_bitmap(bm);
        }
 
        if (result == NULL)
-               die("Commit %s doesn't have an indexed bitmap", sha1_to_hex(root->sha1));
+               die("Commit %s doesn't have an indexed bitmap", oid_to_hex(&root->oid));
 
        revs->tag_objects = 1;
        revs->tree_objects = 1;
index bf81b923610fe2473655560cd111adb3061673d9..b7b3e5a1a700d4d2e1656c605697c2cf6345b8a6 100644 (file)
@@ -8,10 +8,10 @@ static int commit_patch_id(struct commit *commit, struct diff_options *options,
                    unsigned char *sha1)
 {
        if (commit->parents)
-               diff_tree_sha1(commit->parents->item->object.sha1,
-                              commit->object.sha1, "", options);
+               diff_tree_sha1(commit->parents->item->object.oid.hash,
+                              commit->object.oid.hash, "", options);
        else
-               diff_root_tree_sha1(commit->object.sha1, "", options);
+               diff_root_tree_sha1(commit->object.oid.hash, "", options);
        diffcore_std(options);
        return diff_flush_patch_id(options, sha1);
 }
index 151c2ae3128bb7c1a0ae13166539cb79e6edaeb8..92b2870a7eabb6a99ffbbcfc222d2ff1c1186fa0 100644 (file)
--- a/pretty.c
+++ b/pretty.c
@@ -543,9 +543,9 @@ static void add_merge_info(const struct pretty_print_context *pp,
                struct commit *p = parent->item;
                const char *hex = NULL;
                if (pp->abbrev)
-                       hex = find_unique_abbrev(p->object.sha1, pp->abbrev);
+                       hex = find_unique_abbrev(p->object.oid.hash, pp->abbrev);
                if (!hex)
-                       hex = sha1_to_hex(p->object.sha1);
+                       hex = oid_to_hex(&p->object.oid);
                parent = parent->next;
 
                strbuf_addf(sb, " %s", hex);
@@ -1119,12 +1119,12 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
 
        /* these depend on the commit */
        if (!commit->object.parsed)
-               parse_object(commit->object.sha1);
+               parse_object(commit->object.oid.hash);
 
        switch (placeholder[0]) {
        case 'H':               /* commit hash */
                strbuf_addstr(sb, diff_get_color(c->auto_color, DIFF_COMMIT));
-               strbuf_addstr(sb, sha1_to_hex(commit->object.sha1));
+               strbuf_addstr(sb, oid_to_hex(&commit->object.oid));
                strbuf_addstr(sb, diff_get_color(c->auto_color, DIFF_RESET));
                return 1;
        case 'h':               /* abbreviated commit hash */
@@ -1133,18 +1133,18 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
                        strbuf_addstr(sb, diff_get_color(c->auto_color, DIFF_RESET));
                        return 1;
                }
-               strbuf_addstr(sb, find_unique_abbrev(commit->object.sha1,
+               strbuf_addstr(sb, find_unique_abbrev(commit->object.oid.hash,
                                                     c->pretty_ctx->abbrev));
                strbuf_addstr(sb, diff_get_color(c->auto_color, DIFF_RESET));
                c->abbrev_commit_hash.len = sb->len - c->abbrev_commit_hash.off;
                return 1;
        case 'T':               /* tree hash */
-               strbuf_addstr(sb, sha1_to_hex(commit->tree->object.sha1));
+               strbuf_addstr(sb, oid_to_hex(&commit->tree->object.oid));
                return 1;
        case 't':               /* abbreviated tree hash */
                if (add_again(sb, &c->abbrev_tree_hash))
                        return 1;
-               strbuf_addstr(sb, find_unique_abbrev(commit->tree->object.sha1,
+               strbuf_addstr(sb, find_unique_abbrev(commit->tree->object.oid.hash,
                                                     c->pretty_ctx->abbrev));
                c->abbrev_tree_hash.len = sb->len - c->abbrev_tree_hash.off;
                return 1;
@@ -1152,7 +1152,7 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
                for (p = commit->parents; p; p = p->next) {
                        if (p != commit->parents)
                                strbuf_addch(sb, ' ');
-                       strbuf_addstr(sb, sha1_to_hex(p->item->object.sha1));
+                       strbuf_addstr(sb, oid_to_hex(&p->item->object.oid));
                }
                return 1;
        case 'p':               /* abbreviated parent hashes */
@@ -1162,7 +1162,7 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
                        if (p != commit->parents)
                                strbuf_addch(sb, ' ');
                        strbuf_addstr(sb, find_unique_abbrev(
-                                       p->item->object.sha1,
+                                       p->item->object.oid.hash,
                                        c->pretty_ctx->abbrev));
                }
                c->abbrev_parent_hashes.len = sb->len -
index e205dd2f689ee5aeafe6ea66343fd01b85d2e354..7bef7f8dac644b49a2cb13d8d5154fd563d6e8a0 100644 (file)
@@ -372,7 +372,7 @@ static void grab_common_values(struct atom_value *val, int deref, struct object
                        v->s = xstrfmt("%lu", sz);
                }
                else if (deref)
-                       grab_objectname(name, obj->sha1, v);
+                       grab_objectname(name, obj->oid.hash, v);
        }
 }
 
@@ -394,7 +394,7 @@ static void grab_tag_values(struct atom_value *val, int deref, struct object *ob
                else if (!strcmp(name, "type") && tag->tagged)
                        v->s = typename(tag->tagged->type);
                else if (!strcmp(name, "object") && tag->tagged)
-                       v->s = xstrdup(sha1_to_hex(tag->tagged->sha1));
+                       v->s = xstrdup(oid_to_hex(&tag->tagged->oid));
        }
 }
 
@@ -412,7 +412,7 @@ static void grab_commit_values(struct atom_value *val, int deref, struct object
                if (deref)
                        name++;
                if (!strcmp(name, "tree")) {
-                       v->s = xstrdup(sha1_to_hex(commit->tree->object.sha1));
+                       v->s = xstrdup(oid_to_hex(&commit->tree->object.oid));
                }
                else if (!strcmp(name, "numparent")) {
                        v->ul = commit_list_count(commit->parents);
@@ -425,7 +425,7 @@ static void grab_commit_values(struct atom_value *val, int deref, struct object
                                struct commit *parent = parents->item;
                                if (parents != commit->parents)
                                        strbuf_addch(&s, ' ');
-                               strbuf_addstr(&s, sha1_to_hex(parent->object.sha1));
+                               strbuf_addstr(&s, oid_to_hex(&parent->object.oid));
                        }
                        v->s = strbuf_detach(&s, NULL);
                }
@@ -992,7 +992,7 @@ static void populate_value(struct ref_array_item *ref)
         * If it is a tag object, see if we use a value that derefs
         * the object, and if we do grab the object it refers to.
         */
-       tagged = ((struct tag *)obj)->tagged->sha1;
+       tagged = ((struct tag *)obj)->tagged->oid.hash;
 
        /*
         * NEEDSWORK: This derefs tag only once, which
@@ -1049,7 +1049,7 @@ struct contains_stack {
 static int in_commit_list(const struct commit_list *want, struct commit *c)
 {
        for (; want; want = want->next)
-               if (!hashcmp(want->item->object.sha1, c->object.sha1))
+               if (!oidcmp(&want->item->object.oid, &c->object.oid))
                        return 1;
        return 0;
 }
@@ -1218,7 +1218,7 @@ static const unsigned char *match_points_at(struct sha1_array *points_at,
        if (!obj)
                die(_("malformed object at '%s'"), refname);
        if (obj->type == OBJ_TAG)
-               tagged_sha1 = ((struct tag *)obj)->tagged->sha1;
+               tagged_sha1 = ((struct tag *)obj)->tagged->oid.hash;
        if (tagged_sha1 && sha1_array_lookup(points_at, tagged_sha1) >= 0)
                return tagged_sha1;
        return NULL;
diff --git a/refs.c b/refs.c
index 0f7628db4d94c45cd26150f28d58903e26298e09..e2d34b253e4c9c4efcb30e88d11ccd3ce9e14deb 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -201,7 +201,7 @@ enum peel_status peel_object(const unsigned char *name, unsigned char *sha1)
        if (!o)
                return PEEL_INVALID;
 
-       hashcpy(sha1, o->sha1);
+       hashcpy(sha1, o->oid.hash);
        return PEEL_PEELED;
 }
 
index cc7a8a66faa96ba9bc8ae82e72d0202c0a802ba1..f404faf0f4b9ec298ccbae34fae0c79283884d26 100644 (file)
@@ -169,7 +169,7 @@ static struct ref *parse_info_refs(struct discovery *heads)
                        data[i] = 0;
                        ref_name = mid + 1;
                        ref = alloc_ref(ref_name);
-                       get_sha1_hex(start, ref->old_sha1);
+                       get_oid_hex(start, &ref->old_oid);
                        if (!refs)
                                refs = ref;
                        if (last_ref)
@@ -348,7 +348,7 @@ static void output_refs(struct ref *refs)
                if (posn->symref)
                        printf("@%s %s\n", posn->symref, posn->name);
                else
-                       printf("%s %s\n", sha1_to_hex(posn->old_sha1), posn->name);
+                       printf("%s %s\n", oid_to_hex(&posn->old_oid), posn->name);
        }
        printf("\n");
        fflush(stdout);
@@ -702,7 +702,7 @@ static int fetch_dumb(int nr_heads, struct ref **to_fetch)
        if (options.depth)
                die("dumb http transport does not support --depth");
        for (i = 0; i < nr_heads; i++)
-               targets[i] = xstrdup(sha1_to_hex(to_fetch[i]->old_sha1));
+               targets[i] = xstrdup(oid_to_hex(&to_fetch[i]->old_oid));
 
        walker = get_http_walker(url.buf);
        walker->get_all = 1;
@@ -763,7 +763,7 @@ static int fetch_git(struct discovery *heads,
                if (!*ref->name)
                        die("cannot fetch by sha1 over smart http");
                packet_buf_write(&preamble, "%s %s\n",
-                                sha1_to_hex(ref->old_sha1), ref->name);
+                                oid_to_hex(&ref->old_oid), ref->name);
        }
        packet_buf_flush(&preamble);
 
@@ -803,19 +803,19 @@ static void parse_fetch(struct strbuf *buf)
                if (skip_prefix(buf->buf, "fetch ", &p)) {
                        const char *name;
                        struct ref *ref;
-                       unsigned char old_sha1[20];
+                       struct object_id old_oid;
 
-                       if (strlen(p) < 40 || get_sha1_hex(p, old_sha1))
+                       if (get_oid_hex(p, &old_oid))
                                die("protocol error: expected sha/ref, got %s'", p);
-                       if (p[40] == ' ')
-                               name = p + 41;
-                       else if (!p[40])
+                       if (p[GIT_SHA1_HEXSZ] == ' ')
+                               name = p + GIT_SHA1_HEXSZ + 1;
+                       else if (!p[GIT_SHA1_HEXSZ])
                                name = "";
                        else
                                die("protocol error: expected sha/ref, got %s'", p);
 
                        ref = alloc_ref(name);
-                       hashcpy(ref->old_sha1, old_sha1);
+                       oidcpy(&ref->old_oid, &old_oid);
 
                        *list = ref;
                        list = &ref->next;
index 10f1ffce0b00a7bef0b156678ab7c04431827f0e..9d34b5a5dafa217e2ce9cb1b7e9a4ab74908f7af 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -456,7 +456,7 @@ static void alias_all_urls(void)
 static void read_config(void)
 {
        static int loaded;
-       unsigned char sha1[20];
+       struct object_id oid;
        const char *head_ref;
        int flag;
 
@@ -465,7 +465,7 @@ static void read_config(void)
        loaded = 1;
 
        current_branch = NULL;
-       head_ref = resolve_ref_unsafe("HEAD", 0, sha1, &flag);
+       head_ref = resolve_ref_unsafe("HEAD", 0, oid.hash, &flag);
        if (head_ref && (flag & REF_ISSYMREF) &&
            skip_prefix(head_ref, "refs/heads/", &head_ref)) {
                current_branch = make_branch(head_ref, 0);
@@ -544,12 +544,12 @@ static struct refspec *parse_refspec_internal(int nr_refspec, const char **refsp
                flags = REFNAME_ALLOW_ONELEVEL | (is_glob ? REFNAME_REFSPEC_PATTERN : 0);
 
                if (fetch) {
-                       unsigned char unused[40];
+                       struct object_id unused;
 
                        /* LHS */
                        if (!*rs[i].src)
                                ; /* empty is ok; it means "HEAD" */
-                       else if (llen == 40 && !get_sha1_hex(rs[i].src, unused))
+                       else if (llen == GIT_SHA1_HEXSZ && !get_oid_hex(rs[i].src, &unused))
                                rs[i].exact_sha1 = 1; /* ok */
                        else if (!check_refname_format(rs[i].src, flags))
                                ; /* valid looking ref is ok */
@@ -1075,14 +1075,14 @@ static void tail_link_ref(struct ref *ref, struct ref ***tail)
 static struct ref *alloc_delete_ref(void)
 {
        struct ref *ref = alloc_ref("(delete)");
-       hashclr(ref->new_sha1);
+       oidclr(&ref->new_oid);
        return ref;
 }
 
 static int try_explicit_object_name(const char *name,
                                    struct ref **match)
 {
-       unsigned char sha1[20];
+       struct object_id oid;
 
        if (!*name) {
                if (match)
@@ -1090,12 +1090,12 @@ static int try_explicit_object_name(const char *name,
                return 0;
        }
 
-       if (get_sha1(name, sha1))
+       if (get_sha1(name, oid.hash))
                return -1;
 
        if (match) {
                *match = alloc_ref(name);
-               hashcpy((*match)->new_sha1, sha1);
+               oidcpy(&(*match)->new_oid, &oid);
        }
        return 0;
 }
@@ -1110,10 +1110,10 @@ static struct ref *make_linked_ref(const char *name, struct ref ***tail)
 static char *guess_ref(const char *name, struct ref *peer)
 {
        struct strbuf buf = STRBUF_INIT;
-       unsigned char sha1[20];
+       struct object_id oid;
 
        const char *r = resolve_ref_unsafe(peer->name, RESOLVE_REF_READING,
-                                          sha1, NULL);
+                                          oid.hash, NULL);
        if (!r)
                return NULL;
 
@@ -1171,12 +1171,12 @@ static int match_explicit(struct ref *src, struct ref *dst,
                return -1;
 
        if (!dst_value) {
-               unsigned char sha1[20];
+               struct object_id oid;
                int flag;
 
                dst_value = resolve_ref_unsafe(matched_src->name,
                                               RESOLVE_REF_READING,
-                                              sha1, &flag);
+                                              oid.hash, &flag);
                if (!dst_value ||
                    ((flag & REF_ISSYMREF) &&
                     !starts_with(dst_value, "refs/heads/")))
@@ -1190,7 +1190,7 @@ static int match_explicit(struct ref *src, struct ref *dst,
        case 0:
                if (starts_with(dst_value, "refs/"))
                        matched_dst = make_linked_ref(dst_value, dst_tail);
-               else if (is_null_sha1(matched_src->new_sha1))
+               else if (is_null_oid(&matched_src->new_oid))
                        error("unable to delete '%s': remote ref does not exist",
                              dst_value);
                else if ((dst_guess = guess_ref(dst_value, matched_src)))
@@ -1292,13 +1292,13 @@ struct tips {
        int nr, alloc;
 };
 
-static void add_to_tips(struct tips *tips, const unsigned char *sha1)
+static void add_to_tips(struct tips *tips, const struct object_id *oid)
 {
        struct commit *commit;
 
-       if (is_null_sha1(sha1))
+       if (is_null_oid(oid))
                return;
-       commit = lookup_commit_reference_gently(sha1, 1);
+       commit = lookup_commit_reference_gently(oid->hash, 1);
        if (!commit || (commit->object.flags & TMP_MARK))
                return;
        commit->object.flags |= TMP_MARK;
@@ -1321,10 +1321,10 @@ static void add_missing_tags(struct ref *src, struct ref **dst, struct ref ***ds
        memset(&sent_tips, 0, sizeof(sent_tips));
        for (ref = *dst; ref; ref = ref->next) {
                if (ref->peer_ref &&
-                   !is_null_sha1(ref->peer_ref->new_sha1))
-                       add_to_tips(&sent_tips, ref->peer_ref->new_sha1);
+                   !is_null_oid(&ref->peer_ref->new_oid))
+                       add_to_tips(&sent_tips, &ref->peer_ref->new_oid);
                else
-                       add_to_tips(&sent_tips, ref->old_sha1);
+                       add_to_tips(&sent_tips, &ref->old_oid);
                if (starts_with(ref->name, "refs/tags/"))
                        string_list_append(&dst_tag, ref->name);
        }
@@ -1338,7 +1338,7 @@ static void add_missing_tags(struct ref *src, struct ref **dst, struct ref ***ds
                        continue; /* not a tag */
                if (string_list_has_string(&dst_tag, ref->name))
                        continue; /* they already have it */
-               if (sha1_object_info(ref->new_sha1, NULL) != OBJ_TAG)
+               if (sha1_object_info(ref->new_oid.hash, NULL) != OBJ_TAG)
                        continue; /* be conservative */
                item = string_list_append(&src_tag, ref->name);
                item->util = ref;
@@ -1358,9 +1358,9 @@ static void add_missing_tags(struct ref *src, struct ref **dst, struct ref ***ds
                        struct ref *dst_ref;
                        struct commit *commit;
 
-                       if (is_null_sha1(ref->new_sha1))
+                       if (is_null_oid(&ref->new_oid))
                                continue;
-                       commit = lookup_commit_reference_gently(ref->new_sha1, 1);
+                       commit = lookup_commit_reference_gently(ref->new_oid.hash, 1);
                        if (!commit)
                                /* not pushing a commit, which is not an error */
                                continue;
@@ -1374,7 +1374,7 @@ static void add_missing_tags(struct ref *src, struct ref **dst, struct ref ***ds
 
                        /* Add it in */
                        dst_ref = make_linked_ref(ref->name, dst_tail);
-                       hashcpy(dst_ref->new_sha1, ref->new_sha1);
+                       oidcpy(&dst_ref->new_oid, &ref->new_oid);
                        dst_ref->peer_ref = copy_ref(ref);
                }
        }
@@ -1481,7 +1481,7 @@ int match_push_refs(struct ref *src, struct ref **dst,
 
                        /* Create a new one and link it */
                        dst_peer = make_linked_ref(dst_name, &dst_tail);
-                       hashcpy(dst_peer->new_sha1, ref->new_sha1);
+                       oidcpy(&dst_peer->new_oid, &ref->new_oid);
                        string_list_insert(&dst_ref_index,
                                dst_peer->name)->util = dst_peer;
                }
@@ -1533,13 +1533,13 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
                int reject_reason = 0;
 
                if (ref->peer_ref)
-                       hashcpy(ref->new_sha1, ref->peer_ref->new_sha1);
+                       oidcpy(&ref->new_oid, &ref->peer_ref->new_oid);
                else if (!send_mirror)
                        continue;
 
-               ref->deletion = is_null_sha1(ref->new_sha1);
+               ref->deletion = is_null_oid(&ref->new_oid);
                if (!ref->deletion &&
-                       !hashcmp(ref->old_sha1, ref->new_sha1)) {
+                       !oidcmp(&ref->old_oid, &ref->new_oid)) {
                        ref->status = REF_STATUS_UPTODATE;
                        continue;
                }
@@ -1558,7 +1558,7 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
                 */
                if (ref->expect_old_sha1) {
                        if (ref->expect_old_no_trackback ||
-                           hashcmp(ref->old_sha1, ref->old_sha1_expect))
+                           oidcmp(&ref->old_oid, &ref->old_oid_expect))
                                reject_reason = REF_STATUS_REJECT_STALE;
                }
 
@@ -1582,15 +1582,15 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
                 *     passing the --force argument
                 */
 
-               else if (!ref->deletion && !is_null_sha1(ref->old_sha1)) {
+               else if (!ref->deletion && !is_null_oid(&ref->old_oid)) {
                        if (starts_with(ref->name, "refs/tags/"))
                                reject_reason = REF_STATUS_REJECT_ALREADY_EXISTS;
-                       else if (!has_sha1_file(ref->old_sha1))
+                       else if (!has_object_file(&ref->old_oid))
                                reject_reason = REF_STATUS_REJECT_FETCH_FIRST;
-                       else if (!lookup_commit_reference_gently(ref->old_sha1, 1) ||
-                                !lookup_commit_reference_gently(ref->new_sha1, 1))
+                       else if (!lookup_commit_reference_gently(ref->old_oid.hash, 1) ||
+                                !lookup_commit_reference_gently(ref->new_oid.hash, 1))
                                reject_reason = REF_STATUS_REJECT_NEEDS_FORCE;
-                       else if (!ref_newer(ref->new_sha1, ref->old_sha1))
+                       else if (!ref_newer(&ref->new_oid, &ref->old_oid))
                                reject_reason = REF_STATUS_REJECT_NONFASTFORWARD;
                }
 
@@ -1609,7 +1609,7 @@ static void set_merge(struct branch *ret)
 {
        struct remote *remote;
        char *ref;
-       unsigned char sha1[20];
+       struct object_id oid;
        int i;
 
        if (!ret)
@@ -1635,7 +1635,7 @@ static void set_merge(struct branch *ret)
                    strcmp(ret->remote_name, "."))
                        continue;
                if (dwim_ref(ret->merge_name[i], strlen(ret->merge_name[i]),
-                            sha1, &ref) == 1)
+                            oid.hash, &ref) == 1)
                        ret->merge[i]->dst = ref;
                else
                        ret->merge[i]->dst = xstrdup(ret->merge_name[i]);
@@ -1795,10 +1795,10 @@ const char *branch_get_push(struct branch *branch, struct strbuf *err)
 
 static int ignore_symref_update(const char *refname)
 {
-       unsigned char sha1[20];
+       struct object_id oid;
        int flag;
 
-       if (!resolve_ref_unsafe(refname, 0, sha1, &flag))
+       if (!resolve_ref_unsafe(refname, 0, oid.hash, &flag))
                return 0; /* non-existing refs are OK */
        return (flag & REF_ISSYMREF);
 }
@@ -1889,7 +1889,7 @@ int get_fetch_map(const struct ref *remote_refs,
 
                if (refspec->exact_sha1) {
                        ref_map = alloc_ref(name);
-                       get_sha1_hex(name, ref_map->old_sha1);
+                       get_oid_hex(name, &ref_map->old_oid);
                } else {
                        ref_map = get_remote_ref(remote_refs, name);
                }
@@ -1930,7 +1930,7 @@ int resolve_remote_symref(struct ref *ref, struct ref *list)
                return 0;
        for (; list; list = list->next)
                if (!strcmp(ref->symref, list->name)) {
-                       hashcpy(ref->old_sha1, list->old_sha1);
+                       oidcpy(&ref->old_oid, &list->old_oid);
                        return 0;
                }
        return 1;
@@ -1944,7 +1944,7 @@ static void unmark_and_free(struct commit_list *list, unsigned int mark)
        }
 }
 
-int ref_newer(const unsigned char *new_sha1, const unsigned char *old_sha1)
+int ref_newer(const struct object_id *new_oid, const struct object_id *old_oid)
 {
        struct object *o;
        struct commit *old, *new;
@@ -1955,12 +1955,12 @@ int ref_newer(const unsigned char *new_sha1, const unsigned char *old_sha1)
         * Both new and old must be commit-ish and new is descendant of
         * old.  Otherwise we require --force.
         */
-       o = deref_tag(parse_object(old_sha1), NULL, 0);
+       o = deref_tag(parse_object(old_oid->hash), NULL, 0);
        if (!o || o->type != OBJ_COMMIT)
                return 0;
        old = (struct commit *) o;
 
-       o = deref_tag(parse_object(new_sha1), NULL, 0);
+       o = deref_tag(parse_object(new_oid->hash), NULL, 0);
        if (!o || o->type != OBJ_COMMIT)
                return 0;
        new = (struct commit *) o;
@@ -1995,7 +1995,7 @@ int ref_newer(const unsigned char *new_sha1, const unsigned char *old_sha1)
 int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs,
                       const char **upstream_name)
 {
-       unsigned char sha1[20];
+       struct object_id oid;
        struct commit *ours, *theirs;
        struct rev_info revs;
        const char *base;
@@ -2009,15 +2009,15 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs,
                return -1;
 
        /* Cannot stat if what we used to build on no longer exists */
-       if (read_ref(base, sha1))
+       if (read_ref(base, oid.hash))
                return -1;
-       theirs = lookup_commit_reference(sha1);
+       theirs = lookup_commit_reference(oid.hash);
        if (!theirs)
                return -1;
 
-       if (read_ref(branch->refname, sha1))
+       if (read_ref(branch->refname, oid.hash))
                return -1;
-       ours = lookup_commit_reference(sha1);
+       ours = lookup_commit_reference(oid.hash);
        if (!ours)
                return -1;
 
@@ -2031,8 +2031,8 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs,
        argv_array_push(&argv, ""); /* ignored */
        argv_array_push(&argv, "--left-right");
        argv_array_pushf(&argv, "%s...%s",
-                        sha1_to_hex(ours->object.sha1),
-                        sha1_to_hex(theirs->object.sha1));
+                        oid_to_hex(&ours->object.oid),
+                        oid_to_hex(&theirs->object.oid));
        argv_array_push(&argv, "--");
 
        init_revisions(&revs, NULL);
@@ -2140,7 +2140,7 @@ static int one_local_ref(const char *refname, const struct object_id *oid,
 
        len = strlen(refname) + 1;
        ref = xcalloc(1, sizeof(*ref) + len);
-       hashcpy(ref->new_sha1, oid->hash);
+       oidcpy(&ref->new_oid, oid);
        memcpy(ref->name, refname, len);
        **local_tail = ref;
        *local_tail = &ref->next;
@@ -2177,7 +2177,7 @@ struct ref *guess_remote_head(const struct ref *head,
        /* If refs/heads/master could be right, it is. */
        if (!all) {
                r = find_ref_by_name(refs, "refs/heads/master");
-               if (r && !hashcmp(r->old_sha1, head->old_sha1))
+               if (r && !oidcmp(&r->old_oid, &head->old_oid))
                        return copy_ref(r);
        }
 
@@ -2185,7 +2185,7 @@ struct ref *guess_remote_head(const struct ref *head,
        for (r = refs; r; r = r->next) {
                if (r != head &&
                    starts_with(r->name, "refs/heads/") &&
-                   !hashcmp(r->old_sha1, head->old_sha1)) {
+                   !oidcmp(&r->old_oid, &head->old_oid)) {
                        *tail = copy_ref(r);
                        tail = &((*tail)->next);
                        if (!all)
@@ -2233,7 +2233,7 @@ static int get_stale_heads_cb(const char *refname, const struct object_id *oid,
 
        if (stale) {
                struct ref *ref = make_linked_ref(refname, &info->stale_refs_tail);
-               hashcpy(ref->new_sha1, oid->hash);
+               oidcpy(&ref->new_oid, oid);
        }
 
 clean_exit:
@@ -2328,14 +2328,14 @@ int is_empty_cas(const struct push_cas_option *cas)
  * If we cannot do so, return negative to signal an error.
  */
 static int remote_tracking(struct remote *remote, const char *refname,
-                          unsigned char sha1[20])
+                          struct object_id *oid)
 {
        char *dst;
 
        dst = apply_refspecs(remote->fetch, remote->fetch_refspec_nr, refname);
        if (!dst)
                return -1; /* no tracking ref for refname at remote */
-       if (read_ref(dst, sha1))
+       if (read_ref(dst, oid->hash))
                return -1; /* we know what the tracking ref is but we cannot read it */
        return 0;
 }
@@ -2353,8 +2353,8 @@ static void apply_cas(struct push_cas_option *cas,
                        continue;
                ref->expect_old_sha1 = 1;
                if (!entry->use_tracking)
-                       hashcpy(ref->old_sha1_expect, cas->entry[i].expect);
-               else if (remote_tracking(remote, ref->name, ref->old_sha1_expect))
+                       hashcpy(ref->old_oid_expect.hash, cas->entry[i].expect);
+               else if (remote_tracking(remote, ref->name, &ref->old_oid_expect))
                        ref->expect_old_no_trackback = 1;
                return;
        }
@@ -2364,7 +2364,7 @@ static void apply_cas(struct push_cas_option *cas,
                return;
 
        ref->expect_old_sha1 = 1;
-       if (remote_tracking(remote, ref->name, ref->old_sha1_expect))
+       if (remote_tracking(remote, ref->name, &ref->old_oid_expect))
                ref->expect_old_no_trackback = 1;
 }
 
index 312b7ca131c459faeae32ff5cf3021c6516eb2af..4a039bae0b15d6d28aace0c62287c3f3bb11befa 100644 (file)
--- a/remote.h
+++ b/remote.h
@@ -79,9 +79,9 @@ extern const struct refspec *tag_refspec;
 
 struct ref {
        struct ref *next;
-       unsigned char old_sha1[20];
-       unsigned char new_sha1[20];
-       unsigned char old_sha1_expect[20]; /* used by expect-old */
+       struct object_id old_oid;
+       struct object_id new_oid;
+       struct object_id old_oid_expect; /* used by expect-old */
        char *symref;
        unsigned int
                force:1,
@@ -150,7 +150,7 @@ extern struct ref **get_remote_heads(int in, char *src_buf, size_t src_len,
                                     struct sha1_array *shallow);
 
 int resolve_remote_symref(struct ref *ref, struct ref *list);
-int ref_newer(const unsigned char *new_sha1, const unsigned char *old_sha1);
+int ref_newer(const struct object_id *new_oid, const struct object_id *old_oid);
 
 /*
  * Remove and free all but the first of any entries in the input list
index 0fbb6841bf14389148474bff7bd702f5ec02e558..2a9463bd670631dcf96ed456ed23e65b7b84f6d4 100644 (file)
@@ -86,7 +86,7 @@ void show_object_with_name(FILE *out, struct object *obj,
        leaf.elem = component;
        leaf.elem_len = strlen(component);
 
-       fprintf(out, "%s ", sha1_to_hex(obj->sha1));
+       fprintf(out, "%s ", oid_to_hex(&obj->oid));
        show_path_truncated(out, &leaf);
        fputc('\n', out);
 }
@@ -106,10 +106,10 @@ static void mark_tree_contents_uninteresting(struct tree *tree)
        struct name_entry entry;
        struct object *obj = &tree->object;
 
-       if (!has_sha1_file(obj->sha1))
+       if (!has_object_file(&obj->oid))
                return;
        if (parse_tree(tree) < 0)
-               die("bad tree %s", sha1_to_hex(obj->sha1));
+               die("bad tree %s", oid_to_hex(&obj->oid));
 
        init_tree_desc(&desc, tree->buffer, tree->size);
        while (tree_entry(&desc, &entry)) {
@@ -164,7 +164,7 @@ void mark_parents_uninteresting(struct commit *commit)
                         * it is popped next time around, we won't be trying
                         * to parse it and get an error.
                         */
-                       if (!has_sha1_file(commit->object.sha1))
+                       if (!has_object_file(&commit->object.oid))
                                commit->object.parsed = 1;
 
                        if (commit->object.flags & UNINTERESTING)
@@ -282,11 +282,11 @@ static struct commit *handle_commit(struct rev_info *revs,
                        add_pending_object(revs, object, tag->tag);
                if (!tag->tagged)
                        die("bad tag");
-               object = parse_object(tag->tagged->sha1);
+               object = parse_object(tag->tagged->oid.hash);
                if (!object) {
                        if (flags & UNINTERESTING)
                                return NULL;
-                       die("bad object %s", sha1_to_hex(tag->tagged->sha1));
+                       die("bad object %s", oid_to_hex(&tag->tagged->oid));
                }
                object->flags |= flags;
                /*
@@ -510,7 +510,7 @@ static int rev_compare_tree(struct rev_info *revs,
 
        tree_difference = REV_TREE_SAME;
        DIFF_OPT_CLR(&revs->pruning, HAS_CHANGES);
-       if (diff_tree_sha1(t1->object.sha1, t2->object.sha1, "",
+       if (diff_tree_sha1(t1->object.oid.hash, t2->object.oid.hash, "",
                           &revs->pruning) < 0)
                return REV_TREE_DIFFERENT;
        return tree_difference;
@@ -526,7 +526,7 @@ static int rev_same_tree_as_empty(struct rev_info *revs, struct commit *commit)
 
        tree_difference = REV_TREE_SAME;
        DIFF_OPT_CLR(&revs->pruning, HAS_CHANGES);
-       retval = diff_tree_sha1(NULL, t1->object.sha1, "", &revs->pruning);
+       retval = diff_tree_sha1(NULL, t1->object.oid.hash, "", &revs->pruning);
 
        return retval >= 0 && (tree_difference == REV_TREE_SAME);
 }
@@ -610,7 +610,7 @@ static unsigned update_treesame(struct rev_info *revs, struct commit *commit)
 
                st = lookup_decoration(&revs->treesame, &commit->object);
                if (!st)
-                       die("update_treesame %s", sha1_to_hex(commit->object.sha1));
+                       die("update_treesame %s", oid_to_hex(&commit->object.oid));
                relevant_parents = 0;
                relevant_change = irrelevant_change = 0;
                for (p = commit->parents, n = 0; p; n++, p = p->next) {
@@ -708,8 +708,8 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit)
                }
                if (parse_commit(p) < 0)
                        die("cannot simplify commit %s (because of %s)",
-                           sha1_to_hex(commit->object.sha1),
-                           sha1_to_hex(p->object.sha1));
+                           oid_to_hex(&commit->object.oid),
+                           oid_to_hex(&p->object.oid));
                switch (rev_compare_tree(revs, p, commit)) {
                case REV_TREE_SAME:
                        if (!revs->simplify_history || !relevant_commit(p)) {
@@ -741,8 +741,8 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit)
                                 */
                                if (parse_commit(p) < 0)
                                        die("cannot simplify commit %s (invalid %s)",
-                                           sha1_to_hex(commit->object.sha1),
-                                           sha1_to_hex(p->object.sha1));
+                                           oid_to_hex(&commit->object.oid),
+                                           oid_to_hex(&p->object.oid));
                                p->parents = NULL;
                        }
                /* fallthrough */
@@ -754,7 +754,7 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit)
                                irrelevant_change = 1;
                        continue;
                }
-               die("bad tree compare for commit %s", sha1_to_hex(commit->object.sha1));
+               die("bad tree compare for commit %s", oid_to_hex(&commit->object.oid));
        }
 
        /*
@@ -1189,7 +1189,7 @@ static void add_rev_cmdline_list(struct rev_info *revs,
 {
        while (commit_list) {
                struct object *object = &commit_list->item->object;
-               add_rev_cmdline(revs, object, sha1_to_hex(object->sha1),
+               add_rev_cmdline(revs, object, oid_to_hex(&object->oid),
                                whence, flags);
                commit_list = commit_list->next;
        }
@@ -1378,7 +1378,7 @@ static int add_parents_only(struct rev_info *revs, const char *arg_, int flags)
                        break;
                if (!((struct tag*)it)->tagged)
                        return 0;
-               hashcpy(sha1, ((struct tag*)it)->tagged->sha1);
+               hashcpy(sha1, ((struct tag*)it)->tagged->oid.hash);
        }
        if (it->type != OBJ_COMMIT)
                return 0;
@@ -1435,7 +1435,7 @@ static void add_pending_commit_list(struct rev_info *revs,
        while (commit_list) {
                struct object *object = &commit_list->item->object;
                object->flags |= flags;
-               add_pending_object(revs, object, sha1_to_hex(object->sha1));
+               add_pending_object(revs, object, oid_to_hex(&object->oid));
                commit_list = commit_list->next;
        }
 }
@@ -1555,10 +1555,10 @@ int handle_revision_arg(const char *arg_, struct rev_info *revs, int flags, unsi
 
                                a = (a_obj->type == OBJ_COMMIT
                                     ? (struct commit *)a_obj
-                                    : lookup_commit_reference(a_obj->sha1));
+                                    : lookup_commit_reference(a_obj->oid.hash));
                                b = (b_obj->type == OBJ_COMMIT
                                     ? (struct commit *)b_obj
-                                    : lookup_commit_reference(b_obj->sha1));
+                                    : lookup_commit_reference(b_obj->oid.hash));
                                if (!a || !b)
                                        goto missing;
                                exclude = get_merge_bases(a, b);
@@ -2938,7 +2938,7 @@ static int commit_match(struct commit *commit, struct rev_info *opt)
        if (opt->show_notes) {
                if (!buf.len)
                        strbuf_addstr(&buf, message);
-               format_display_notes(commit->object.sha1, &buf, encoding, 1);
+               format_display_notes(commit->object.oid.hash, &buf, encoding, 1);
        }
 
        /*
@@ -2968,7 +2968,7 @@ enum commit_action get_commit_action(struct rev_info *revs, struct commit *commi
 {
        if (commit->object.flags & SHOWN)
                return commit_ignore;
-       if (revs->unpacked && has_sha1_pack(commit->object.sha1))
+       if (revs->unpacked && has_sha1_pack(commit->object.oid.hash))
                return commit_ignore;
        if (revs->show_all)
                return commit_show;
@@ -3094,7 +3094,7 @@ static void track_linear(struct rev_info *revs, struct commit *commit)
                struct commit_list *p;
                for (p = revs->previous_parents; p; p = p->next)
                        if (p->item == NULL || /* first commit */
-                           !hashcmp(p->item->object.sha1, commit->object.sha1))
+                           !oidcmp(&p->item->object.oid, &commit->object.oid))
                                break;
                revs->linear = p != NULL;
        }
@@ -3132,7 +3132,7 @@ static struct commit *get_revision_1(struct rev_info *revs)
                        if (add_parents_to_list(revs, commit, &revs->commits, NULL) < 0) {
                                if (!revs->ignore_missing_links)
                                        die("Failed to traverse parents of commit %s",
-                                               sha1_to_hex(commit->object.sha1));
+                                               oid_to_hex(&commit->object.oid));
                        }
                }
 
@@ -3141,7 +3141,7 @@ static struct commit *get_revision_1(struct rev_info *revs)
                        continue;
                case commit_error:
                        die("Failed to simplify parents of commit %s",
-                           sha1_to_hex(commit->object.sha1));
+                           oid_to_hex(&commit->object.oid));
                default:
                        if (revs->track_linear)
                                track_linear(revs, commit);
index c6a40307381257c070714c778ea9d96f4c676387..047bd18fde3d09921902ebb656ab78bfbcf940a8 100644 (file)
@@ -102,11 +102,11 @@ static int pack_objects(int fd, struct ref *refs, struct sha1_array *extra, stru
                        break;
 
        while (refs) {
-               if (!is_null_sha1(refs->old_sha1) &&
-                   !feed_object(refs->old_sha1, po.in, 1))
+               if (!is_null_oid(&refs->old_oid) &&
+                   !feed_object(refs->old_oid.hash, po.in, 1))
                        break;
-               if (!is_null_sha1(refs->new_sha1) &&
-                   !feed_object(refs->new_sha1, po.in, 0))
+               if (!is_null_oid(&refs->new_oid) &&
+                   !feed_object(refs->new_oid.hash, po.in, 0))
                        break;
                refs = refs->next;
        }
@@ -284,8 +284,8 @@ static int generate_push_cert(struct strbuf *req_buf,
                        continue;
                update_seen = 1;
                strbuf_addf(&cert, "%s %s %s\n",
-                           sha1_to_hex(ref->old_sha1),
-                           sha1_to_hex(ref->new_sha1),
+                           oid_to_hex(&ref->old_oid),
+                           oid_to_hex(&ref->new_oid),
                            ref->name);
        }
        if (!update_seen)
@@ -487,8 +487,8 @@ int send_pack(struct send_pack_args *args,
                if (check_to_send_update(ref, args) < 0)
                        continue;
 
-               old_hex = sha1_to_hex(ref->old_sha1);
-               new_hex = sha1_to_hex(ref->new_sha1);
+               old_hex = oid_to_hex(&ref->old_oid);
+               new_hex = oid_to_hex(&ref->new_oid);
                if (!cmds_sent) {
                        packet_buf_write(&req_buf,
                                         "%s %s %s%c%s",
index a0600aebcadb81e67921d953e8ed626d08529a9b..8c58fa2f4ddaaadb09a63ef5a1937b4282ed988a 100644 (file)
@@ -139,7 +139,7 @@ static int get_message(struct commit *commit, struct commit_message *out)
                git_commit_encoding = "UTF-8";
 
        out->message = logmsg_reencode(commit, NULL, git_commit_encoding);
-       abbrev = find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV);
+       abbrev = find_unique_abbrev(commit->object.oid.hash, DEFAULT_ABBREV);
        abbrev_len = strlen(abbrev);
 
        subject_len = find_commit_subject(out->message, &subject);
@@ -346,7 +346,7 @@ static int is_index_unchanged(void)
                if (cache_tree_update(&the_index, 0))
                        return error(_("Unable to update cache tree\n"));
 
-       return !hashcmp(active_cache_tree->sha1, head_commit->tree->object.sha1);
+       return !hashcmp(active_cache_tree->sha1, head_commit->tree->object.oid.hash);
 }
 
 /*
@@ -397,18 +397,18 @@ static int is_original_commit_empty(struct commit *commit)
 
        if (parse_commit(commit))
                return error(_("Could not parse commit %s\n"),
-                            sha1_to_hex(commit->object.sha1));
+                            oid_to_hex(&commit->object.oid));
        if (commit->parents) {
                struct commit *parent = commit->parents->item;
                if (parse_commit(parent))
                        return error(_("Could not parse parent commit %s\n"),
-                               sha1_to_hex(parent->object.sha1));
-               ptree_sha1 = parent->tree->object.sha1;
+                               oid_to_hex(&parent->object.oid));
+               ptree_sha1 = parent->tree->object.oid.hash;
        } else {
                ptree_sha1 = EMPTY_TREE_SHA1_BIN; /* commit is root */
        }
 
-       return !hashcmp(ptree_sha1, commit->tree->object.sha1);
+       return !hashcmp(ptree_sha1, commit->tree->object.oid.hash);
 }
 
 /*
@@ -486,7 +486,7 @@ static int do_pick_commit(struct commit *commit, struct replay_opts *opts)
 
                if (!opts->mainline)
                        return error(_("Commit %s is a merge but no -m option was given."),
-                               sha1_to_hex(commit->object.sha1));
+                               oid_to_hex(&commit->object.oid));
 
                for (cnt = 1, p = commit->parents;
                     cnt != opts->mainline && p;
@@ -494,28 +494,28 @@ static int do_pick_commit(struct commit *commit, struct replay_opts *opts)
                        p = p->next;
                if (cnt != opts->mainline || !p)
                        return error(_("Commit %s does not have parent %d"),
-                               sha1_to_hex(commit->object.sha1), opts->mainline);
+                               oid_to_hex(&commit->object.oid), opts->mainline);
                parent = p->item;
        } else if (0 < opts->mainline)
                return error(_("Mainline was specified but commit %s is not a merge."),
-                       sha1_to_hex(commit->object.sha1));
+                       oid_to_hex(&commit->object.oid));
        else
                parent = commit->parents->item;
 
        if (opts->allow_ff &&
-           ((parent && !hashcmp(parent->object.sha1, head)) ||
+           ((parent && !hashcmp(parent->object.oid.hash, head)) ||
             (!parent && unborn)))
-               return fast_forward_to(commit->object.sha1, head, unborn, opts);
+               return fast_forward_to(commit->object.oid.hash, head, unborn, opts);
 
        if (parent && parse_commit(parent) < 0)
                /* TRANSLATORS: The first %s will be "revert" or
                   "cherry-pick", the second %s a SHA1 */
                return error(_("%s: cannot parse parent commit %s"),
-                       action_name(opts), sha1_to_hex(parent->object.sha1));
+                       action_name(opts), oid_to_hex(&parent->object.oid));
 
        if (get_message(commit, &msg) != 0)
                return error(_("Cannot get commit message for %s"),
-                       sha1_to_hex(commit->object.sha1));
+                       oid_to_hex(&commit->object.oid));
 
        /*
         * "commit" is an existing commit.  We would want to apply
@@ -532,11 +532,11 @@ static int do_pick_commit(struct commit *commit, struct replay_opts *opts)
                strbuf_addstr(&msgbuf, "Revert \"");
                strbuf_addstr(&msgbuf, msg.subject);
                strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
-               strbuf_addstr(&msgbuf, sha1_to_hex(commit->object.sha1));
+               strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
 
                if (commit->parents && commit->parents->next) {
                        strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
-                       strbuf_addstr(&msgbuf, sha1_to_hex(parent->object.sha1));
+                       strbuf_addstr(&msgbuf, oid_to_hex(&parent->object.oid));
                }
                strbuf_addstr(&msgbuf, ".\n");
        } else {
@@ -562,7 +562,7 @@ static int do_pick_commit(struct commit *commit, struct replay_opts *opts)
                        if (!has_conforming_footer(&msgbuf, NULL, 0))
                                strbuf_addch(&msgbuf, '\n');
                        strbuf_addstr(&msgbuf, cherry_picked_prefix);
-                       strbuf_addstr(&msgbuf, sha1_to_hex(commit->object.sha1));
+                       strbuf_addstr(&msgbuf, oid_to_hex(&commit->object.oid));
                        strbuf_addstr(&msgbuf, ")\n");
                }
        }
@@ -592,17 +592,17 @@ static int do_pick_commit(struct commit *commit, struct replay_opts *opts)
         * write it at all.
         */
        if (opts->action == REPLAY_PICK && !opts->no_commit && (res == 0 || res == 1))
-               update_ref(NULL, "CHERRY_PICK_HEAD", commit->object.sha1, NULL,
+               update_ref(NULL, "CHERRY_PICK_HEAD", commit->object.oid.hash, NULL,
                           REF_NODEREF, UPDATE_REFS_DIE_ON_ERR);
        if (opts->action == REPLAY_REVERT && ((opts->no_commit && res == 0) || res == 1))
-               update_ref(NULL, "REVERT_HEAD", commit->object.sha1, NULL,
+               update_ref(NULL, "REVERT_HEAD", commit->object.oid.hash, NULL,
                           REF_NODEREF, UPDATE_REFS_DIE_ON_ERR);
 
        if (res) {
                error(opts->action == REPLAY_REVERT
                      ? _("could not revert %s... %s")
                      : _("could not apply %s... %s"),
-                     find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV),
+                     find_unique_abbrev(commit->object.oid.hash, DEFAULT_ABBREV),
                      msg.subject);
                print_advice(res == 1, opts);
                rerere(opts->allow_rerere_auto);
@@ -664,7 +664,7 @@ static int format_todo(struct strbuf *buf, struct commit_list *todo_list,
 
        for (cur = todo_list; cur; cur = cur->next) {
                const char *commit_buffer = get_commit_buffer(cur->item, NULL);
-               sha1_abbrev = find_unique_abbrev(cur->item->object.sha1, DEFAULT_ABBREV);
+               sha1_abbrev = find_unique_abbrev(cur->item->object.oid.hash, DEFAULT_ABBREV);
                subject_len = find_commit_subject(commit_buffer, &subject);
                strbuf_addf(buf, "%s %s %.*s\n", action_str, sha1_abbrev,
                        subject_len, subject);
index c82e9ee3964a17b23809c28d7cd14961e3e61d87..5a86e297b51261b5f1ae9fa6dad6fa7dc86cd4ba 100644 (file)
@@ -62,7 +62,7 @@ static int add_info_ref(const char *path, const struct object_id *oid,
                o = deref_tag(o, path, 0);
                if (o)
                        if (fprintf(fp, "%s     %s^{}\n",
-                               sha1_to_hex(o->sha1), path) < 0)
+                               oid_to_hex(&o->oid), path) < 0)
                                return -1;
        }
        return 0;
index 3d56746a9be12e78c2b5262948bd411acf3230a2..27ce7b705e12ca0343a4a232788494e5dee518d5 100644 (file)
@@ -3216,6 +3216,11 @@ int has_sha1_file_with_flags(const unsigned char *sha1, int flags)
        return find_pack_entry(sha1, &e);
 }
 
+int has_object_file(const struct object_id *oid)
+{
+       return has_sha1_file(oid->hash);
+}
+
 static void check_tree(const void *buf, size_t size)
 {
        struct tree_desc desc;
index 3242c5ea462ce246bbc1b90c4aeb2183b2bcbecb..892db21813bc484628e940274e742d103629b0ed 100644 (file)
@@ -616,13 +616,13 @@ static int get_parent(const char *name, int len,
        if (parse_commit(commit))
                return -1;
        if (!idx) {
-               hashcpy(result, commit->object.sha1);
+               hashcpy(result, commit->object.oid.hash);
                return 0;
        }
        p = commit->parents;
        while (p) {
                if (!--idx) {
-                       hashcpy(result, p->item->object.sha1);
+                       hashcpy(result, p->item->object.oid.hash);
                        return 0;
                }
                p = p->next;
@@ -649,7 +649,7 @@ static int get_nth_ancestor(const char *name, int len,
                        return -1;
                commit = commit->parents->item;
        }
-       hashcpy(result, commit->object.sha1);
+       hashcpy(result, commit->object.oid.hash);
        return 0;
 }
 
@@ -659,7 +659,7 @@ struct object *peel_to_type(const char *name, int namelen,
        if (name && !namelen)
                namelen = strlen(name);
        while (1) {
-               if (!o || (!o->parsed && !parse_object(o->sha1)))
+               if (!o || (!o->parsed && !parse_object(o->oid.hash)))
                        return NULL;
                if (expected_type == OBJ_ANY || o->type == expected_type)
                        return o;
@@ -736,9 +736,9 @@ static int peel_onion(const char *name, int len, unsigned char *sha1)
                return -1;
        if (!expected_type) {
                o = deref_tag(o, name, sp - name - 2);
-               if (!o || (!o->parsed && !parse_object(o->sha1)))
+               if (!o || (!o->parsed && !parse_object(o->oid.hash)))
                        return -1;
-               hashcpy(sha1, o->sha1);
+               hashcpy(sha1, o->oid.hash);
                return 0;
        }
 
@@ -751,7 +751,7 @@ static int peel_onion(const char *name, int len, unsigned char *sha1)
        if (!o)
                return -1;
 
-       hashcpy(sha1, o->sha1);
+       hashcpy(sha1, o->oid.hash);
        if (sp[0] == '/') {
                /* "$commit^{/foo}" */
                char *prefix;
@@ -899,7 +899,7 @@ static int get_sha1_oneline(const char *prefix, unsigned char *sha1,
                int matches;
 
                commit = pop_most_recent_commit(&list, ONELINE_SEEN);
-               if (!parse_object(commit->object.sha1))
+               if (!parse_object(commit->object.oid.hash))
                        continue;
                buf = get_commit_buffer(commit, NULL);
                p = strstr(buf, "\n\n");
@@ -907,7 +907,7 @@ static int get_sha1_oneline(const char *prefix, unsigned char *sha1,
                unuse_commit_buffer(commit, buf);
 
                if (matches) {
-                       hashcpy(sha1, commit->object.sha1);
+                       hashcpy(sha1, commit->object.oid.hash);
                        found = 1;
                        break;
                }
@@ -1022,7 +1022,7 @@ int get_sha1_mb(const char *name, unsigned char *sha1)
                st = -1;
        else {
                st = 0;
-               hashcpy(sha1, mbs->item->object.sha1);
+               hashcpy(sha1, mbs->item->object.oid.hash);
        }
        free_commit_list(mbs);
        return st;
index 46be7897794ab8e350d64f00d3c11390fe993ad8..60f1505d9791bc92a283d02183da35e7542ad2dc 100644 (file)
--- a/shallow.c
+++ b/shallow.c
@@ -105,7 +105,7 @@ struct commit_list *get_shallow_commits(struct object_array *heads, int depth,
                cur_depth++;
                if ((depth != INFINITE_DEPTH && cur_depth >= depth) ||
                    (is_repository_shallow() && !commit->parents &&
-                    (graft = lookup_commit_graft(commit->object.sha1)) != NULL &&
+                    (graft = lookup_commit_graft(commit->object.oid.hash)) != NULL &&
                     graft->nr_parent < 0)) {
                        commit_list_insert(commit, &result);
                        commit->object.flags |= shallow_flag;
@@ -167,7 +167,7 @@ static int write_one_shallow(const struct commit_graft *graft, void *cb_data)
                if (!c || !(c->object.flags & SEEN)) {
                        if (data->flags & VERBOSE)
                                printf("Removing %s from .git/shallow\n",
-                                      sha1_to_hex(c->object.sha1));
+                                      oid_to_hex(&c->object.oid));
                        return 0;
                }
        }
@@ -426,7 +426,7 @@ static void paint_down(struct paint_info *info, const unsigned char *sha1,
 
                if (parse_commit(c))
                        die("unable to parse commit %s",
-                           sha1_to_hex(c->object.sha1));
+                           oid_to_hex(&c->object.oid));
 
                for (p = c->parents; p; p = p->next) {
                        uint32_t **p_refs = ref_bitmap_at(&info->ref_bitmap,
index 88af54c633851d440f46e21d65b1362b6360d2bb..14e76247bf107da916cf100b8078cf10238e6b76 100644 (file)
@@ -249,7 +249,7 @@ static int prepare_submodule_summary(struct rev_info *rev, const char *path,
        for (list = merge_bases; list; list = list->next) {
                list->item->object.flags |= UNINTERESTING;
                add_pending_object(rev, &list->item->object,
-                       sha1_to_hex(list->item->object.sha1));
+                       oid_to_hex(&list->item->object.oid));
        }
        return prepare_revision_walk(rev);
 }
@@ -597,7 +597,7 @@ static void calculate_changed_submodule_paths(void)
                        diff_opts.output_format |= DIFF_FORMAT_CALLBACK;
                        diff_opts.format_callback = submodule_collect_changed_cb;
                        diff_setup_done(&diff_opts);
-                       diff_tree_sha1(parent->item->object.sha1, commit->object.sha1, "", &diff_opts);
+                       diff_tree_sha1(parent->item->object.oid.hash, commit->object.oid.hash, "", &diff_opts);
                        diffcore_std(&diff_opts);
                        diff_flush(&diff_opts);
                        parent = parent->next;
@@ -875,7 +875,7 @@ static int find_first_merges(struct object_array *result, const char *path,
 
        /* get all revisions that merge commit a */
        snprintf(merged_revision, sizeof(merged_revision), "^%s",
-                       sha1_to_hex(a->object.sha1));
+                       oid_to_hex(&a->object.oid));
        init_revisions(&revs, NULL);
        rev_opts.submodule = path;
        setup_revisions(ARRAY_SIZE(rev_args)-1, rev_args, &revs, &rev_opts);
@@ -1006,7 +1006,7 @@ int merge_submodule(unsigned char result[20], const char *path,
                        "by using:\n\n"
                        "  git update-index --cacheinfo 160000 %s \"%s\"\n\n"
                        "which will accept this suggestion.\n",
-                       sha1_to_hex(merges.objects[0].item->sha1), path);
+                       oid_to_hex(&merges.objects[0].item->oid), path);
                break;
 
        default:
diff --git a/tag.c b/tag.c
index 5b2a06d92b75c7aea3f8cfb1cadb33d9da27f3c6..d72f742af9a4a6a76c8b0f6fd314473dea244b2a 100644 (file)
--- a/tag.c
+++ b/tag.c
@@ -10,7 +10,7 @@ struct object *deref_tag(struct object *o, const char *warn, int warnlen)
 {
        while (o && o->type == OBJ_TAG)
                if (((struct tag *)o)->tagged)
-                       o = parse_object(((struct tag *)o)->tagged->sha1);
+                       o = parse_object(((struct tag *)o)->tagged->oid.hash);
                else
                        o = NULL;
        if (!o && warn) {
@@ -24,7 +24,7 @@ struct object *deref_tag(struct object *o, const char *warn, int warnlen)
 struct object *deref_tag_noverify(struct object *o)
 {
        while (o && o->type == OBJ_TAG) {
-               o = parse_object(o->sha1);
+               o = parse_object(o->oid.hash);
                if (o && o->type == OBJ_TAG && ((struct tag *)o)->tagged)
                        o = ((struct tag *)o)->tagged;
                else
@@ -127,14 +127,14 @@ int parse_tag(struct tag *item)
 
        if (item->object.parsed)
                return 0;
-       data = read_sha1_file(item->object.sha1, &type, &size);
+       data = read_sha1_file(item->object.oid.hash, &type, &size);
        if (!data)
                return error("Could not read %s",
-                            sha1_to_hex(item->object.sha1));
+                            oid_to_hex(&item->object.oid));
        if (type != OBJ_TAG) {
                free(data);
                return error("Object %s not a tag",
-                            sha1_to_hex(item->object.sha1));
+                            oid_to_hex(&item->object.oid));
        }
        ret = parse_tag_buffer(item, data, size);
        free(data);
index 2ef725e5ff94c4db59fdc4b389ee2399854cb83b..109f03e711803251b5b5d06bc42579784a326ba8 100644 (file)
@@ -17,7 +17,7 @@ int main(int ac, char **av)
        if (!two)
                die("not a tree-ish %s", av[2]);
 
-       shift_tree(one->object.sha1, two->object.sha1, shifted, -1);
+       shift_tree(one->object.oid.hash, two->object.oid.hash, shifted, -1);
        printf("shifted: %s\n", sha1_to_hex(shifted));
 
        exit(0);
index 63d54271b09d34dc21076205e6cecf88a56ab422..0eb3cf01aa1da857c7340805971e63305d73a6ea 100644 (file)
@@ -346,7 +346,7 @@ static int fetch_with_fetch(struct transport *transport,
                        continue;
 
                strbuf_addf(&buf, "fetch %s %s\n",
-                           sha1_to_hex(posn->old_sha1),
+                           oid_to_hex(&posn->old_oid),
                            posn->symref ? posn->symref : posn->name);
        }
 
@@ -489,7 +489,7 @@ static int fetch_with_import(struct transport *transport,
                else
                        private = xstrdup(name);
                if (private) {
-                       if (read_ref(private, posn->old_sha1) < 0)
+                       if (read_ref(private, posn->old_oid.hash) < 0)
                                die("Could not read ref %s", private);
                        free(private);
                }
@@ -756,7 +756,7 @@ static int push_update_refs_status(struct helper_data *data,
                private = apply_refspecs(data->refspecs, data->refspec_nr, ref->name);
                if (!private)
                        continue;
-               update_ref("update by helper", private, ref->new_sha1, NULL, 0, 0);
+               update_ref("update by helper", private, ref->new_oid.hash, NULL, 0, 0);
                free(private);
        }
        strbuf_release(&buf);
@@ -818,7 +818,7 @@ static int push_refs_with_push(struct transport *transport,
                        if (ref->peer_ref)
                                strbuf_addstr(&buf, ref->peer_ref->name);
                        else
-                               strbuf_addstr(&buf, sha1_to_hex(ref->new_sha1));
+                               strbuf_addstr(&buf, oid_to_hex(&ref->new_oid));
                }
                strbuf_addch(&buf, ':');
                strbuf_addstr(&buf, ref->name);
@@ -827,14 +827,14 @@ static int push_refs_with_push(struct transport *transport,
                /*
                 * The "--force-with-lease" options without explicit
                 * values to expect have already been expanded into
-                * the ref->old_sha1_expect[] field; we can ignore
+                * the ref->old_oid_expect[] field; we can ignore
                 * transport->smart_options->cas altogether and instead
                 * can enumerate them from the refs.
                 */
                if (ref->expect_old_sha1) {
                        struct strbuf cas = STRBUF_INIT;
                        strbuf_addf(&cas, "%s:%s",
-                                   ref->name, sha1_to_hex(ref->old_sha1_expect));
+                                   ref->name, oid_to_hex(&ref->old_oid_expect));
                        string_list_append(&cas_options, strbuf_detach(&cas, NULL));
                }
        }
@@ -878,13 +878,13 @@ static int push_refs_with_export(struct transport *transport,
 
        for (ref = remote_refs; ref; ref = ref->next) {
                char *private;
-               unsigned char sha1[20];
+               struct object_id oid;
 
                private = apply_refspecs(data->refspecs, data->refspec_nr, ref->name);
-               if (private && !get_sha1(private, sha1)) {
+               if (private && !get_sha1(private, oid.hash)) {
                        strbuf_addf(&buf, "^%s", private);
                        string_list_append(&revlist_args, strbuf_detach(&buf, NULL));
-                       hashcpy(ref->old_sha1, sha1);
+                       oidcpy(&ref->old_oid, &oid);
                }
                free(private);
 
@@ -898,7 +898,7 @@ static int push_refs_with_export(struct transport *transport,
                                        name = resolve_ref_unsafe(
                                                 ref->peer_ref->name,
                                                 RESOLVE_REF_READING,
-                                                sha1, &flag);
+                                                oid.hash, &flag);
                                        if (!name || !(flag & REF_ISSYMREF))
                                                name = ref->peer_ref->name;
 
@@ -1016,12 +1016,12 @@ static struct ref *get_refs_list(struct transport *transport, int for_push)
                if (buf.buf[0] == '@')
                        (*tail)->symref = xstrdup(buf.buf + 1);
                else if (buf.buf[0] != '?')
-                       get_sha1_hex(buf.buf, (*tail)->old_sha1);
+                       get_oid_hex(buf.buf, &(*tail)->old_oid);
                if (eon) {
                        if (has_attribute(eon + 1, "unchanged")) {
                                (*tail)->status |= REF_STATUS_UPTODATE;
                                if (read_ref((*tail)->name,
-                                            (*tail)->old_sha1) < 0)
+                                            (*tail)->old_oid.hash) < 0)
                                        die(N_("Could not read ref %s"),
                                            (*tail)->name);
                        }
index e34ab929729ad1b69cde22544e44b48b715cb984..67f366687c7abf2f6bd9cf31faa6f4ed9e6dc69e 100644 (file)
@@ -80,7 +80,7 @@ static int read_loose_refs(struct strbuf *path, int name_offset,
                                continue;
                        next = alloc_ref(path->buf + name_offset);
                        if (read_in_full(fd, buffer, 40) != 40 ||
-                                       get_sha1_hex(buffer, next->old_sha1)) {
+                                       get_oid_hex(buffer, &next->old_oid)) {
                                close(fd);
                                free(next);
                                continue;
@@ -132,7 +132,7 @@ static void insert_packed_refs(const char *packed_refs, struct ref **list)
                if (!(*list)->next || cmp < 0) {
                        struct ref *next = alloc_ref(buffer + 41);
                        buffer[40] = '\0';
-                       if (get_sha1_hex(buffer, next->old_sha1)) {
+                       if (get_oid_hex(buffer, &next->old_oid)) {
                                warning ("invalid SHA-1: %s", buffer);
                                free(next);
                                continue;
@@ -163,7 +163,7 @@ static void set_upstreams(struct transport *transport, struct ref *refs,
                        continue;
                if (!ref->peer_ref)
                        continue;
-               if (is_null_sha1(ref->new_sha1))
+               if (is_null_oid(&ref->new_oid))
                        continue;
 
                /* Follow symbolic refs (mainly for HEAD). */
@@ -413,7 +413,7 @@ static struct ref *get_refs_from_bundle(struct transport *transport, int for_pus
        for (i = 0; i < data->header.references.nr; i++) {
                struct ref_list_entry *e = data->header.references.list + i;
                struct ref *ref = alloc_ref(e->name);
-               hashcpy(ref->old_sha1, e->sha1);
+               hashcpy(ref->old_oid.hash, e->sha1);
                ref->next = result;
                result = ref;
        }
@@ -609,7 +609,7 @@ void transport_update_tracking_ref(struct remote *remote, struct ref *ref, int v
                        delete_ref(rs.dst, NULL, 0);
                } else
                        update_ref("update by push", rs.dst,
-                                       ref->new_sha1, NULL, 0, 0);
+                                       ref->new_oid.hash, NULL, 0, 0);
                free(rs.dst);
        }
 }
@@ -649,7 +649,7 @@ static void print_ok_ref_status(struct ref *ref, int porcelain)
 {
        if (ref->deletion)
                print_ref_status('-', "[deleted]", ref, NULL, NULL, porcelain);
-       else if (is_null_sha1(ref->old_sha1))
+       else if (is_null_oid(&ref->old_oid))
                print_ref_status('*',
                        (starts_with(ref->name, "refs/tags/") ? "[new tag]" :
                        "[new branch]"),
@@ -659,7 +659,7 @@ static void print_ok_ref_status(struct ref *ref, int porcelain)
                char type;
                const char *msg;
 
-               strbuf_addstr(&quickref, status_abbrev(ref->old_sha1));
+               strbuf_addstr(&quickref, status_abbrev(ref->old_oid.hash));
                if (ref->forced_update) {
                        strbuf_addstr(&quickref, "...");
                        type = '+';
@@ -669,7 +669,7 @@ static void print_ok_ref_status(struct ref *ref, int porcelain)
                        type = ' ';
                        msg = NULL;
                }
-               strbuf_addstr(&quickref, status_abbrev(ref->new_sha1));
+               strbuf_addstr(&quickref, status_abbrev(ref->new_oid.hash));
 
                print_ref_status(type, quickref.buf, ref, ref->peer_ref, msg, porcelain);
                strbuf_release(&quickref);
@@ -1140,8 +1140,8 @@ static int run_pre_push_hook(struct transport *transport,
 
                strbuf_reset(&buf);
                strbuf_addf( &buf, "%s %s %s %s\n",
-                        r->peer_ref->name, sha1_to_hex(r->new_sha1),
-                        r->name, sha1_to_hex(r->old_sha1));
+                        r->peer_ref->name, oid_to_hex(&r->new_oid),
+                        r->name, oid_to_hex(&r->old_oid));
 
                if (write_in_full(proc.in, buf.buf, buf.len) < 0) {
                        /* We do not mind if a hook does not read all refs. */
@@ -1225,8 +1225,8 @@ int transport_push(struct transport *transport,
                if ((flags & TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND) && !is_bare_repository()) {
                        struct ref *ref = remote_refs;
                        for (; ref; ref = ref->next)
-                               if (!is_null_sha1(ref->new_sha1) &&
-                                   !push_unpushed_submodules(ref->new_sha1,
+                               if (!is_null_oid(&ref->new_oid) &&
+                                   !push_unpushed_submodules(ref->new_oid.hash,
                                            transport->remote->name))
                                    die ("Failed to push all needed submodules!");
                }
@@ -1237,8 +1237,8 @@ int transport_push(struct transport *transport,
                        struct string_list needs_pushing = STRING_LIST_INIT_DUP;
 
                        for (; ref; ref = ref->next)
-                               if (!is_null_sha1(ref->new_sha1) &&
-                                   find_unpushed_submodules(ref->new_sha1,
+                               if (!is_null_oid(&ref->new_oid) &&
+                                   find_unpushed_submodules(ref->new_oid.hash,
                                            transport->remote->name, &needs_pushing))
                                        die_with_unpushed_submodules(&needs_pushing);
                }
@@ -1291,8 +1291,8 @@ int transport_fetch_refs(struct transport *transport, struct ref *refs)
        for (rm = refs; rm; rm = rm->next) {
                nr_refs++;
                if (rm->peer_ref &&
-                   !is_null_sha1(rm->old_sha1) &&
-                   !hashcmp(rm->peer_ref->old_sha1, rm->old_sha1))
+                   !is_null_oid(&rm->old_oid) &&
+                   !oidcmp(&rm->peer_ref->old_oid, &rm->old_oid))
                        continue;
                ALLOC_GROW(heads, nr_heads + 1, nr_alloc);
                heads[nr_heads++] = rm;
index 4336dd33eb301306ff2a57c4c2c4f8c45d61fc50..8ebaaf2cae054bcdfea491fc464f8bf3180b1e03 100644 (file)
@@ -74,15 +74,15 @@ struct transport {
        /**
         * Push the objects and refs. Send the necessary objects, and
         * then, for any refs where peer_ref is set and
-        * peer_ref->new_sha1 is different from old_sha1, tell the
-        * remote side to update each ref in the list from old_sha1 to
-        * peer_ref->new_sha1.
+        * peer_ref->new_oid is different from old_oid, tell the
+        * remote side to update each ref in the list from old_oid to
+        * peer_ref->new_oid.
         *
         * Where possible, set the status for each ref appropriately.
         *
         * The transport must modify new_sha1 in the ref to the new
         * value if the remote accepted the change. Note that this
-        * could be a different value from peer_ref->new_sha1 if the
+        * could be a different value from peer_ref->new_oid if the
         * process involved generating new commits.
         **/
        int (*push_refs)(struct transport *transport, struct ref *refs, int flags);
diff --git a/tree.c b/tree.c
index 413a5b1fa617df2f407d32ffdf78e58d9c42de58..f79ff9813e37529cf7adbcda307027b0495cfb1c 100644 (file)
--- a/tree.c
+++ b/tree.c
@@ -102,7 +102,7 @@ static int read_tree_1(struct tree *tree, struct strbuf *base,
                                    sha1_to_hex(entry.sha1),
                                    base->buf, entry.path);
 
-                       hashcpy(sha1, commit->tree->object.sha1);
+                       hashcpy(sha1, commit->tree->object.oid.hash);
                }
                else
                        continue;
@@ -212,15 +212,15 @@ int parse_tree_gently(struct tree *item, int quiet_on_missing)
 
        if (item->object.parsed)
                return 0;
-       buffer = read_sha1_file(item->object.sha1, &type, &size);
+       buffer = read_sha1_file(item->object.oid.hash, &type, &size);
        if (!buffer)
                return quiet_on_missing ? -1 :
                        error("Could not read %s",
-                            sha1_to_hex(item->object.sha1));
+                            oid_to_hex(&item->object.oid));
        if (type != OBJ_TREE) {
                free(buffer);
                return error("Object %s not a tree",
-                            sha1_to_hex(item->object.sha1));
+                            oid_to_hex(&item->object.oid));
        }
        return parse_tree_buffer(item, buffer, size);
 }
@@ -248,6 +248,6 @@ struct tree *parse_tree_indirect(const unsigned char *sha1)
                else
                        return NULL;
                if (!obj->parsed)
-                       parse_object(obj->sha1);
+                       parse_object(obj->oid.hash);
        } while (1);
 }
index 08efb1de7b768fd128b4cc56c328acc33b7b009f..b3f6653ffda1a3d6d319752676511307d9cd032b 100644 (file)
@@ -130,14 +130,14 @@ static void create_pack_file(void)
 
        for (i = 0; i < want_obj.nr; i++)
                fprintf(pipe_fd, "%s\n",
-                       sha1_to_hex(want_obj.objects[i].item->sha1));
+                       oid_to_hex(&want_obj.objects[i].item->oid));
        fprintf(pipe_fd, "--not\n");
        for (i = 0; i < have_obj.nr; i++)
                fprintf(pipe_fd, "%s\n",
-                       sha1_to_hex(have_obj.objects[i].item->sha1));
+                       oid_to_hex(&have_obj.objects[i].item->oid));
        for (i = 0; i < extra_edge_obj.nr; i++)
                fprintf(pipe_fd, "%s\n",
-                       sha1_to_hex(extra_edge_obj.objects[i].item->sha1));
+                       oid_to_hex(&extra_edge_obj.objects[i].item->oid));
        fprintf(pipe_fd, "\n");
        fflush(pipe_fd);
        fclose(pipe_fd);
@@ -324,7 +324,7 @@ static int reachable(struct commit *want)
                        break;
                }
                if (!commit->object.parsed)
-                       parse_object(commit->object.sha1);
+                       parse_object(commit->object.oid.hash);
                if (commit->object.flags & REACHABLE)
                        continue;
                commit->object.flags |= REACHABLE;
@@ -491,7 +491,7 @@ static void check_non_tip(void)
                        continue;
                if (!is_our_ref(o))
                        continue;
-               memcpy(namebuf + 1, sha1_to_hex(o->sha1), 40);
+               memcpy(namebuf + 1, oid_to_hex(&o->oid), GIT_SHA1_HEXSZ);
                if (write_in_full(cmd.in, namebuf, 42) < 0)
                        goto error;
        }
@@ -500,7 +500,7 @@ static void check_non_tip(void)
                o = want_obj.objects[i].item;
                if (is_our_ref(o))
                        continue;
-               memcpy(namebuf, sha1_to_hex(o->sha1), 40);
+               memcpy(namebuf, oid_to_hex(&o->oid), GIT_SHA1_HEXSZ);
                if (write_in_full(cmd.in, namebuf, 41) < 0)
                        goto error;
        }
@@ -534,7 +534,7 @@ static void check_non_tip(void)
                o = want_obj.objects[i].item;
                if (!is_our_ref(o))
                        die("git upload-pack: not our ref %s",
-                           sha1_to_hex(o->sha1));
+                           oid_to_hex(&o->oid));
        }
 }
 
@@ -646,8 +646,8 @@ static void receive_needs(void)
                        struct object *object = &result->item->object;
                        if (!(object->flags & (CLIENT_SHALLOW|NOT_SHALLOW))) {
                                packet_write(1, "shallow %s",
-                                               sha1_to_hex(object->sha1));
-                               register_shallow(object->sha1);
+                                               oid_to_hex(&object->oid));
+                               register_shallow(object->oid.hash);
                                shallow_nr++;
                        }
                        result = result->next;
@@ -658,10 +658,10 @@ static void receive_needs(void)
                        if (object->flags & NOT_SHALLOW) {
                                struct commit_list *parents;
                                packet_write(1, "unshallow %s",
-                                       sha1_to_hex(object->sha1));
+                                       oid_to_hex(&object->oid));
                                object->flags &= ~CLIENT_SHALLOW;
                                /* make sure the real parents are parsed */
-                               unregister_shallow(object->sha1);
+                               unregister_shallow(object->oid.hash);
                                object->parsed = 0;
                                parse_commit_or_die((struct commit *)object);
                                parents = ((struct commit *)object)->parents;
@@ -673,14 +673,14 @@ static void receive_needs(void)
                                add_object_array(object, NULL, &extra_edge_obj);
                        }
                        /* make sure commit traversal conforms to client */
-                       register_shallow(object->sha1);
+                       register_shallow(object->oid.hash);
                }
                packet_flush(1);
        } else
                if (shallows.nr > 0) {
                        int i;
                        for (i = 0; i < shallows.nr; i++)
-                               register_shallow(shallows.objects[i].item->sha1);
+                               register_shallow(shallows.objects[i].item->oid.hash);
                }
 
        shallow_nr += shallows.nr;
index cdeb63f319abc088fe54e4291ed765900d16f1fd..7b7e72b1201850f0ba494f8fc23a5c7f0e46d3eb 100644 (file)
--- a/walker.c
+++ b/walker.c
@@ -19,7 +19,7 @@ static void report_missing(const struct object *obj)
 {
        fprintf(stderr, "Cannot obtain needed %s %s\n",
                obj->type ? typename(obj->type): "object",
-               sha1_to_hex(obj->sha1));
+               oid_to_hex(&obj->oid));
        if (!is_null_sha1(current_commit_sha1))
                fprintf(stderr, "while processing commit %s.\n",
                        sha1_to_hex(current_commit_sha1));
@@ -78,9 +78,9 @@ static int process_commit(struct walker *walker, struct commit *commit)
        if (commit->object.flags & COMPLETE)
                return 0;
 
-       hashcpy(current_commit_sha1, commit->object.sha1);
+       hashcpy(current_commit_sha1, commit->object.oid.hash);
 
-       walker_say(walker, "walk %s\n", sha1_to_hex(commit->object.sha1));
+       walker_say(walker, "walk %s\n", oid_to_hex(&commit->object.oid));
 
        if (walker->get_tree) {
                if (process(walker, &commit->tree->object))
@@ -130,7 +130,7 @@ static int process_object(struct walker *walker, struct object *obj)
        }
        return error("Unable to determine requirements "
                     "of type %s for %s",
-                    typename(obj->type), sha1_to_hex(obj->sha1));
+                    typename(obj->type), oid_to_hex(&obj->oid));
 }
 
 static int process(struct walker *walker, struct object *obj)
@@ -139,14 +139,14 @@ static int process(struct walker *walker, struct object *obj)
                return 0;
        obj->flags |= SEEN;
 
-       if (has_sha1_file(obj->sha1)) {
+       if (has_object_file(&obj->oid)) {
                /* We already have it, so we should scan it now. */
                obj->flags |= TO_SCAN;
        }
        else {
                if (obj->flags & COMPLETE)
                        return 0;
-               walker->prefetch(walker, obj->sha1);
+               walker->prefetch(walker, obj->oid.hash);
        }
 
        object_list_insert(obj, process_queue_end);
@@ -170,13 +170,13 @@ static int loop(struct walker *walker)
                 * the queue because we needed to fetch it first.
                 */
                if (! (obj->flags & TO_SCAN)) {
-                       if (walker->fetch(walker, obj->sha1)) {
+                       if (walker->fetch(walker, obj->oid.hash)) {
                                report_missing(obj);
                                return -1;
                        }
                }
                if (!obj->type)
-                       parse_object(obj->sha1);
+                       parse_object(obj->oid.hash);
                if (process_object(walker, obj))
                        return -1;
        }
@@ -190,7 +190,7 @@ static int interpret_target(struct walker *walker, char *target, unsigned char *
        if (!check_refname_format(target, 0)) {
                struct ref *ref = alloc_ref(target);
                if (!walker->fetch_ref(walker, ref)) {
-                       hashcpy(sha1, ref->old_sha1);
+                       hashcpy(sha1, ref->old_oid.hash);
                        free(ref);
                        return 0;
                }
index ced53dd1d49eb641f5505a8a75502e95de356c3c..bba25960b4e3c54a7c1d8861ea895fbe01aa3110 100644 (file)
@@ -1346,7 +1346,7 @@ static void wt_status_get_detached_from(struct wt_status_state *state)
            (!hashcmp(cb.nsha1, sha1) ||
             /* perhaps sha1 is a tag, try to dereference to a commit */
             ((commit = lookup_commit_reference_gently(sha1, 1)) != NULL &&
-             !hashcmp(cb.nsha1, commit->object.sha1)))) {
+             !hashcmp(cb.nsha1, commit->object.oid.hash)))) {
                const char *from = ref;
                if (!skip_prefix(from, "refs/tags/", &from))
                        skip_prefix(from, "refs/remotes/", &from);