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
12 # A fake header file; it needs a fair bit of content
13 # for break detection and inexact rename detection to work.
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();"
22 echo '#endif /* SAMPLE_H */'
26 sed 's/SAMPLE_H/NEW_H/' "$1" >"$2" &&
30 # A replacement sample header file that references a new one.
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.
40 sed 's,42.*,& /* secret of something-or-other */,' "$1" >"$1.tmp" &&
46 git checkout master
&&
47 git
reset --hard base
&&
49 { git branch
-D topic || true
; }
52 test_expect_success
'setup baseline' '
55 git commit -m "add sample.h" &&
59 setup_rename_plus_tweak
() {
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
&&
67 git commit
-a -m 'tweak sample.h'
70 check_tweak_result
() {
71 mksample
>expect.orig
&&
72 mvsample expect.orig 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 &&
85 test_expect_success
'merge tweak to rename finds rename' '
86 setup_rename_plus_tweak &&
87 git checkout master &&
92 setup_double_rename_one_replacement
() {
93 setup_rename_plus_tweak
&&
94 mvsample sample.h 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 &&
105 test_expect_success
'merge rename/tweak to rename (one replacement)' '
106 setup_double_rename_one_replacement &&
107 git checkout master &&
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 &&
126 test_expect_success
'merge rename/tweak to rename (two replacements, same)' '
127 setup_double_rename_two_replacements_same &&
128 git checkout master &&
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 &&
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 &&
169 #endif /* SAMPLE_H */
171 test_cmp expect sample.h