Skip to content

Commit 473dc3b

Browse files
derrickstoleeGit for Windows Build Agent
authored andcommitted
revision: create mark_trees_uninteresting_dense()
The sparse tree walk algorithm was created in d5d2e93 (revision: implement sparse algorithm, 2019-01-16) and involves using the mark_trees_uninteresting_sparse() method. This method takes a repository and an oidset of tree IDs, some of which have the UNINTERESTING flag and some of which do not. Create a method that has an equivalent set of preconditions but uses a "dense" walk (recursively visits all reachable trees, as long as they have not previously been marked UNINTERESTING). This is an important difference from mark_tree_uninteresting(), which short-circuits if the given tree has the UNINTERESTING flag. A use of this method will be added in a later change, with a condition set whether the sparse or dense approach should be used. Signed-off-by: Derrick Stolee <[email protected]>
1 parent 2893fd6 commit 473dc3b

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

revision.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,21 @@ static void add_children_by_path(struct repository *r,
212212
free_tree_buffer(tree);
213213
}
214214

215+
void mark_trees_uninteresting_dense(struct repository *r,
216+
struct oidset *trees)
217+
{
218+
struct object_id *oid;
219+
struct oidset_iter iter;
220+
221+
oidset_iter_init(trees, &iter);
222+
while ((oid = oidset_iter_next(&iter))) {
223+
struct tree *tree = lookup_tree(r, oid);
224+
225+
if (tree->object.flags & UNINTERESTING)
226+
mark_tree_contents_uninteresting(r, tree);
227+
}
228+
}
229+
215230
void mark_trees_uninteresting_sparse(struct repository *r,
216231
struct oidset *trees)
217232
{

revision.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,7 @@ void put_revision_mark(const struct rev_info *revs,
486486

487487
void mark_parents_uninteresting(struct rev_info *revs, struct commit *commit);
488488
void mark_tree_uninteresting(struct repository *r, struct tree *tree);
489+
void mark_trees_uninteresting_dense(struct repository *r, struct oidset *trees);
489490
void mark_trees_uninteresting_sparse(struct repository *r, struct oidset *trees);
490491

491492
/**

0 commit comments

Comments
 (0)