Git 2.32
[git] / t / t3602-rm-sparse-checkout.sh
1 #!/bin/sh
2
3 test_description='git rm in sparse checked out working trees'
4
5 . ./test-lib.sh
6
7 test_expect_success 'setup' "
8         mkdir -p sub/dir &&
9         touch a b c sub/d sub/dir/e &&
10         git add -A &&
11         git commit -m files &&
12
13         cat >sparse_error_header <<-EOF &&
14         The following pathspecs didn't match any eligible path, but they do match index
15         entries outside the current sparse checkout:
16         EOF
17
18         cat >sparse_hint <<-EOF &&
19         hint: Disable or modify the sparsity rules if you intend to update such entries.
20         hint: Disable this message with \"git config advice.updateSparsePath false\"
21         EOF
22
23         echo b | cat sparse_error_header - >sparse_entry_b_error &&
24         cat sparse_entry_b_error sparse_hint >b_error_and_hint
25 "
26
27 for opt in "" -f --dry-run
28 do
29         test_expect_success "rm${opt:+ $opt} does not remove sparse entries" '
30                 git sparse-checkout set a &&
31                 test_must_fail git rm $opt b 2>stderr &&
32                 test_cmp b_error_and_hint stderr &&
33                 git ls-files --error-unmatch b
34         '
35 done
36
37 test_expect_success 'recursive rm does not remove sparse entries' '
38         git reset --hard &&
39         git sparse-checkout set sub/dir &&
40         git rm -r sub &&
41         git status --porcelain -uno >actual &&
42         echo "D  sub/dir/e" >expected &&
43         test_cmp expected actual
44 '
45
46 test_expect_success 'rm obeys advice.updateSparsePath' '
47         git reset --hard &&
48         git sparse-checkout set a &&
49         test_must_fail git -c advice.updateSparsePath=false rm b 2>stderr &&
50         test_cmp sparse_entry_b_error stderr
51 '
52
53 test_expect_success 'do not advice about sparse entries when they do not match the pathspec' '
54         git reset --hard &&
55         git sparse-checkout set a &&
56         test_must_fail git rm nonexistent 2>stderr &&
57         grep "fatal: pathspec .nonexistent. did not match any files" stderr &&
58         ! grep -F -f sparse_error_header stderr
59 '
60
61 test_expect_success 'do not warn about sparse entries when pathspec matches dense entries' '
62         git reset --hard &&
63         git sparse-checkout set a &&
64         git rm "[ba]" 2>stderr &&
65         test_must_be_empty stderr &&
66         git ls-files --error-unmatch b &&
67         test_must_fail git ls-files --error-unmatch a
68 '
69
70 test_expect_success 'do not warn about sparse entries with --ignore-unmatch' '
71         git reset --hard &&
72         git sparse-checkout set a &&
73         git rm --ignore-unmatch b 2>stderr &&
74         test_must_be_empty stderr &&
75         git ls-files --error-unmatch b
76 '
77
78 test_done