diff options
author | Ævar Arnfjörð Bjarmason <avarab@gmail.com> | 2021-03-20 23:37:50 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-03-20 16:09:26 -0700 |
commit | 6c9fc42e9f1bf27a3830ef594b7f5f9147af8361 (patch) | |
tree | e7a49421fdd614145dcfc3b809828a7fa0a8be9e | |
parent | archive: stop passing "stage" through read_tree_recursive() (diff) | |
download | tgif-6c9fc42e9f1bf27a3830ef594b7f5f9147af8361.tar.xz |
tree.h API: expose read_tree_1() as read_tree_at()
Rename the static read_tree_1() function to read_tree_at(). This
function works just like read_tree_recursive(), except you provide
your own strbuf.
This step doesn't make much sense now, but in follow-up commits I'll
remove the base/baselen/stage arguments to read_tree_recursive(). At
that point an anticipated in-tree user[1] for the old
read_tree_recursive() couldn't provide a path to start the
traversal.
Let's give them a function to do so with an API that makes more sense
for them, by taking a strbuf we should be able to avoid more casting
and/or reallocations in the future.
1. https://lore.kernel.org/git/xmqqft106sok.fsf@gitster.g
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | tree.c | 17 | ||||
-rw-r--r-- | tree.h | 6 |
2 files changed, 15 insertions, 8 deletions
@@ -11,10 +11,11 @@ const char *tree_type = "tree"; -static int read_tree_1(struct repository *r, - struct tree *tree, struct strbuf *base, - int stage, const struct pathspec *pathspec, - read_tree_fn_t fn, void *context) +int read_tree_at(struct repository *r, + struct tree *tree, struct strbuf *base, + int stage, + const struct pathspec *pathspec, + read_tree_fn_t fn, void *context) { struct tree_desc desc; struct name_entry entry; @@ -71,9 +72,9 @@ static int read_tree_1(struct repository *r, len = tree_entry_len(&entry); strbuf_add(base, entry.path, len); strbuf_addch(base, '/'); - retval = read_tree_1(r, lookup_tree(r, &oid), - base, stage, pathspec, - fn, context); + retval = read_tree_at(r, lookup_tree(r, &oid), + base, stage, pathspec, + fn, context); strbuf_setlen(base, oldlen); if (retval) return -1; @@ -91,7 +92,7 @@ int read_tree_recursive(struct repository *r, int ret; strbuf_add(&sb, base, baselen); - ret = read_tree_1(r, tree, &sb, stage, pathspec, fn, context); + ret = read_tree_at(r, tree, &sb, stage, pathspec, fn, context); strbuf_release(&sb); return ret; } @@ -33,6 +33,12 @@ int cmp_cache_name_compare(const void *a_, const void *b_); #define READ_TREE_RECURSIVE 1 typedef int (*read_tree_fn_t)(const struct object_id *, struct strbuf *, const char *, unsigned int, int, void *); +int read_tree_at(struct repository *r, + struct tree *tree, struct strbuf *base, + int stage, + const struct pathspec *pathspec, + read_tree_fn_t fn, void *context); + int read_tree_recursive(struct repository *r, struct tree *tree, const char *base, int baselen, |