git/t/t9816-git-p4-locked.sh
Josh Soref 62b4f7b9c6 doc: refer to internet archive
These pages are no longer reachable from their original locations,
which makes things difficult for readers. Instead, switch to linking to
the Internet Archive for the content.

Signed-off-by: Josh Soref <jsoref@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2023-11-26 10:07:06 +09:00

141 lines
3.4 KiB
Bash
Executable file

#!/bin/sh
test_description='git p4 locked file behavior'
. ./lib-git-p4.sh
test_expect_success 'start p4d' '
start_p4d
'
# See
# https://web.archive.org/web/20150602090517/http://www.perforce.com/perforce/doc.current/manuals/p4sag/chapter.superuser.html#superuser.basic.typemap_locking
# 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