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)
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 {
{
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;
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;
}
static int blob_unchanged(const unsigned char *o_sha,
+ unsigned o_mode,
const unsigned char *a_sha,
+ unsigned a_mode,
int renormalize, const char *path)
{
struct strbuf o = STRBUF_INIT;
struct strbuf a = STRBUF_INIT;
int ret = 0; /* assume changed for safety */
+ if (a_mode != o_mode)
+ return 0;
if (sha_eq(o_sha, a_sha))
return 1;
if (!renormalize)
} else if (o_sha && (!a_sha || !b_sha)) {
/* Case A: Deleted in one */
if ((!a_sha && !b_sha) ||
- (!b_sha && blob_unchanged(o_sha, a_sha, normalize, path)) ||
- (!a_sha && blob_unchanged(o_sha, b_sha, normalize, path))) {
+ (!b_sha && blob_unchanged(o_sha, o_mode, a_sha, a_mode, normalize, path)) ||
+ (!a_sha && blob_unchanged(o_sha, o_mode, b_sha, b_mode, normalize, path))) {
/* Deleted in both or deleted in one and
* unchanged in the other */
if (a_sha)
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;
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);
}