]> git.ipfire.org Git - thirdparty/git.git/blame - t/t9814-git-p4-rename.sh
Merge branch '2.16' of https://github.com/ChrisADR/git-po
[thirdparty/git.git] / t / t9814-git-p4-rename.sh
CommitLineData
9b6513ac
PW
1#!/bin/sh
2
3test_description='git p4 rename'
4
5. ./lib-git-p4.sh
6
7test_expect_success 'start p4d' '
8 start_p4d
9'
10
11# We rely on this behavior to detect for p4 move availability.
12test_expect_success 'p4 help unknown returns 1' '
13 (
14 cd "$cli" &&
15 (
16 p4 help client >errs 2>&1
17 echo $? >retval
18 )
19 echo 0 >expected &&
20 test_cmp expected retval &&
21 rm retval &&
22 (
23 p4 help nosuchcommand >errs 2>&1
24 echo $? >retval
25 )
26 echo 1 >expected &&
27 test_cmp expected retval &&
28 rm retval
29 )
30'
31
32test_expect_success 'create files' '
33 (
34 cd "$cli" &&
35 p4 client -o | sed "/LineEnd/s/:.*/:unix/" | p4 client -i &&
36 cat >file1 <<-EOF &&
37 A large block of text
38 in file1 that will generate
39 enough context so that rename
40 and copy detection will find
41 something interesting to do.
42 EOF
43 cat >file2 <<-EOF &&
44 /*
45 * This blob looks a bit
46 * different.
47 */
48 int main(int argc, char **argv)
49 {
50 char text[200];
51
52 strcpy(text, "copy/rename this");
53 printf("text is %s\n", text);
54 return 0;
55 }
56 EOF
57 p4 add file1 file2 &&
58 p4 submit -d "add files"
59 )
60'
61
62# Rename a file and confirm that rename is not detected in P4.
63# Rename the new file again with detectRenames option enabled and confirm that
64# this is detected in P4.
65# Rename the new file again adding an extra line, configure a big threshold in
66# detectRenames and confirm that rename is not detected in P4.
67# Repeat, this time with a smaller threshold and confirm that the rename is
68# detected in P4.
69test_expect_success 'detect renames' '
70 git p4 clone --dest="$git" //depot@all &&
71 test_when_finished cleanup_git &&
72 (
73 cd "$git" &&
74 git config git-p4.skipSubmitEdit true &&
75
76 git mv file1 file4 &&
77 git commit -a -m "Rename file1 to file4" &&
78 git diff-tree -r -M HEAD &&
79 git p4 submit &&
8e9497c2
GG
80 p4 filelog //depot/file4 >filelog &&
81 ! grep " from //depot" filelog &&
9b6513ac
PW
82
83 git mv file4 file5 &&
84 git commit -a -m "Rename file4 to file5" &&
85 git diff-tree -r -M HEAD &&
86 git config git-p4.detectRenames true &&
87 git p4 submit &&
8e9497c2
GG
88 p4 filelog //depot/file5 >filelog &&
89 grep " from //depot/file4" filelog &&
9b6513ac
PW
90
91 git mv file5 file6 &&
92 echo update >>file6 &&
93 git add file6 &&
94 git commit -a -m "Rename file5 to file6 with changes" &&
95 git diff-tree -r -M HEAD &&
96 level=$(git diff-tree -r -M HEAD | sed 1d | cut -f1 | cut -d" " -f5 | sed "s/R0*//") &&
97 test -n "$level" && test "$level" -gt 0 && test "$level" -lt 98 &&
98 git config git-p4.detectRenames $(($level + 2)) &&
99 git p4 submit &&
8e9497c2
GG
100 p4 filelog //depot/file6 >filelog &&
101 ! grep " from //depot" filelog &&
9b6513ac
PW
102
103 git mv file6 file7 &&
104 echo update >>file7 &&
105 git add file7 &&
106 git commit -a -m "Rename file6 to file7 with changes" &&
107 git diff-tree -r -M HEAD &&
108 level=$(git diff-tree -r -M HEAD | sed 1d | cut -f1 | cut -d" " -f5 | sed "s/R0*//") &&
109 test -n "$level" && test "$level" -gt 2 && test "$level" -lt 100 &&
110 git config git-p4.detectRenames $(($level - 2)) &&
111 git p4 submit &&
8e9497c2
GG
112 p4 filelog //depot/file7 >filelog &&
113 grep " from //depot/file6" filelog
9b6513ac
PW
114 )
115'
116
117# Copy a file and confirm that copy is not detected in P4.
118# Copy a file with detectCopies option enabled and confirm that copy is not
119# detected in P4.
120# Modify and copy a file with detectCopies option enabled and confirm that copy
121# is detected in P4.
122# Copy a file with detectCopies and detectCopiesHarder options enabled and
123# confirm that copy is detected in P4.
124# Modify and copy a file, configure a bigger threshold in detectCopies and
125# confirm that copy is not detected in P4.
126# Modify and copy a file, configure a smaller threshold in detectCopies and
127# confirm that copy is detected in P4.
128test_expect_success 'detect copies' '
129 git p4 clone --dest="$git" //depot@all &&
130 test_when_finished cleanup_git &&
131 (
132 cd "$git" &&
133 git config git-p4.skipSubmitEdit true &&
134
f1f4c84d
VA
135 echo "file8" >>file2 &&
136 git commit -a -m "Differentiate file2" &&
137 git p4 submit &&
9b6513ac
PW
138 cp file2 file8 &&
139 git add file8 &&
140 git commit -a -m "Copy file2 to file8" &&
141 git diff-tree -r -C HEAD &&
142 git p4 submit &&
143 p4 filelog //depot/file8 &&
c7cf9566 144 ! p4 filelog //depot/file8 | grep -q "branch from" &&
9b6513ac 145
f1f4c84d
VA
146 echo "file9" >>file2 &&
147 git commit -a -m "Differentiate file2" &&
148 git p4 submit &&
149
9b6513ac
PW
150 cp file2 file9 &&
151 git add file9 &&
152 git commit -a -m "Copy file2 to file9" &&
153 git diff-tree -r -C HEAD &&
154 git config git-p4.detectCopies true &&
155 git p4 submit &&
156 p4 filelog //depot/file9 &&
c7cf9566 157 ! p4 filelog //depot/file9 | grep -q "branch from" &&
9b6513ac 158
f1f4c84d
VA
159 echo "file10" >>file2 &&
160 git commit -a -m "Differentiate file2" &&
161 git p4 submit &&
162
9b6513ac
PW
163 echo "file2" >>file2 &&
164 cp file2 file10 &&
165 git add file2 file10 &&
166 git commit -a -m "Modify and copy file2 to file10" &&
167 git diff-tree -r -C HEAD &&
f1f4c84d
VA
168 src=$(git diff-tree -r -C HEAD | sed 1d | sed 2d | cut -f2) &&
169 test "$src" = file2 &&
9b6513ac
PW
170 git p4 submit &&
171 p4 filelog //depot/file10 &&
f1f4c84d
VA
172 p4 filelog //depot/file10 | grep -q "branch from //depot/file2" &&
173
174 echo "file11" >>file2 &&
175 git commit -a -m "Differentiate file2" &&
176 git p4 submit &&
9b6513ac
PW
177
178 cp file2 file11 &&
179 git add file11 &&
180 git commit -a -m "Copy file2 to file11" &&
181 git diff-tree -r -C --find-copies-harder HEAD &&
182 src=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f2) &&
f1f4c84d 183 test "$src" = file2 &&
9b6513ac
PW
184 git config git-p4.detectCopiesHarder true &&
185 git p4 submit &&
186 p4 filelog //depot/file11 &&
f1f4c84d
VA
187 p4 filelog //depot/file11 | grep -q "branch from //depot/file2" &&
188
189 echo "file12" >>file2 &&
190 git commit -a -m "Differentiate file2" &&
191 git p4 submit &&
9b6513ac
PW
192
193 cp file2 file12 &&
194 echo "some text" >>file12 &&
195 git add file12 &&
196 git commit -a -m "Copy file2 to file12 with changes" &&
197 git diff-tree -r -C --find-copies-harder HEAD &&
198 level=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f1 | cut -d" " -f5 | sed "s/C0*//") &&
199 test -n "$level" && test "$level" -gt 0 && test "$level" -lt 98 &&
200 src=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f2) &&
f1f4c84d 201 test "$src" = file2 &&
9b6513ac
PW
202 git config git-p4.detectCopies $(($level + 2)) &&
203 git p4 submit &&
204 p4 filelog //depot/file12 &&
c7cf9566 205 ! p4 filelog //depot/file12 | grep -q "branch from" &&
9b6513ac 206
f1f4c84d
VA
207 echo "file13" >>file2 &&
208 git commit -a -m "Differentiate file2" &&
209 git p4 submit &&
210
9b6513ac
PW
211 cp file2 file13 &&
212 echo "different text" >>file13 &&
213 git add file13 &&
214 git commit -a -m "Copy file2 to file13 with changes" &&
215 git diff-tree -r -C --find-copies-harder HEAD &&
216 level=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f1 | cut -d" " -f5 | sed "s/C0*//") &&
217 test -n "$level" && test "$level" -gt 2 && test "$level" -lt 100 &&
218 src=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f2) &&
f1f4c84d 219 test "$src" = file2 &&
9b6513ac
PW
220 git config git-p4.detectCopies $(($level - 2)) &&
221 git p4 submit &&
222 p4 filelog //depot/file13 &&
f1f4c84d 223 p4 filelog //depot/file13 | grep -q "branch from //depot/file2"
9b6513ac
PW
224 )
225'
226
249da4c0
PW
227# See if configurables can be set, and in particular if the run.move.allow
228# variable exists, which allows admins to disable the "p4 move" command.
896e700a
LD
229test_lazy_prereq P4D_HAVE_CONFIGURABLE_RUN_MOVE_ALLOW '
230 p4 configure show run.move.allow >out &&
231 egrep ^run.move.allow: out
249da4c0
PW
232'
233
234# If move can be disabled, turn it off and test p4 move handling
235test_expect_success P4D_HAVE_CONFIGURABLE_RUN_MOVE_ALLOW \
236 'do not use p4 move when administratively disabled' '
237 test_when_finished "p4 configure set run.move.allow=1" &&
238 p4 configure set run.move.allow=0 &&
239 (
240 cd "$cli" &&
241 echo move-disallow-file >move-disallow-file &&
242 p4 add move-disallow-file &&
243 p4 submit -d "add move-disallow-file"
244 ) &&
245 test_when_finished cleanup_git &&
246 git p4 clone --dest="$git" //depot &&
247 (
248 cd "$git" &&
249 git config git-p4.skipSubmitEdit true &&
250 git config git-p4.detectRenames true &&
251 git mv move-disallow-file move-disallow-file-moved &&
252 git commit -m "move move-disallow-file" &&
253 git p4 submit
254 )
255'
256
9b6513ac
PW
257test_expect_success 'kill p4d' '
258 kill_p4d
259'
260
261test_done