list-objects: support for skipping tree traversal
The tree:0 filter does not need to traverse the trees that it has filtered out, so optimize list-objects and list-objects-filter to skip traversing the trees entirely. Before this patch, we iterated over all children of the tree, and did nothing for all of them, which was wasteful. Signed-off-by: Matthew DeVore <matvore@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
d9e6d0942b
commit
8b10a206f0
@ -11,6 +11,7 @@
|
||||
#include "list-objects-filter-options.h"
|
||||
#include "packfile.h"
|
||||
#include "object-store.h"
|
||||
#include "trace.h"
|
||||
|
||||
struct traversal_context {
|
||||
struct rev_info *revs;
|
||||
@ -184,7 +185,9 @@ static void process_tree(struct traversal_context *ctx,
|
||||
if (base->len)
|
||||
strbuf_addch(base, '/');
|
||||
|
||||
if (!failed_parse)
|
||||
if (r & LOFR_SKIP_TREE)
|
||||
trace_printf("Skipping contents of tree %s...\n", base->buf);
|
||||
else if (!failed_parse)
|
||||
process_tree_contents(ctx, tree, base);
|
||||
|
||||
if ((obj->flags & NOT_USER_GIVEN) && ctx->filter_fn) {
|
||||
|
Reference in New Issue
Block a user