зеркало из https://github.com/microsoft/git.git
match-trees: convert splice_tree to object_id
Convert the definition of static recursive splice_tree function to use struct object_id and adjust single caller. Signed-off-by: Patryk Obara <patryk.obara@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
97a41a0c01
Коммит
3b34934dca
|
@ -158,22 +158,20 @@ static void match_trees(const struct object_id *hash1,
|
|||
}
|
||||
|
||||
/*
|
||||
* 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;
|
||||
|
||||
|
@ -182,9 +180,9 @@ static int splice_tree(const unsigned char *hash1,
|
|||
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;
|
||||
|
@ -197,26 +195,26 @@ static int splice_tree(const unsigned char *hash1,
|
|||
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_sha1_file(buf, sz, tree_type, result->hash);
|
||||
free(buf);
|
||||
return status;
|
||||
}
|
||||
|
@ -280,7 +278,7 @@ void shift_tree(const struct object_id *hash1,
|
|||
if (!*add_prefix)
|
||||
return;
|
||||
|
||||
splice_tree(hash1->hash, add_prefix, hash2->hash, shifted->hash);
|
||||
splice_tree(hash1, add_prefix, hash2, shifted);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -334,7 +332,7 @@ void shift_tree_by(const struct object_id *hash1,
|
|||
* 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
|
||||
|
|
Загрузка…
Ссылка в новой задаче