]> git.ipfire.org Git - thirdparty/git.git/commitdiff
clean: integrate with sparse index
authorVictoria Dye <vdye@github.com>
Tue, 11 Jan 2022 18:05:00 +0000 (18:05 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 13 Jan 2022 21:49:45 +0000 (13:49 -0800)
Remove full index requirement for `git clean` and test to ensure the index
is not expanded in `git clean`. Add to existing test for `git clean` to
verify cleanup of untracked files in sparse directories is consistent
between sparse index and non-sparse index checkouts.

Signed-off-by: Victoria Dye <vdye@github.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/clean.c
t/t1092-sparse-checkout-compatibility.sh

index 98a2860409bb4820af393ea9e50e58124fd7873e..5628fc7103ed9281b90853a4fb2e391c54c98905 100644 (file)
@@ -983,6 +983,9 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
                dir.flags |= DIR_KEEP_UNTRACKED_CONTENTS;
        }
 
+       prepare_repo_settings(the_repository);
+       the_repository->settings.command_requires_full_index = 0;
+
        if (read_cache() < 0)
                die(_("index file corrupt"));
 
index d5167e7ed691f57edb39c28d0555841142d1d116..055873614525968c72bf7594c3ab462a01fdda03 100755 (executable)
@@ -764,23 +764,42 @@ test_expect_success 'clean' '
        test_all_match git commit -m "ignore bogus files" &&
 
        run_on_sparse mkdir folder1 &&
+       run_on_all mkdir -p deep/untracked-deep &&
        run_on_all touch folder1/bogus &&
+       run_on_all touch folder1/untracked &&
+       run_on_all touch deep/untracked-deep/bogus &&
+       run_on_all touch deep/untracked-deep/untracked &&
 
        test_all_match git status --porcelain=v2 &&
        test_all_match git clean -f &&
        test_all_match git status --porcelain=v2 &&
        test_sparse_match ls &&
        test_sparse_match ls folder1 &&
+       run_on_all test_path_exists folder1/bogus &&
+       run_on_all test_path_is_missing folder1/untracked &&
+       run_on_all test_path_exists deep/untracked-deep/bogus &&
+       run_on_all test_path_exists deep/untracked-deep/untracked &&
+
+       test_all_match git clean -fd &&
+       test_all_match git status --porcelain=v2 &&
+       test_sparse_match ls &&
+       test_sparse_match ls folder1 &&
+       run_on_all test_path_exists folder1/bogus &&
+       run_on_all test_path_exists deep/untracked-deep/bogus &&
+       run_on_all test_path_is_missing deep/untracked-deep/untracked &&
 
        test_all_match git clean -xf &&
        test_all_match git status --porcelain=v2 &&
        test_sparse_match ls &&
        test_sparse_match ls folder1 &&
+       run_on_all test_path_is_missing folder1/bogus &&
+       run_on_all test_path_exists deep/untracked-deep/bogus &&
 
        test_all_match git clean -xdf &&
        test_all_match git status --porcelain=v2 &&
        test_sparse_match ls &&
        test_sparse_match ls folder1 &&
+       run_on_all test_path_is_missing deep/untracked-deep/bogus &&
 
        test_sparse_match test_path_is_dir folder1
 '
@@ -920,6 +939,8 @@ test_expect_success 'sparse-index is not expanded' '
        # Wildcard identifies only full sparse directories, no index expansion
        ensure_not_expanded reset deepest -- folder\* &&
 
+       ensure_not_expanded clean -fd &&
+
        ensure_not_expanded checkout -f update-deep &&
        test_config -C sparse-index pull.twohead ort &&
        (