}
/*
- * A tree "hash1" has a subdirectory at "prefix". Come up with a
- * tree object by replacing it with another tree "hash2".
+ * A tree "oid1" has a subdirectory at "prefix". Come up with a tree object by
+ * replacing it with another tree "oid2".
*/
-static int splice_tree(const unsigned char *hash1,
- const char *prefix,
- const unsigned char *hash2,
- unsigned char *result)
+static int splice_tree(const struct object_id *oid1, const char *prefix,
+ const struct object_id *oid2, struct object_id *result)
{
char *subpath;
int toplen;
char *buf;
unsigned long sz;
struct tree_desc desc;
- unsigned char *rewrite_here;
- const unsigned char *rewrite_with;
- unsigned char subtree[20];
+ struct object_id *rewrite_here;
+ const struct object_id *rewrite_with;
+ struct object_id subtree;
enum object_type type;
int status;
if (*subpath)
subpath++;
- buf = read_sha1_file(hash1, &type, &sz);
+ buf = read_sha1_file(oid1->hash, &type, &sz);
if (!buf)
- die("cannot read tree %s", sha1_to_hex(hash1));
+ die("cannot read tree %s", oid_to_hex(oid1));
init_tree_desc(&desc, buf, sz);
rewrite_here = NULL;
if (strlen(name) == toplen &&
!memcmp(name, prefix, toplen)) {
if (!S_ISDIR(mode))
- die("entry %s in tree %s is not a tree",
- name, sha1_to_hex(hash1));
- rewrite_here = (unsigned char *) oid->hash;
+ die("entry %s in tree %s is not a tree", name,
+ oid_to_hex(oid1));
+ rewrite_here = (struct object_id *)oid;
break;
}
update_tree_entry(&desc);
}
if (!rewrite_here)
- die("entry %.*s not found in tree %s",
- toplen, prefix, sha1_to_hex(hash1));
+ die("entry %.*s not found in tree %s", toplen, prefix,
+ oid_to_hex(oid1));
if (*subpath) {
- status = splice_tree(rewrite_here, subpath, hash2, subtree);
+ status = splice_tree(rewrite_here, subpath, oid2, &subtree);
if (status)
return status;
- rewrite_with = subtree;
+ rewrite_with = &subtree;
+ } else {
+ rewrite_with = oid2;
}
- else
- rewrite_with = hash2;
- hashcpy(rewrite_here, rewrite_with);
- status = write_sha1_file(buf, sz, tree_type, result);
+ oidcpy(rewrite_here, rewrite_with);
+ status = write_object_file(buf, sz, tree_type, result);
free(buf);
return status;
}
if (!*add_prefix)
return;
- splice_tree(hash1->hash, add_prefix, hash2->hash, shifted->hash);
+ splice_tree(hash1, add_prefix, hash2, shifted);
}
/*
* shift tree2 down by adding shift_prefix above it
* to match tree1.
*/
- splice_tree(hash1->hash, shift_prefix, hash2->hash, shifted->hash);
+ splice_tree(hash1, shift_prefix, hash2, shifted);
else
/*
* shift tree2 up by removing shift_prefix from it