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>

Ævar Arnfjörð Bjarmason committed Mar 20, 2021 at 23:37 UTC 6c9fc42e9f1bf27a3830ef594b7f5f9147af8361
2 files changed +15 -8
tree.c
+9 -8
@@ -11,10 +11,11 @@
11
12 const char *tree_type = "tree";
13
14 -static int read_tree_1(struct repository *r,
15 - struct tree *tree, struct strbuf *base,
16 - int stage, const struct pathspec *pathspec,
17 - read_tree_fn_t fn, void *context)
14 +int read_tree_at(struct repository *r,
15 + struct tree *tree, struct strbuf *base,
16 + int stage,
17 + const struct pathspec *pathspec,
18 + read_tree_fn_t fn, void *context)
19 {
20 struct tree_desc desc;
21 struct name_entry entry;
@@ -71,9 +72,9 @@ static int read_tree_1(struct repository *r,
72 len = tree_entry_len(&entry);
73 strbuf_add(base, entry.path, len);
74 strbuf_addch(base, '/');
74 - retval = read_tree_1(r, lookup_tree(r, &oid),
75 - base, stage, pathspec,
76 - fn, context);
75 + retval = read_tree_at(r, lookup_tree(r, &oid),
76 + base, stage, pathspec,
77 + fn, context);
78 strbuf_setlen(base, oldlen);
79 if (retval)
80 return -1;
@@ -91,7 +92,7 @@ int read_tree_recursive(struct repository *r,
92 int ret;
93
94 strbuf_add(&sb, base, baselen);
94 - ret = read_tree_1(r, tree, &sb, stage, pathspec, fn, context);
95 + ret = read_tree_at(r, tree, &sb, stage, pathspec, fn, context);
96 strbuf_release(&sb);
97 return ret;
98 }
tree.h
+6
@@ -33,6 +33,12 @@ int cmp_cache_name_compare(const void *a_, const void *b_);
33 #define READ_TREE_RECURSIVE 1
34 typedef int (*read_tree_fn_t)(const struct object_id *, struct strbuf *, const char *, unsigned int, int, void *);
35
36 +int read_tree_at(struct repository *r,
37 + struct tree *tree, struct strbuf *base,
38 + int stage,
39 + const struct pathspec *pathspec,
40 + read_tree_fn_t fn, void *context);
41 +
42 int read_tree_recursive(struct repository *r,
43 struct tree *tree,
44 const char *base, int baselen,