Re: [PATCH v2 5/8] sparse-checkout: create helper methods
- From
Derrick Stolee <stolee@gmail.com>
- Date
- Aug 12, 2021, 17:29 UTC
- Message-ID
- <bac76c72-955d-1ade-4ecf-778ffc45f297@gmail.com>
- In-Reply-To
- <e9ed5cd283087b8f23112f6f3ecbb5a282c4c717.1628625014.git.gitgitgadget@gmail.com>
On 8/10/2021 3:50 PM, Derrick Stolee via GitGitGadget wrote: ...
Show 12 quoted lines
> +enum pattern_match_result path_in_sparse_checkout(const char *path,
> + struct index_state *istate)
> +{
> + int dtype = DT_REG;
> + init_sparse_checkout_patterns(istate);
> +
> + if (!istate->sparse_checkout_patterns)
> + return MATCHED;
> +
> + return path_matches_pattern_list(path, strlen(path), NULL, &dtype,
> + istate->sparse_checkout_patterns,
> + istate);While expanding on this work to fix behavior in 'git (add|rm|mv)' around sparse entries, I noticed a problem with this method, specifically with non-cone-mode patterns:
1. The NULL here should be the "basename" of the path, not NULL. This doesn't matter for cone mode, but _does_ matter for more general patterns.
2. The return type here can be UNDECIDED with general patterns, which really means "not matched" but is distinct from NOT_MATCHED because of the recursive assumptions when a directory is returned with NOT_MATCHED. Since the usage pattern for path_in_sparse_checkout() is to get a boolean result, the return type should switch to 'int' and we should return "path_matches_pattern_list(...) > 0".
I'm still doing some more testing to ensure I've got the necessary tweaks in place to work with the other changes I'm going for. Plan on me sending a v3 with the appropriate changes here.
Show 10 quoted lines
> /* > * 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); > + match = path_in_sparse_checkout(ct_path, istate); > if (match != NOT_MATCHED) > can_convert = 0;
We could remove the use of "match" here and use the boolean result of path_in_sparse_checkout() instead.
Thanks, -Stolee