sparse-checkout: create helper methods
As we integrate the sparse index into more builtins, we occasionally need to check the sparse-checkout patterns to see if a path is within the sparse-checkout cone. Create some helper methods that help initialize the patterns and check for pattern matching to make this easier. The existing callers of commands like get_sparse_checkout_patterns() use a custom 'struct pattern_list' that is not necessarily the one in the 'struct index_state', so there are not many previous uses that could adopt these helpers. There are just two in builtin/add.c and sparse-index.c that can use path_in_sparse_checkout(). We add a path_in_cone_mode_sparse_checkout() as well that will only return false if the path is outside of the sparse-checkout definition _and_ the sparse-checkout patterns are in cone mode. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Reviewed-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
8a96b9d0a7
commit
02155c8c00
@ -33,19 +33,14 @@ static int convert_to_sparse_rec(struct index_state *istate,
|
||||
{
|
||||
int i, can_convert = 1;
|
||||
int start_converted = num_converted;
|
||||
enum pattern_match_result match;
|
||||
int dtype = DT_UNKNOWN;
|
||||
struct strbuf child_path = STRBUF_INIT;
|
||||
struct pattern_list *pl = istate->sparse_checkout_patterns;
|
||||
|
||||
/*
|
||||
* Is the current path outside of the sparse cone?
|
||||
* Then check if the region can be replaced by a sparse
|
||||
* directory entry (everything is sparse and merged).
|
||||
*/
|
||||
match = path_matches_pattern_list(ct_path, ct_pathlen,
|
||||
NULL, &dtype, pl, istate);
|
||||
if (match != NOT_MATCHED)
|
||||
if (path_in_sparse_checkout(ct_path, istate))
|
||||
can_convert = 0;
|
||||
|
||||
for (i = start; can_convert && i < end; i++) {
|
||||
@ -152,11 +147,8 @@ int convert_to_sparse(struct index_state *istate)
|
||||
if (!istate->repo->settings.sparse_index)
|
||||
return 0;
|
||||
|
||||
if (!istate->sparse_checkout_patterns) {
|
||||
istate->sparse_checkout_patterns = xcalloc(1, sizeof(struct pattern_list));
|
||||
if (get_sparse_checkout_patterns(istate->sparse_checkout_patterns) < 0)
|
||||
return 0;
|
||||
}
|
||||
if (init_sparse_checkout_patterns(istate))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* We need cone-mode patterns to use sparse-index. If a user edits
|
||||
|
Reference in New Issue
Block a user