Josh Steadmon <steadmon@xxxxxxxxxx> writes: > In 9c4d58ff2c (ls-tree: split up "fast path" callbacks, 2022-03-23), a > refactoring of the various read_tree_at() callbacks caused us to > unconditionally recurse into directories if `-l` (long format) was > passed on the command line, regardless of whether or not we also pass > the `-r` (recursive) flag. > > Fix this by making show_tree_long() return the value of `recurse`, > rather than always returning 1. This value is interpreted by > read_tree_at() to be a signal on whether or not to recurse. > > Signed-off-by: Josh Steadmon <steadmon@xxxxxxxxxx> > --- > I believe this is the correct fix for the change in `git ls-tree -l` > output. I would also like to add tests in a future fix, but I do not > have time to add them today. It's rather an obvious bug and it is sad that existing tests did not find (and no, I do not think lower-level unit testing would have helped us in any way, either). Will queue. Thanks for a quick fix. > builtin/ls-tree.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/builtin/ls-tree.c b/builtin/ls-tree.c > index 5dac9ee5b9..e279be8bb6 100644 > --- a/builtin/ls-tree.c > +++ b/builtin/ls-tree.c > @@ -255,7 +255,7 @@ static int show_tree_long(const struct object_id *oid, struct strbuf *base, > printf("%06o %s %s %7s\t", data.mode, type_name(data.type), > find_unique_abbrev(data.oid, abbrev), size_text); > show_tree_common_default_long(base, pathname, data.base->len); > - return 1; > + return recurse; > } > > static int show_tree_name_only(const struct object_id *oid, struct strbuf *base, > > base-commit: faa21c10d44184f616d391c158dcbb13b9c72ef3