Merge branch 'nd/prune-in-worktree'
[git] / t / t1005-read-tree-reset.sh
1 #!/bin/sh
2
3 test_description='read-tree -u --reset'
4
5 . ./test-lib.sh
6 . "$TEST_DIRECTORY"/lib-read-tree.sh
7
8 # two-tree test
9
10 test_expect_success 'setup' '
11         git init &&
12         mkdir df &&
13         echo content >df/file &&
14         git add df/file &&
15         git commit -m one &&
16         git ls-files >expect &&
17         rm -rf df &&
18         echo content >df &&
19         git add df &&
20         echo content >new &&
21         git add new &&
22         git commit -m two
23 '
24
25 test_expect_success 'reset should work' '
26         read_tree_u_must_succeed -u --reset HEAD^ &&
27         git ls-files >actual &&
28         test_cmp expect actual
29 '
30
31 test_expect_success 'reset should remove remnants from a failed merge' '
32         read_tree_u_must_succeed --reset -u HEAD &&
33         git ls-files -s >expect &&
34         sha1=$(git rev-parse :new) &&
35         (
36                 echo "100644 $sha1 1    old"
37                 echo "100644 $sha1 3    old"
38         ) | git update-index --index-info &&
39         >old &&
40         git ls-files -s &&
41         read_tree_u_must_succeed --reset -u HEAD &&
42         git ls-files -s >actual &&
43         ! test -f old
44 '
45
46 test_expect_success 'two-way reset should remove remnants too' '
47         read_tree_u_must_succeed --reset -u HEAD &&
48         git ls-files -s >expect &&
49         sha1=$(git rev-parse :new) &&
50         (
51                 echo "100644 $sha1 1    old"
52                 echo "100644 $sha1 3    old"
53         ) | git update-index --index-info &&
54         >old &&
55         git ls-files -s &&
56         read_tree_u_must_succeed --reset -u HEAD HEAD &&
57         git ls-files -s >actual &&
58         ! test -f old
59 '
60
61 test_expect_success 'Porcelain reset should remove remnants too' '
62         read_tree_u_must_succeed --reset -u HEAD &&
63         git ls-files -s >expect &&
64         sha1=$(git rev-parse :new) &&
65         (
66                 echo "100644 $sha1 1    old"
67                 echo "100644 $sha1 3    old"
68         ) | git update-index --index-info &&
69         >old &&
70         git ls-files -s &&
71         git reset --hard &&
72         git ls-files -s >actual &&
73         ! test -f old
74 '
75
76 test_expect_success 'Porcelain checkout -f should remove remnants too' '
77         read_tree_u_must_succeed --reset -u HEAD &&
78         git ls-files -s >expect &&
79         sha1=$(git rev-parse :new) &&
80         (
81                 echo "100644 $sha1 1    old"
82                 echo "100644 $sha1 3    old"
83         ) | git update-index --index-info &&
84         >old &&
85         git ls-files -s &&
86         git checkout -f &&
87         git ls-files -s >actual &&
88         ! test -f old
89 '
90
91 test_expect_success 'Porcelain checkout -f HEAD should remove remnants too' '
92         read_tree_u_must_succeed --reset -u HEAD &&
93         git ls-files -s >expect &&
94         sha1=$(git rev-parse :new) &&
95         (
96                 echo "100644 $sha1 1    old"
97                 echo "100644 $sha1 3    old"
98         ) | git update-index --index-info &&
99         >old &&
100         git ls-files -s &&
101         git checkout -f HEAD &&
102         git ls-files -s >actual &&
103         ! test -f old
104 '
105
106 test_done