From 8b10a206f090e01ce1ac4d9a10ec769e2409e2b0 Mon Sep 17 00:00:00 2001 From: Matthew DeVore Date: Wed, 17 Oct 2018 17:39:15 -0700 Subject: 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 Signed-off-by: Junio C Hamano --- list-objects-filter.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'list-objects-filter.h') diff --git a/list-objects-filter.h b/list-objects-filter.h index a963d0274c..9c19875a41 100644 --- a/list-objects-filter.h +++ b/list-objects-filter.h @@ -20,6 +20,11 @@ * In general, objects should only be shown once, but * this result DOES NOT imply that we mark it SEEN. * + * _SKIP_TREE : Used in LOFS_BEGIN_TREE situation - indicates that + * the tree's children should not be iterated over. This + * is used as an optimization when all children will + * definitely be ignored. + * * Most of the time, you want the combination (_MARK_SEEN | _DO_SHOW) * but they can be used independently, such as when sparse-checkout * pattern matching is being applied. @@ -41,6 +46,7 @@ enum list_objects_filter_result { LOFR_ZERO = 0, LOFR_MARK_SEEN = 1<<0, LOFR_DO_SHOW = 1<<1, + LOFR_SKIP_TREE = 1<<2, }; enum list_objects_filter_situation { -- cgit v1.2.3