]>
Commit | Line | Data |
---|---|---|
d5f4b826 MT |
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 |