about summary refs log tree commit diff
path: root/t/t9816-git-p4-locked.sh
blob: 932841003cfc4e3f6273087f8567d6c6a660bb0b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/bin/sh

test_description='git p4 locked file behavior'

. ./lib-git-p4.sh

test_expect_success 'start p4d' '
	start_p4d
'

# See
# http://www.perforce.com/perforce/doc.current/manuals/p4sag/03_superuser.html#1088563
# for suggestions on how to configure "sitewide pessimistic locking"
# where only one person can have a file open for edit at a time.
test_expect_success 'init depot' '
	(
		cd "$cli" &&
		echo "TypeMap: +l //depot/..." | p4 typemap -i &&
		echo file1 >file1 &&
		p4 add file1 &&
		p4 submit -d "add file1"
	)
'

test_expect_success 'edit with lock not taken' '
	test_when_finished cleanup_git &&
	git p4 clone --dest="$git" //depot &&
	(
		cd "$git" &&
		echo line2 >>file1 &&
		git add file1 &&
		git commit -m "line2 in file1" &&
		git config git-p4.skipSubmitEdit true &&
		git p4 submit
	)
'

test_expect_success 'add with lock not taken' '
	test_when_finished cleanup_git &&
	git p4 clone --dest="$git" //depot &&
	(
		cd "$git" &&
		echo line1 >>add-lock-not-taken &&
		git add add-lock-not-taken &&
		git commit -m "add add-lock-not-taken" &&
		git config git-p4.skipSubmitEdit true &&
		git p4 submit --verbose
	)
'

lock_in_another_client() {
	# build a different client
	cli2="$TRASH_DIRECTORY/cli2" &&
	mkdir -p "$cli2" &&
	test_when_finished "p4 client -f -d client2 && rm -rf \"$cli2\"" &&
	(
		cd "$cli2" &&
		P4CLIENT=client2 &&
		cli="$cli2" &&
		client_view "//depot/... //client2/..." &&
		p4 sync &&
		p4 open file1
	)
}

test_expect_failure 'edit with lock taken' '
	lock_in_another_client &&
	test_when_finished cleanup_git &&
	test_when_finished "cd \"$cli\" && p4 sync -f file1" &&
	git p4 clone --dest="$git" //depot &&
	(
		cd "$git" &&
		echo line3 >>file1 &&
		git add file1 &&
		git commit -m "line3 in file1" &&
		git config git-p4.skipSubmitEdit true &&
		git p4 submit --verbose
	)
'

test_expect_failure 'delete with lock taken' '
	lock_in_another_client &&
	test_when_finished cleanup_git &&
	test_when_finished "cd \"$cli\" && p4 sync -f file1" &&
	git p4 clone --dest="$git" //depot &&
	(
		cd "$git" &&
		git rm file1 &&
		git commit -m "delete file1" &&
		git config git-p4.skipSubmitEdit true &&
		git p4 submit --verbose
	)
'

test_expect_failure 'chmod with lock taken' '
	lock_in_another_client &&
	test_when_finished cleanup_git &&
	test_when_finished "cd \"$cli\" && p4 sync -f file1" &&
	git p4 clone --dest="$git" //depot &&
	(
		cd "$git" &&
		chmod +x file1 &&
		git add file1 &&
		git commit -m "chmod +x file1" &&
		git config git-p4.skipSubmitEdit true &&
		git p4 submit --verbose
	)
'

test_expect_success 'copy with lock taken' '
	lock_in_another_client &&
	test_when_finished cleanup_git &&
	test_when_finished "cd \"$cli\" && p4 revert file2 && rm -f file2" &&
	git p4 clone --dest="$git" //depot &&
	(
		cd "$git" &&
		cp file1 file2 &&
		git add file2 &&
		git commit -m "cp file1 to file2" &&
		git config git-p4.skipSubmitEdit true &&
		git config git-p4.detectCopies true &&
		git p4 submit --verbose
	)
'

test_expect_failure 'move with lock taken' '
	lock_in_another_client &&
	test_when_finished cleanup_git &&
	test_when_finished "cd \"$cli\" && p4 sync file1 && rm -f file2" &&
	git p4 clone --dest="$git" //depot &&
	(
		cd "$git" &&
		git mv file1 file3 &&
		git commit -m "mv file1 to file3" &&
		git config git-p4.skipSubmitEdit true &&
		git config git-p4.detectRenames true &&
		git p4 submit --verbose
	)
'

test_done