Commit 916bc35b authored by brian m. carlson's avatar brian m. carlson Committed by Junio C Hamano

tree-walk: convert tree entry functions to object_id

Convert get_tree_entry and find_tree_entry to take pointers to struct
object_id.
Signed-off-by: brian m. carlson's avatarbrian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
parent 575042a0
......@@ -397,8 +397,8 @@ static void parse_treeish_arg(const char **argv,
unsigned int mode;
int err;
err = get_tree_entry(tree->object.oid.hash, prefix,
tree_oid.hash, &mode);
err = get_tree_entry(&tree->object.oid, prefix, &tree_oid,
&mode);
if (err || !S_ISDIR(mode))
die("current working directory is untracked");
......
......@@ -80,7 +80,7 @@ static void verify_working_tree_path(struct commit *work_tree, const char *path)
struct object_id blob_oid;
unsigned mode;
if (!get_tree_entry(commit_oid->hash, path, blob_oid.hash, &mode) &&
if (!get_tree_entry(commit_oid, path, &blob_oid, &mode) &&
oid_object_info(&blob_oid, NULL) == OBJ_BLOB)
return;
}
......@@ -502,9 +502,7 @@ static int fill_blob_sha1_and_mode(struct blame_origin *origin)
{
if (!is_null_oid(&origin->blob_oid))
return 0;
if (get_tree_entry(origin->commit->object.oid.hash,
origin->path,
origin->blob_oid.hash, &origin->mode))
if (get_tree_entry(&origin->commit->object.oid, origin->path, &origin->blob_oid, &origin->mode))
goto error_out;
if (oid_object_info(&origin->blob_oid, NULL) != OBJ_BLOB)
goto error_out;
......
......@@ -178,7 +178,7 @@ static int check_local_mod(struct object_id *head, int index_only)
* way as changed from the HEAD.
*/
if (no_head
|| get_tree_entry(head->hash, name, oid.hash, &mode)
|| get_tree_entry(head, name, &oid, &mode)
|| ce->ce_mode != create_ce_mode(mode)
|| oidcmp(&ce->oid, &oid))
staged_changes = 1;
......
......@@ -592,7 +592,7 @@ static struct cache_entry *read_one_ent(const char *which,
int size;
struct cache_entry *ce;
if (get_tree_entry(ent->hash, path, oid.hash, &mode)) {
if (get_tree_entry(ent, path, &oid, &mode)) {
if (which)
error("%s: not in %s branch.", path, which);
return NULL;
......
......@@ -501,8 +501,7 @@ static void fill_blob_sha1(struct commit *commit, struct diff_filespec *spec)
unsigned mode;
struct object_id oid;
if (get_tree_entry(commit->object.oid.hash, spec->path,
oid.hash, &mode))
if (get_tree_entry(&commit->object.oid, spec->path, &oid, &mode))
die("There is no path %s in the commit", spec->path);
fill_filespec(spec, &oid, 1, mode);
......
......@@ -269,7 +269,7 @@ void shift_tree(const struct object_id *hash1,
if (!*del_prefix)
return;
if (get_tree_entry(hash2->hash, del_prefix, shifted->hash, &mode))
if (get_tree_entry(hash2, del_prefix, shifted, &mode))
die("cannot find path %s in tree %s",
del_prefix, oid_to_hex(hash2));
return;
......@@ -296,12 +296,12 @@ void shift_tree_by(const struct object_id *hash1,
unsigned candidate = 0;
/* Can hash2 be a tree at shift_prefix in tree hash1? */
if (!get_tree_entry(hash1->hash, shift_prefix, sub1.hash, &mode1) &&
if (!get_tree_entry(hash1, shift_prefix, &sub1, &mode1) &&
S_ISDIR(mode1))
candidate |= 1;
/* Can hash1 be a tree at shift_prefix in tree hash2? */
if (!get_tree_entry(hash2->hash, shift_prefix, sub2.hash, &mode2) &&
if (!get_tree_entry(hash2, shift_prefix, &sub2, &mode2) &&
S_ISDIR(mode2))
candidate |= 2;
......
......@@ -370,12 +370,12 @@ 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.oid.hash, path,
e->stages[1].oid.hash, &e->stages[1].mode);
get_tree_entry(a->object.oid.hash, path,
e->stages[2].oid.hash, &e->stages[2].mode);
get_tree_entry(b->object.oid.hash, path,
e->stages[3].oid.hash, &e->stages[3].mode);
get_tree_entry(&o->object.oid, path,
&e->stages[1].oid, &e->stages[1].mode);
get_tree_entry(&a->object.oid, path,
&e->stages[2].oid, &e->stages[2].mode);
get_tree_entry(&b->object.oid, path,
&e->stages[3].oid, &e->stages[3].mode);
item = string_list_insert(entries, path);
item->util = e;
return e;
......
......@@ -1012,7 +1012,7 @@ void init_notes(struct notes_tree *t, const char *notes_ref,
return;
if (flags & NOTES_INIT_WRITABLE && read_ref(notes_ref, &object_oid))
die("Cannot use notes ref %s", notes_ref);
if (get_tree_entry(object_oid.hash, "", oid.hash, &mode))
if (get_tree_entry(&object_oid, "", &oid, &mode))
die("Failed to read notes tree referenced by %s (%s)",
notes_ref, oid_to_hex(&object_oid));
......
......@@ -1529,8 +1529,7 @@ static void diagnose_invalid_oid_path(const char *prefix,
if (is_missing_file_error(errno)) {
char *fullname = xstrfmt("%s%s", prefix, filename);
if (!get_tree_entry(tree_oid->hash, fullname,
oid.hash, &mode)) {
if (!get_tree_entry(tree_oid, fullname, &oid, &mode)) {
die("Path '%s' exists, but not '%s'.\n"
"Did you mean '%.*s:%s' aka '%.*s:./%s'?",
fullname,
......@@ -1722,8 +1721,8 @@ static int get_oid_with_context_1(const char *name,
filename, oid->hash, &oc->symlink_path,
&oc->mode);
} else {
ret = get_tree_entry(tree_oid.hash, filename,
oid->hash, &oc->mode);
ret = get_tree_entry(&tree_oid, filename, oid,
&oc->mode);
if (ret && only_to_die) {
diagnose_invalid_oid_path(prefix,
filename,
......
......@@ -492,7 +492,7 @@ struct dir_state {
unsigned char sha1[20];
};
static int find_tree_entry(struct tree_desc *t, const char *name, unsigned char *result, unsigned *mode)
static int find_tree_entry(struct tree_desc *t, const char *name, struct object_id *result, unsigned *mode)
{
int namelen = strlen(name);
while (t->size) {
......@@ -511,7 +511,7 @@ static int find_tree_entry(struct tree_desc *t, const char *name, unsigned char
if (cmp < 0)
break;
if (entrylen == namelen) {
hashcpy(result, oid->hash);
oidcpy(result, oid);
return 0;
}
if (name[entrylen] != '/')
......@@ -519,27 +519,27 @@ static int find_tree_entry(struct tree_desc *t, const char *name, unsigned char
if (!S_ISDIR(*mode))
break;
if (++entrylen == namelen) {
hashcpy(result, oid->hash);
oidcpy(result, oid);
return 0;
}
return get_tree_entry(oid->hash, name + entrylen, result, mode);
return get_tree_entry(oid, name + entrylen, result, mode);
}
return -1;
}
int get_tree_entry(const unsigned char *tree_sha1, const char *name, unsigned char *sha1, unsigned *mode)
int get_tree_entry(const struct object_id *tree_oid, const char *name, struct object_id *oid, unsigned *mode)
{
int retval;
void *tree;
unsigned long size;
unsigned char root[20];
struct object_id root;
tree = read_object_with_reference(tree_sha1, tree_type, &size, root);
tree = read_object_with_reference(tree_oid->hash, tree_type, &size, root.hash);
if (!tree)
return -1;
if (name[0] == '\0') {
hashcpy(sha1, root);
oidcpy(oid, &root);
free(tree);
return 0;
}
......@@ -549,7 +549,7 @@ int get_tree_entry(const unsigned char *tree_sha1, const char *name, unsigned ch
} else {
struct tree_desc t;
init_tree_desc(&t, tree, size);
retval = find_tree_entry(&t, name, sha1, mode);
retval = find_tree_entry(&t, name, oid, mode);
}
free(tree);
return retval;
......@@ -671,7 +671,7 @@ enum follow_symlinks_result get_tree_entry_follow_symlinks(unsigned char *tree_s
/* Look up the first (or only) path component in the tree. */
find_result = find_tree_entry(&t, namebuf.buf,
current_tree_oid.hash, mode);
&current_tree_oid, mode);
if (find_result) {
goto done;
}
......
......@@ -79,7 +79,7 @@ struct traverse_info {
int show_all_errors;
};
int get_tree_entry(const unsigned char *, const char *, unsigned char *, unsigned *);
int get_tree_entry(const struct object_id *, const char *, struct object_id *, unsigned *);
extern char *make_traverse_path(char *path, const struct traverse_info *info, const struct name_entry *n);
extern void setup_traverse_info(struct traverse_info *info, const char *base);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment