Skip to content

Commit

Permalink
tree.h API: expose read_tree_1() as read_tree_at()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
avar authored and gitster committed Mar 20, 2021
1 parent 7367d88 commit 6c9fc42
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 8 deletions.
17 changes: 9 additions & 8 deletions tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
}
Expand Down
6 changes: 6 additions & 0 deletions tree.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit 6c9fc42

Please sign in to comment.