]> git.ipfire.org Git - thirdparty/git.git/commitdiff
sparse-checkout: extract pattern update from 'set' subcommand
authorDerrick Stolee <dstolee@microsoft.com>
Tue, 11 Feb 2020 15:02:22 +0000 (15:02 +0000)
committerJunio C Hamano <gitster@pobox.com>
Tue, 11 Feb 2020 16:47:13 +0000 (08:47 -0800)
In anticipation of adding "add" and "remove" subcommands to the
sparse-checkout builtin, extract a modify_pattern_list() method from the
sparse_checkout_set() method. This command will read input from the
command-line or stdin to construct a set of patterns, then modify the
existing sparse-checkout patterns after a successful update of the
working directory.

Currently, the only way to modify the patterns is to replace all of the
patterns. This will be extended in a later update.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/sparse-checkout.c

index 41d8aaf9a22eb3e8af783c7f006fd0692eef4ae9..03915dd72963e051cf1f8aa5971d2a8567ffef6b 100644 (file)
@@ -462,29 +462,17 @@ static void add_patterns_from_input(struct pattern_list *pl,
        }
 }
 
-static int sparse_checkout_set(int argc, const char **argv, const char *prefix)
+enum modify_type {
+       REPLACE,
+};
+
+static int modify_pattern_list(int argc, const char **argv, enum modify_type m)
 {
-       struct pattern_list pl;
        int result;
        int changed_config = 0;
-
-       static struct option builtin_sparse_checkout_set_options[] = {
-               OPT_BOOL(0, "stdin", &set_opts.use_stdin,
-                        N_("read patterns from standard in")),
-               OPT_END(),
-       };
-
-       repo_read_index(the_repository);
-       require_clean_work_tree(the_repository,
-                               N_("set sparse-checkout patterns"), NULL, 1, 0);
-
+       struct pattern_list pl;
        memset(&pl, 0, sizeof(pl));
 
-       argc = parse_options(argc, argv, prefix,
-                            builtin_sparse_checkout_set_options,
-                            builtin_sparse_checkout_set_usage,
-                            PARSE_OPT_KEEP_UNKNOWN);
-
        add_patterns_from_input(&pl, argc, argv);
 
        if (!core_apply_sparse_checkout) {
@@ -502,6 +490,26 @@ static int sparse_checkout_set(int argc, const char **argv, const char *prefix)
        return result;
 }
 
+static int sparse_checkout_set(int argc, const char **argv, const char *prefix)
+{
+       static struct option builtin_sparse_checkout_set_options[] = {
+               OPT_BOOL(0, "stdin", &set_opts.use_stdin,
+                        N_("read patterns from standard in")),
+               OPT_END(),
+       };
+
+       repo_read_index(the_repository);
+       require_clean_work_tree(the_repository,
+                               N_("set sparse-checkout patterns"), NULL, 1, 0);
+
+       argc = parse_options(argc, argv, prefix,
+                            builtin_sparse_checkout_set_options,
+                            builtin_sparse_checkout_set_usage,
+                            PARSE_OPT_KEEP_UNKNOWN);
+
+       return modify_pattern_list(argc, argv, REPLACE);
+}
+
 static int sparse_checkout_disable(int argc, const char **argv)
 {
        struct pattern_list pl;