From: Pete Wyckoff <pw@padd.com>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>
Subject: [PATCH 10/11] git p4 test: examine behavior with locked (+l) files
Date: Tue, 21 Jan 2014 18:16:47 -0500 [thread overview]
Message-ID: <1390346208-9207-11-git-send-email-pw@padd.com> (raw)
In-Reply-To: <1390346208-9207-1-git-send-email-pw@padd.com>
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 <pw@padd.com>
---
t/t9816-git-p4-locked.sh | 145 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 145 insertions(+)
create mode 100755 t/t9816-git-p4-locked.sh
diff --git a/t/t9816-git-p4-locked.sh b/t/t9816-git-p4-locked.sh
new file mode 100755
index 0000000..e71e543
--- /dev/null
+++ b/t/t9816-git-p4-locked.sh
@@ -0,0 +1,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
--
1.8.5.2.320.g99957e5
next prev parent reply other threads:[~2014-01-21 23:20 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-21 23:16 [PATCH 00/11] git p4 tests and a few bug fixes Pete Wyckoff
2014-01-21 23:16 ` [PATCH 01/11] git p4 test: wildcards are supported Pete Wyckoff
2014-01-21 23:16 ` [PATCH 02/11] git p4 test: ensure p4 symlink parsing works Pete Wyckoff
2014-01-21 23:16 ` [PATCH 03/11] git p4: work around p4 bug that causes empty symlinks Pete Wyckoff
2014-01-22 1:26 ` Eric Sunshine
2014-01-21 23:16 ` [PATCH 04/11] git p4 test: explicitly check p4 wildcard delete Pete Wyckoff
2014-01-21 23:16 ` [PATCH 05/11] git p4 test: is_cli_file_writeable succeeds Pete Wyckoff
2014-01-21 23:16 ` [PATCH 06/11] git p4 test: run as user "author" Pete Wyckoff
2014-01-22 1:26 ` Eric Sunshine
2014-01-21 23:16 ` [PATCH 07/11] git p4 test: do not pollute /tmp Pete Wyckoff
2014-01-21 23:16 ` [PATCH 08/11] git p4: handle files with wildcards when doing RCS scrubbing Pete Wyckoff
2014-01-21 23:16 ` [PATCH 09/11] git p4: fix an error message when "p4 where" fails Pete Wyckoff
2014-01-21 23:16 ` Pete Wyckoff [this message]
2014-01-21 23:16 ` [PATCH 11/11] git p4 doc: use two-line style for options with multiple spellings Pete Wyckoff
2014-01-22 0:03 ` [PATCH 00/11] git p4 tests and a few bug fixes Junio C Hamano
2014-01-22 22:44 ` Pete Wyckoff
2014-01-22 22:47 ` [PATCHv2 01/11] git p4 test: wildcards are supported Pete Wyckoff
2014-01-22 22:47 ` [PATCHv2 02/11] git p4 test: ensure p4 symlink parsing works Pete Wyckoff
2014-01-22 22:47 ` [PATCHv2 03/11] git p4: work around p4 bug that causes empty symlinks Pete Wyckoff
2014-01-22 22:47 ` [PATCHv2 04/11] git p4 test: explicitly check p4 wildcard delete Pete Wyckoff
2014-01-22 22:47 ` [PATCHv2 05/11] git p4 test: is_cli_file_writeable succeeds Pete Wyckoff
2014-01-22 22:47 ` [PATCHv2 06/11] git p4 test: run as user "author" Pete Wyckoff
2014-01-22 22:47 ` [PATCHv2 07/11] git p4 test: do not pollute /tmp Pete Wyckoff
2014-01-22 22:47 ` [PATCHv2 08/11] git p4: handle files with wildcards when doing RCS scrubbing Pete Wyckoff
2014-01-22 22:47 ` [PATCHv2 09/11] git p4: fix an error message when "p4 where" fails Pete Wyckoff
2014-01-22 22:47 ` [PATCHv2 10/11] git p4 test: examine behavior with locked (+l) files Pete Wyckoff
2014-01-22 22:47 ` [PATCHv2 11/11] git p4 doc: use two-line style for options with multiple spellings Pete Wyckoff
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1390346208-9207-11-git-send-email-pw@padd.com \
--to=pw@padd.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).