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