Commit | Line | Data |
---|---|---|
72d1216a FK |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2005 Fredrik Kuivinen | |
4 | # | |
5 | ||
6 | test_description='Test merge with directory/file conflicts' | |
7 | . ./test-lib.sh | |
8 | ||
d09c0a39 EN |
9 | test_expect_success 'prepare repository' ' |
10 | echo Hello >init && | |
11 | git add init && | |
12 | git commit -m initial && | |
13 | ||
14 | git branch B && | |
15 | mkdir dir && | |
16 | echo foo >dir/foo && | |
17 | git add dir/foo && | |
18 | git commit -m "File: dir/foo" && | |
19 | ||
20 | git checkout B && | |
21 | echo file dir >dir && | |
22 | git add dir && | |
23 | git commit -m "File: dir" | |
24 | ' | |
72d1216a | 25 | |
892e6f7e | 26 | test_expect_success 'Merge with d/f conflicts' ' |
d45366e8 | 27 | test_expect_code 1 git merge -m "merge msg" master |
892e6f7e | 28 | ' |
72d1216a | 29 | |
5a2580d6 | 30 | test_expect_success 'F/D conflict' ' |
1c9b2d3a AR |
31 | git reset --hard && |
32 | git checkout master && | |
33 | rm .git/index && | |
34 | ||
35 | mkdir before && | |
36 | echo FILE >before/one && | |
37 | echo FILE >after && | |
38 | git add . && | |
39 | git commit -m first && | |
40 | ||
41 | rm -f after && | |
42 | git mv before after && | |
43 | git commit -m move && | |
44 | ||
45 | git checkout -b para HEAD^ && | |
46 | echo COMPLETELY ANOTHER FILE >another && | |
47 | git add . && | |
48 | git commit -m para && | |
49 | ||
50 | git merge master | |
51 | ' | |
52 | ||
fa0ae3b1 EN |
53 | test_expect_success 'setup modify/delete + directory/file conflict' ' |
54 | git checkout --orphan modify && | |
55 | git rm -rf . && | |
56 | git clean -fdqx && | |
57 | ||
58 | printf "a\nb\nc\nd\ne\nf\ng\nh\n" >letters && | |
59 | git add letters && | |
60 | git commit -m initial && | |
61 | ||
f0fd4d05 EN |
62 | # Throw in letters.txt for sorting order fun |
63 | # ("letters.txt" sorts between "letters" and "letters/file") | |
fa0ae3b1 | 64 | echo i >>letters && |
f0fd4d05 EN |
65 | echo "version 2" >letters.txt && |
66 | git add letters letters.txt && | |
fa0ae3b1 EN |
67 | git commit -m modified && |
68 | ||
69 | git checkout -b delete HEAD^ && | |
70 | git rm letters && | |
71 | mkdir letters && | |
72 | >letters/file && | |
f0fd4d05 EN |
73 | echo "version 1" >letters.txt && |
74 | git add letters letters.txt && | |
fa0ae3b1 EN |
75 | git commit -m deleted |
76 | ' | |
77 | ||
84a08a47 | 78 | test_expect_success 'modify/delete + directory/file conflict' ' |
fa0ae3b1 EN |
79 | git checkout delete^0 && |
80 | test_must_fail git merge modify && | |
81 | ||
f0fd4d05 EN |
82 | test 5 -eq $(git ls-files -s | wc -l) && |
83 | test 4 -eq $(git ls-files -u | wc -l) && | |
84 | test 1 -eq $(git ls-files -o | wc -l) && | |
fa0ae3b1 | 85 | |
b821ca78 EN |
86 | test_path_is_file letters/file && |
87 | test_path_is_file letters.txt && | |
88 | test_path_is_file letters~modify | |
fa0ae3b1 EN |
89 | ' |
90 | ||
ef02b317 | 91 | test_expect_success 'modify/delete + directory/file conflict; other way' ' |
fa0ae3b1 EN |
92 | git reset --hard && |
93 | git clean -f && | |
94 | git checkout modify^0 && | |
f0fd4d05 | 95 | |
fa0ae3b1 EN |
96 | test_must_fail git merge delete && |
97 | ||
f0fd4d05 EN |
98 | test 5 -eq $(git ls-files -s | wc -l) && |
99 | test 4 -eq $(git ls-files -u | wc -l) && | |
100 | test 1 -eq $(git ls-files -o | wc -l) && | |
fa0ae3b1 | 101 | |
b821ca78 EN |
102 | test_path_is_file letters/file && |
103 | test_path_is_file letters.txt && | |
104 | test_path_is_file letters~HEAD | |
fa0ae3b1 EN |
105 | ' |
106 | ||
65bf820d EN |
107 | test_expect_success 'Simple merge in repo with interesting pathnames' ' |
108 | # Simple lexicographic ordering of files and directories would be: | |
109 | # foo | |
110 | # foo/bar | |
111 | # foo/bar-2 | |
112 | # foo/bar/baz | |
113 | # foo/bar-2/baz | |
114 | # The fact that foo/bar-2 appears between foo/bar and foo/bar/baz | |
115 | # can trip up some codepaths, and is the point of this test. | |
116 | test_create_repo name-ordering && | |
117 | ( | |
118 | cd name-ordering && | |
119 | ||
120 | mkdir -p foo/bar && | |
121 | mkdir -p foo/bar-2 && | |
122 | >foo/bar/baz && | |
123 | >foo/bar-2/baz && | |
124 | git add . && | |
125 | git commit -m initial && | |
126 | ||
127 | git branch main && | |
128 | git branch other && | |
129 | ||
130 | git checkout other && | |
131 | echo other >foo/bar-2/baz && | |
132 | git add -u && | |
133 | git commit -m other && | |
134 | ||
135 | git checkout main && | |
136 | echo main >foo/bar/baz && | |
137 | git add -u && | |
138 | git commit -m main && | |
139 | ||
140 | git merge other && | |
141 | git ls-files -s >out && | |
142 | test_line_count = 2 out && | |
143 | git rev-parse :0:foo/bar/baz :0:foo/bar-2/baz >actual && | |
144 | git rev-parse HEAD~1:foo/bar/baz other:foo/bar-2/baz >expect && | |
145 | test_cmp expect actual | |
146 | ) | |
147 | ||
148 | ' | |
149 | ||
72d1216a | 150 | test_done |