sparse-checkout: load sparse-checkout patterns
A future feature will want to load the sparse-checkout patterns into a pattern_list, but the current mechanism to do so is a bit complicated. This is made difficult due to needing to find the sparse-checkout file in different ways throughout the codebase. The logic implemented in the new get_sparse_checkout_patterns() was duplicated in populate_from_existing_patterns() in unpack-trees.c. Use the new method instead, keeping the logic around handling the struct unpack_trees_options. The callers to get_sparse_checkout_filename() in builtin/sparse-checkout.c manipulate the sparse-checkout file directly, so it is not appropriate to replace logic in that file with get_sparse_checkout_patterns(). Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
6a9372f4ef
commit
dd23022acb
@ -22,11 +22,6 @@ static char const * const builtin_sparse_checkout_usage[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static char *get_sparse_checkout_filename(void)
|
||||
{
|
||||
return git_pathdup("info/sparse-checkout");
|
||||
}
|
||||
|
||||
static void write_patterns_to_file(FILE *fp, struct pattern_list *pl)
|
||||
{
|
||||
int i;
|
||||
|
17
dir.c
17
dir.c
@ -2998,6 +2998,23 @@ void setup_standard_excludes(struct dir_struct *dir)
|
||||
}
|
||||
}
|
||||
|
||||
char *get_sparse_checkout_filename(void)
|
||||
{
|
||||
return git_pathdup("info/sparse-checkout");
|
||||
}
|
||||
|
||||
int get_sparse_checkout_patterns(struct pattern_list *pl)
|
||||
{
|
||||
int res;
|
||||
char *sparse_filename = get_sparse_checkout_filename();
|
||||
|
||||
pl->use_cone_patterns = core_sparse_checkout_cone;
|
||||
res = add_patterns_from_file_to_list(sparse_filename, "", 0, pl, NULL);
|
||||
|
||||
free(sparse_filename);
|
||||
return res;
|
||||
}
|
||||
|
||||
int remove_path(const char *name)
|
||||
{
|
||||
char *slash;
|
||||
|
2
dir.h
2
dir.h
@ -448,6 +448,8 @@ int is_empty_dir(const char *dir);
|
||||
|
||||
void setup_standard_excludes(struct dir_struct *dir);
|
||||
|
||||
char *get_sparse_checkout_filename(void);
|
||||
int get_sparse_checkout_patterns(struct pattern_list *pl);
|
||||
|
||||
/* Constants for remove_dir_recursively: */
|
||||
|
||||
|
@ -1549,14 +1549,10 @@ static void mark_new_skip_worktree(struct pattern_list *pl,
|
||||
static void populate_from_existing_patterns(struct unpack_trees_options *o,
|
||||
struct pattern_list *pl)
|
||||
{
|
||||
char *sparse = git_pathdup("info/sparse-checkout");
|
||||
|
||||
pl->use_cone_patterns = core_sparse_checkout_cone;
|
||||
if (add_patterns_from_file_to_list(sparse, "", 0, pl, NULL) < 0)
|
||||
if (get_sparse_checkout_patterns(pl) < 0)
|
||||
o->skip_sparse_checkout = 1;
|
||||
else
|
||||
o->pl = pl;
|
||||
free(sparse);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user