Start post 2.2 cycle
[git/gitweb.git] / t / t9814-git-p4-rename.sh
blob95f4421f71a09449297f4de75220c22c6361ac9c
1 #!/bin/sh
3 test_description='git p4 rename'
5 . ./lib-git-p4.sh
7 test_expect_success 'start p4d' '
8 start_p4d
11 # We rely on this behavior to detect for p4 move availability.
12 test_expect_success 'p4 help unknown returns 1' '
14 cd "$cli" &&
16 p4 help client >errs 2>&1
17 echo $? >retval
19 echo 0 >expected &&
20 test_cmp expected retval &&
21 rm retval &&
23 p4 help nosuchcommand >errs 2>&1
24 echo $? >retval
26 echo 1 >expected &&
27 test_cmp expected retval &&
28 rm retval
32 test_expect_success 'create files' '
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 &&
45 * This blob looks a bit
46 * different.
48 int main(int argc, char **argv)
50 char text[200];
52 strcpy(text, "copy/rename this");
53 printf("text is %s\n", text);
54 return 0;
56 EOF
57 p4 add file1 file2 &&
58 p4 submit -d "add files"
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 &&
73 cd "$git" &&
74 git config git-p4.skipSubmitEdit true &&
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 &&
80 p4 filelog //depot/file4 >filelog &&
81 ! grep " from //depot" filelog &&
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 &&
88 p4 filelog //depot/file5 >filelog &&
89 grep " from //depot/file4" filelog &&
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 &&
100 p4 filelog //depot/file6 >filelog &&
101 ! grep " from //depot" filelog &&
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 &&
112 p4 filelog //depot/file7 >filelog &&
113 grep " from //depot/file6" filelog
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 &&
132 cd "$git" &&
133 git config git-p4.skipSubmitEdit true &&
135 cp file2 file8 &&
136 git add file8 &&
137 git commit -a -m "Copy file2 to file8" &&
138 git diff-tree -r -C HEAD &&
139 git p4 submit &&
140 p4 filelog //depot/file8 &&
141 p4 filelog //depot/file8 | test_must_fail grep -q "branch from" &&
143 cp file2 file9 &&
144 git add file9 &&
145 git commit -a -m "Copy file2 to file9" &&
146 git diff-tree -r -C HEAD &&
147 git config git-p4.detectCopies true &&
148 git p4 submit &&
149 p4 filelog //depot/file9 &&
150 p4 filelog //depot/file9 | test_must_fail grep -q "branch from" &&
152 echo "file2" >>file2 &&
153 cp file2 file10 &&
154 git add file2 file10 &&
155 git commit -a -m "Modify and copy file2 to file10" &&
156 git diff-tree -r -C HEAD &&
157 git p4 submit &&
158 p4 filelog //depot/file10 &&
159 p4 filelog //depot/file10 | grep -q "branch from //depot/file" &&
161 cp file2 file11 &&
162 git add file11 &&
163 git commit -a -m "Copy file2 to file11" &&
164 git diff-tree -r -C --find-copies-harder HEAD &&
165 src=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f2) &&
166 test "$src" = file10 &&
167 git config git-p4.detectCopiesHarder true &&
168 git p4 submit &&
169 p4 filelog //depot/file11 &&
170 p4 filelog //depot/file11 | grep -q "branch from //depot/file" &&
172 cp file2 file12 &&
173 echo "some text" >>file12 &&
174 git add file12 &&
175 git commit -a -m "Copy file2 to file12 with changes" &&
176 git diff-tree -r -C --find-copies-harder HEAD &&
177 level=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f1 | cut -d" " -f5 | sed "s/C0*//") &&
178 test -n "$level" && test "$level" -gt 0 && test "$level" -lt 98 &&
179 src=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f2) &&
180 case "$src" in
181 file10 | file11) : ;; # happy
182 *) false ;; # not
184 git config git-p4.detectCopies $(($level + 2)) &&
185 git p4 submit &&
186 p4 filelog //depot/file12 &&
187 p4 filelog //depot/file12 | test_must_fail grep -q "branch from" &&
189 cp file2 file13 &&
190 echo "different text" >>file13 &&
191 git add file13 &&
192 git commit -a -m "Copy file2 to file13 with changes" &&
193 git diff-tree -r -C --find-copies-harder HEAD &&
194 level=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f1 | cut -d" " -f5 | sed "s/C0*//") &&
195 test -n "$level" && test "$level" -gt 2 && test "$level" -lt 100 &&
196 src=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f2) &&
197 case "$src" in
198 file10 | file11 | file12) : ;; # happy
199 *) false ;; # not
201 git config git-p4.detectCopies $(($level - 2)) &&
202 git p4 submit &&
203 p4 filelog //depot/file13 &&
204 p4 filelog //depot/file13 | grep -q "branch from //depot/file"
208 # See if configurables can be set, and in particular if the run.move.allow
209 # variable exists, which allows admins to disable the "p4 move" command.
210 test_expect_success 'p4 configure command and run.move.allow are available' '
211 p4 configure show run.move.allow >out ; retval=$? &&
212 test $retval = 0 &&
214 egrep ^run.move.allow: out &&
215 test_set_prereq P4D_HAVE_CONFIGURABLE_RUN_MOVE_ALLOW ||
216 true
217 } || true
220 # If move can be disabled, turn it off and test p4 move handling
221 test_expect_success P4D_HAVE_CONFIGURABLE_RUN_MOVE_ALLOW \
222 'do not use p4 move when administratively disabled' '
223 test_when_finished "p4 configure set run.move.allow=1" &&
224 p4 configure set run.move.allow=0 &&
226 cd "$cli" &&
227 echo move-disallow-file >move-disallow-file &&
228 p4 add move-disallow-file &&
229 p4 submit -d "add move-disallow-file"
230 ) &&
231 test_when_finished cleanup_git &&
232 git p4 clone --dest="$git" //depot &&
234 cd "$git" &&
235 git config git-p4.skipSubmitEdit true &&
236 git config git-p4.detectRenames true &&
237 git mv move-disallow-file move-disallow-file-moved &&
238 git commit -m "move move-disallow-file" &&
239 git p4 submit
243 test_expect_success 'kill p4d' '
244 kill_p4d
247 test_done