]> git.ipfire.org Git - thirdparty/git.git/commitdiff
tree.h API: expose read_tree_1() as read_tree_at()
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Sat, 20 Mar 2021 22:37:50 +0000 (23:37 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sat, 20 Mar 2021 23:09:26 +0000 (16:09 -0700)
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>
tree.c
tree.h

diff --git a/tree.c b/tree.c
index a6c12f2745a60e68d66da16702aa4a15128497d2..f67c2153054b46ddcd95d5aac686b388106de5c9 100644 (file)
--- a/tree.c
+++ b/tree.c
 
 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;
 }
diff --git a/tree.h b/tree.h
index 6b0b1dc211acf5ff5c73a9c3541b35e1062e5693..123fc41efe66582aadf77e01d3bed94572fff8d4 100644 (file)
--- a/tree.h
+++ b/tree.h
@@ -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,