summaryrefslogtreecommitdiff
path: root/commit-reach.h
diff options
context:
space:
mode:
authorDerrick Stolee <dstolee@microsoft.com>2018-07-20 16:33:08 +0000
committerJunio C Hamano <gitster@pobox.com>2018-07-20 15:38:54 -0700
commit920f93ca1c005a81cfb88c87fca18de5e4bde8c5 (patch)
tree6351e076059542ce9028274216ac8cf66c92494c /commit-reach.h
parent1d614d41e5fc030bc2f2799a58791aa912f78378 (diff)
downloadgit-920f93ca1c005a81cfb88c87fca18de5e4bde8c5.tar.gz
commit-reach: move commit_contains from ref-filter
There are several commit walks in the codebase. Group them together into a new commit-reach.c file and corresponding header. After we group these walks into one place, we can reduce duplicate logic by calling equivalent methods. All methods are direct moves, except we also make the commit_contains() method public so its consumers in ref-filter.c can still call it. We can also test this method in a test-tool in a later commit. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'commit-reach.h')
-rw-r--r--commit-reach.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/commit-reach.h b/commit-reach.h
index f1cf9bfcd8..13dec25cee 100644
--- a/commit-reach.h
+++ b/commit-reach.h
@@ -1,8 +1,12 @@
#ifndef __COMMIT_REACH_H__
#define __COMMIT_REACH_H__
+#include "commit-slab.h"
+
struct commit;
struct commit_list;
+struct contains_cache;
+struct ref_filter;
struct commit_list *get_merge_bases_many(struct commit *one,
int n,
@@ -20,7 +24,6 @@ int is_descendant_of(struct commit *commit, struct commit_list *with_commit);
int in_merge_bases_many(struct commit *commit, int nr_reference, struct commit **reference);
int in_merge_bases(struct commit *commit, struct commit *reference);
-
/*
* Takes a list of commits and returns a new list where those
* have been removed that can be reached from other commits in
@@ -41,4 +44,19 @@ void reduce_heads_replace(struct commit_list **heads);
int ref_newer(const struct object_id *new_oid, const struct object_id *old_oid);
+/*
+ * Unknown has to be "0" here, because that's the default value for
+ * contains_cache slab entries that have not yet been assigned.
+ */
+enum contains_result {
+ CONTAINS_UNKNOWN = 0,
+ CONTAINS_NO,
+ CONTAINS_YES
+};
+
+define_commit_slab(contains_cache, enum contains_result);
+
+int commit_contains(struct ref_filter *filter, struct commit *commit,
+ struct commit_list *list, struct contains_cache *cache);
+
#endif