config.c: trivial fix for compile-time warning
[git/dscho.git] / t / t6039-merge-break.sh
blobd3dabf5b8531e16707a9ea9c401a1c96bd76008a
1 #!/bin/sh
3 test_description='merging with renames from broken pairs
5 This is based on a real-world practice of moving a header file to a
6 new location, but installing a "replacement" file that points to
7 the old one. We need break detection in the merge to find the
8 rename.
10 . ./test-lib.sh
12 # A fake header file; it needs a fair bit of content
13 # for break detection and inexact rename detection to work.
14 mksample() {
15 echo '#ifndef SAMPLE_H'
16 echo '#define SAMPLE_H'
17 for i in 0 1 2 3 4; do
18 for j in 0 1 2 3 4 5 6 7 8 9; do
19 echo "extern fun$i$j();"
20 done
21 done
22 echo '#endif /* SAMPLE_H */'
25 mvsample() {
26 sed 's/SAMPLE_H/NEW_H/' "$1" >"$2" &&
27 rm "$1"
30 # A replacement sample header file that references a new one.
31 mkreplacement() {
32 echo '#ifndef SAMPLE_H'
33 echo '#define SAMPLE_H'
34 echo "#include \"$1\""
35 echo '#endif /* SAMPLE_H */'
38 # Tweak the header file in a minor way.
39 tweak() {
40 sed 's,42.*,& /* secret of something-or-other */,' "$1" >"$1.tmp" &&
41 mv "$1.tmp" "$1"
44 reset() {
45 git reset --hard &&
46 git checkout master &&
47 git reset --hard base &&
48 git clean -f &&
49 { git branch -D topic || true; }
52 test_expect_success 'setup baseline' '
53 mksample >sample.h &&
54 git add sample.h &&
55 git commit -m "add sample.h" &&
56 git tag base
59 setup_rename_plus_tweak() {
60 reset &&
61 mvsample sample.h new.h &&
62 mkreplacement new.h >sample.h &&
63 git add sample.h new.h &&
64 git commit -m 'rename sample.h to new.h, with replacement' &&
65 git checkout -b topic base &&
66 tweak sample.h &&
67 git commit -a -m 'tweak sample.h'
70 check_tweak_result() {
71 mksample >expect.orig &&
72 mvsample expect.orig expect &&
73 tweak expect &&
74 test_cmp expect new.h &&
75 mkreplacement new.h >expect &&
76 test_cmp expect sample.h
79 test_expect_success 'merge rename to tweak finds rename' '
80 setup_rename_plus_tweak &&
81 git merge master &&
82 check_tweak_result
85 test_expect_success 'merge tweak to rename finds rename' '
86 setup_rename_plus_tweak &&
87 git checkout master &&
88 git merge topic &&
89 check_tweak_result
92 setup_double_rename_one_replacement() {
93 setup_rename_plus_tweak &&
94 mvsample sample.h new.h &&
95 git add new.h &&
96 git commit -a -m 'rename sample.h to new.h (no replacement)'
99 test_expect_success 'merge rename to rename/tweak (one replacement)' '
100 setup_double_rename_one_replacement &&
101 git merge master &&
102 check_tweak_result
105 test_expect_success 'merge rename/tweak to rename (one replacement)' '
106 setup_double_rename_one_replacement &&
107 git checkout master &&
108 git merge topic &&
109 check_tweak_result
112 setup_double_rename_two_replacements_same() {
113 setup_rename_plus_tweak &&
114 mvsample sample.h new.h &&
115 mkreplacement new.h >sample.h &&
116 git add sample.h new.h &&
117 git commit -m 'rename sample.h to new.h with replacement (same)'
120 test_expect_success 'merge rename to rename/tweak (two replacements, same)' '
121 setup_double_rename_two_replacements_same &&
122 git merge master &&
123 check_tweak_result
126 test_expect_success 'merge rename/tweak to rename (two replacements, same)' '
127 setup_double_rename_two_replacements_same &&
128 git checkout master &&
129 git merge topic &&
130 check_tweak_result
133 setup_double_rename_two_replacements_diff() {
134 setup_rename_plus_tweak &&
135 mvsample sample.h new.h &&
136 mkreplacement diff.h >sample.h &&
137 git add sample.h new.h &&
138 git commit -m 'rename sample.h to new.h with replacement (diff)'
141 test_expect_success 'merge rename to rename/tweak (two replacements, diff)' '
142 setup_double_rename_two_replacements_diff &&
143 test_must_fail git merge master &&
144 cat >expect <<-\EOF &&
145 #ifndef SAMPLE_H
146 #define SAMPLE_H
147 <<<<<<< HEAD
148 #include "diff.h"
149 =======
150 #include "new.h"
151 >>>>>>> master
152 #endif /* SAMPLE_H */
154 test_cmp expect sample.h
157 test_expect_success 'merge rename to rename/tweak (two replacements, diff)' '
158 setup_double_rename_two_replacements_diff &&
159 git checkout master &&
160 test_must_fail git merge topic &&
161 cat >expect <<-\EOF &&
162 #ifndef SAMPLE_H
163 #define SAMPLE_H
164 <<<<<<< HEAD
165 #include "new.h"
166 =======
167 #include "diff.h"
168 >>>>>>> topic
169 #endif /* SAMPLE_H */
171 test_cmp expect sample.h
174 test_done