]>
Commit | Line | Data |
---|---|---|
9b6513ac PW |
1 | #!/bin/sh |
2 | ||
3 | test_description='git p4 rename' | |
4 | ||
5 | . ./lib-git-p4.sh | |
6 | ||
7 | test_expect_success 'start p4d' ' | |
8 | start_p4d | |
9 | ' | |
10 | ||
11 | # We rely on this behavior to detect for p4 move availability. | |
12 | test_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 | ||
32 | test_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. | |
69 | test_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. | |
128 | test_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 && | |
144 | p4 filelog //depot/file8 | test_must_fail grep -q "branch from" && | |
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 && | |
157 | p4 filelog //depot/file9 | test_must_fail grep -q "branch from" && | |
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 && | |
205 | p4 filelog //depot/file12 | test_must_fail grep -q "branch from" && | |
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 |
229 | test_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 | |
235 | test_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 |
257 | test_expect_success 'kill p4d' ' |
258 | kill_p4d | |
259 | ' | |
260 | ||
261 | test_done |