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 142 143 144 145
|
#!/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_failure '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 file2 &&
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_failure '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 file2 &&
git commit -m "mv file1 to file2" &&
git config git-p4.skipSubmitEdit true &&
git config git-p4.detectRenames true &&
git p4 submit --verbose
)
'
test_expect_success 'kill p4d' '
kill_p4d
'
test_done
|