Skip to content
This repository was archived by the owner on Nov 9, 2017. It is now read-only.

Commit 3d5388a

Browse files
Pete Wyckoffgitster
authored andcommitted
git p4 test: examine behavior with locked (+l) files
The p4 server can enforce file locking, so that only one user can edit a file at a time. Git p4 is unable to submit changes to locked files. Currently it exits poorly. Ideally it would notice the locked condition and clean up nicely. Add a bunch of tests that describe the problem, hoping that fixes appear in the future. Signed-off-by: Pete Wyckoff <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 2000544 commit 3d5388a

File tree

1 file changed

+145
-0
lines changed

1 file changed

+145
-0
lines changed

t/t9816-git-p4-locked.sh

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
#!/bin/sh
2+
3+
test_description='git p4 locked file behavior'
4+
5+
. ./lib-git-p4.sh
6+
7+
test_expect_success 'start p4d' '
8+
start_p4d
9+
'
10+
11+
# See
12+
# http://www.perforce.com/perforce/doc.current/manuals/p4sag/03_superuser.html#1088563
13+
# for suggestions on how to configure "sitewide pessimistic locking"
14+
# where only one person can have a file open for edit at a time.
15+
test_expect_success 'init depot' '
16+
(
17+
cd "$cli" &&
18+
echo "TypeMap: +l //depot/..." | p4 typemap -i &&
19+
echo file1 >file1 &&
20+
p4 add file1 &&
21+
p4 submit -d "add file1"
22+
)
23+
'
24+
25+
test_expect_success 'edit with lock not taken' '
26+
test_when_finished cleanup_git &&
27+
git p4 clone --dest="$git" //depot &&
28+
(
29+
cd "$git" &&
30+
echo line2 >>file1 &&
31+
git add file1 &&
32+
git commit -m "line2 in file1" &&
33+
git config git-p4.skipSubmitEdit true &&
34+
git p4 submit
35+
)
36+
'
37+
38+
test_expect_failure 'add with lock not taken' '
39+
test_when_finished cleanup_git &&
40+
git p4 clone --dest="$git" //depot &&
41+
(
42+
cd "$git" &&
43+
echo line1 >>add-lock-not-taken &&
44+
git add file2 &&
45+
git commit -m "add add-lock-not-taken" &&
46+
git config git-p4.skipSubmitEdit true &&
47+
git p4 submit --verbose
48+
)
49+
'
50+
51+
lock_in_another_client() {
52+
# build a different client
53+
cli2="$TRASH_DIRECTORY/cli2" &&
54+
mkdir -p "$cli2" &&
55+
test_when_finished "p4 client -f -d client2 && rm -rf \"$cli2\"" &&
56+
(
57+
cd "$cli2" &&
58+
P4CLIENT=client2 &&
59+
cli="$cli2" &&
60+
client_view "//depot/... //client2/..." &&
61+
p4 sync &&
62+
p4 open file1
63+
)
64+
}
65+
66+
test_expect_failure 'edit with lock taken' '
67+
lock_in_another_client &&
68+
test_when_finished cleanup_git &&
69+
test_when_finished "cd \"$cli\" && p4 sync -f file1" &&
70+
git p4 clone --dest="$git" //depot &&
71+
(
72+
cd "$git" &&
73+
echo line3 >>file1 &&
74+
git add file1 &&
75+
git commit -m "line3 in file1" &&
76+
git config git-p4.skipSubmitEdit true &&
77+
git p4 submit --verbose
78+
)
79+
'
80+
81+
test_expect_failure 'delete with lock taken' '
82+
lock_in_another_client &&
83+
test_when_finished cleanup_git &&
84+
test_when_finished "cd \"$cli\" && p4 sync -f file1" &&
85+
git p4 clone --dest="$git" //depot &&
86+
(
87+
cd "$git" &&
88+
git rm file1 &&
89+
git commit -m "delete file1" &&
90+
git config git-p4.skipSubmitEdit true &&
91+
git p4 submit --verbose
92+
)
93+
'
94+
95+
test_expect_failure 'chmod with lock taken' '
96+
lock_in_another_client &&
97+
test_when_finished cleanup_git &&
98+
test_when_finished "cd \"$cli\" && p4 sync -f file1" &&
99+
git p4 clone --dest="$git" //depot &&
100+
(
101+
cd "$git" &&
102+
chmod +x file1 &&
103+
git add file1 &&
104+
git commit -m "chmod +x file1" &&
105+
git config git-p4.skipSubmitEdit true &&
106+
git p4 submit --verbose
107+
)
108+
'
109+
110+
test_expect_failure 'copy with lock taken' '
111+
lock_in_another_client &&
112+
test_when_finished cleanup_git &&
113+
test_when_finished "cd \"$cli\" && p4 revert file2 && rm -f file2" &&
114+
git p4 clone --dest="$git" //depot &&
115+
(
116+
cd "$git" &&
117+
cp file1 file2 &&
118+
git add file2 &&
119+
git commit -m "cp file1 to file2" &&
120+
git config git-p4.skipSubmitEdit true &&
121+
git config git-p4.detectCopies true &&
122+
git p4 submit --verbose
123+
)
124+
'
125+
126+
test_expect_failure 'move with lock taken' '
127+
lock_in_another_client &&
128+
test_when_finished cleanup_git &&
129+
test_when_finished "cd \"$cli\" && p4 sync file1 && rm -f file2" &&
130+
git p4 clone --dest="$git" //depot &&
131+
(
132+
cd "$git" &&
133+
git mv file1 file2 &&
134+
git commit -m "mv file1 to file2" &&
135+
git config git-p4.skipSubmitEdit true &&
136+
git config git-p4.detectRenames true &&
137+
git p4 submit --verbose
138+
)
139+
'
140+
141+
test_expect_success 'kill p4d' '
142+
kill_p4d
143+
'
144+
145+
test_done

0 commit comments

Comments
 (0)