revision: introduce struct to handle exclusions

The functions that handle exclusion of refs work on a single string
list. We're about to add a second mechanism for excluding refs though,
and it makes sense to reuse much of the same architecture for both kinds
of exclusion.

Introduce a new `struct ref_exclusions` that encapsulates all the logic
related to excluding refs and move the `struct string_list` that holds
all wildmatch patterns of excluded refs into it. Rename functions that
operate on this struct to match its name.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
This commit is contained in:
Patrick Steinhardt
2022-11-17 06:46:51 +01:00
committed by Taylor Blau
parent 05b9425960
commit 1e9f273ac0
3 changed files with 47 additions and 36 deletions

View File

@@ -81,6 +81,21 @@ struct rev_cmdline_info {
} *rev;
};
struct ref_exclusions {
/*
* Excluded refs is a list of wildmatch patterns. If any of the
* patterns matches, the reference will be excluded.
*/
struct string_list excluded_refs;
};
/**
* Initialize a `struct ref_exclusions` with a macro.
*/
#define REF_EXCLUSIONS_INIT { \
.excluded_refs = STRING_LIST_INIT_DUP, \
}
struct oidset;
struct topo_walk_info;
@@ -103,7 +118,7 @@ struct rev_info {
struct list_objects_filter_options filter;
/* excluding from --branches, --refs, etc. expansion */
struct string_list *ref_excludes;
struct ref_exclusions ref_excludes;
/* Basic information */
const char *prefix;
@@ -439,12 +454,12 @@ void mark_trees_uninteresting_sparse(struct repository *r, struct oidset *trees)
void show_object_with_name(FILE *, struct object *, const char *);
/**
* Helpers to check if a "struct string_list" item matches with
* wildmatch().
* Helpers to check if a reference should be excluded.
*/
int ref_excluded(struct string_list *, const char *path);
void clear_ref_exclusion(struct string_list **);
void add_ref_exclusion(struct string_list **, const char *exclude);
int ref_excluded(const struct ref_exclusions *exclusions, const char *path);
void init_ref_exclusions(struct ref_exclusions *);
void clear_ref_exclusions(struct ref_exclusions *);
void add_ref_exclusion(struct ref_exclusions *, const char *exclude);
/**
* This function can be used if you want to add commit objects as revision