Merge branch 'pw/git-p4-tests'
More "git p4" tests. * pw/git-p4-tests: git p4 test: fix badp4dir test git p4 test: split up big t9800 test git p4 test: cleanup_git should make a new $git git p4 test: copy source indeterminate git p4 test: check for error message in failed test git p4 test: rename some "git-p4 command" strings git p4 test: never create default test repo git p4 test: simplify quoting involving TRASH_DIRECTORY git p4 test: use real_path to resolve p4 client symlinks git p4 test: wait longer for p4d to start and test its pid
This commit is contained in:
commit
faae8854bf
@ -2,6 +2,10 @@
|
|||||||
# Library code for git p4 tests
|
# Library code for git p4 tests
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# p4 tests never use the top-level repo; always build/clone into
|
||||||
|
# a subdirectory called "$git"
|
||||||
|
TEST_NO_CREATE_REPO=NoThanks
|
||||||
|
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
if ! test_have_prereq PYTHON; then
|
if ! test_have_prereq PYTHON; then
|
||||||
@ -27,23 +31,48 @@ export P4CLIENT=client
|
|||||||
export P4EDITOR=:
|
export P4EDITOR=:
|
||||||
|
|
||||||
db="$TRASH_DIRECTORY/db"
|
db="$TRASH_DIRECTORY/db"
|
||||||
cli="$TRASH_DIRECTORY/cli"
|
cli=$(test-path-utils real_path "$TRASH_DIRECTORY/cli")
|
||||||
git="$TRASH_DIRECTORY/git"
|
git="$TRASH_DIRECTORY/git"
|
||||||
pidfile="$TRASH_DIRECTORY/p4d.pid"
|
pidfile="$TRASH_DIRECTORY/p4d.pid"
|
||||||
|
|
||||||
start_p4d() {
|
start_p4d() {
|
||||||
mkdir -p "$db" "$cli" "$git" &&
|
mkdir -p "$db" "$cli" "$git" &&
|
||||||
|
rm -f "$pidfile" &&
|
||||||
(
|
(
|
||||||
p4d -q -r "$db" -p $P4DPORT &
|
p4d -q -r "$db" -p $P4DPORT &
|
||||||
echo $! >"$pidfile"
|
echo $! >"$pidfile"
|
||||||
) &&
|
) &&
|
||||||
for i in 1 2 3 4 5 ; do
|
|
||||||
p4 info >/dev/null 2>&1 && break || true &&
|
# This gives p4d a long time to start up, as it can be
|
||||||
echo waiting for p4d to start &&
|
# quite slow depending on the machine. Set this environment
|
||||||
|
# variable to something smaller to fail faster in, say,
|
||||||
|
# an automated test setup. If the p4d process dies, that
|
||||||
|
# will be caught with the "kill -0" check below.
|
||||||
|
i=${P4D_START_PATIENCE:-300}
|
||||||
|
pid=$(cat "$pidfile")
|
||||||
|
ready=
|
||||||
|
while test $i -gt 0
|
||||||
|
do
|
||||||
|
# succeed when p4 client commands start to work
|
||||||
|
if p4 info >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
ready=true
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
# fail if p4d died
|
||||||
|
kill -0 $pid 2>/dev/null || break
|
||||||
|
echo waiting for p4d to start
|
||||||
sleep 1
|
sleep 1
|
||||||
done &&
|
i=$(( $i - 1 ))
|
||||||
# complain if it never started
|
done
|
||||||
p4 info >/dev/null &&
|
|
||||||
|
if test -z "$ready"
|
||||||
|
then
|
||||||
|
# p4d failed to start
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build a client
|
||||||
(
|
(
|
||||||
cd "$cli" &&
|
cd "$cli" &&
|
||||||
p4 client -i <<-EOF
|
p4 client -i <<-EOF
|
||||||
@ -53,6 +82,7 @@ start_p4d() {
|
|||||||
View: //depot/... //client/...
|
View: //depot/... //client/...
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
kill_p4d() {
|
kill_p4d() {
|
||||||
@ -69,5 +99,6 @@ kill_p4d() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cleanup_git() {
|
cleanup_git() {
|
||||||
rm -rf "$git"
|
rm -rf "$git" &&
|
||||||
|
mkdir "$git"
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,8 @@ test_expect_success 'git p4 sync uninitialized repo' '
|
|||||||
test_when_finished cleanup_git &&
|
test_when_finished cleanup_git &&
|
||||||
(
|
(
|
||||||
cd "$git" &&
|
cd "$git" &&
|
||||||
test_must_fail git p4 sync
|
test_must_fail git p4 sync 2>errs &&
|
||||||
|
test_i18ngrep "Perhaps you never did" errs
|
||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -126,150 +127,24 @@ test_expect_success 'clone two dirs, @all, conflicting files' '
|
|||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'exit when p4 fails to produce marshaled output' '
|
test_expect_success 'exit when p4 fails to produce marshaled output' '
|
||||||
badp4dir="$TRASH_DIRECTORY/badp4dir" &&
|
mkdir badp4dir &&
|
||||||
mkdir "$badp4dir" &&
|
test_when_finished "rm badp4dir/p4 && rmdir badp4dir" &&
|
||||||
test_when_finished "rm \"$badp4dir/p4\" && rmdir \"$badp4dir\"" &&
|
cat >badp4dir/p4 <<-EOF &&
|
||||||
cat >"$badp4dir"/p4 <<-EOF &&
|
|
||||||
#!$SHELL_PATH
|
#!$SHELL_PATH
|
||||||
exit 1
|
exit 1
|
||||||
EOF
|
EOF
|
||||||
chmod 755 "$badp4dir"/p4 &&
|
chmod 755 badp4dir/p4 &&
|
||||||
PATH="$badp4dir:$PATH" git p4 clone --dest="$git" //depot >errs 2>&1 ; retval=$? &&
|
|
||||||
test $retval -eq 1 &&
|
|
||||||
test_must_fail grep -q Traceback errs
|
|
||||||
'
|
|
||||||
|
|
||||||
test_expect_success 'add p4 files with wildcards in the names' '
|
|
||||||
(
|
(
|
||||||
cd "$cli" &&
|
PATH="$TRASH_DIRECTORY/badp4dir:$PATH" &&
|
||||||
echo file-wild-hash >file-wild#hash &&
|
export PATH &&
|
||||||
echo file-wild-star >file-wild\*star &&
|
test_expect_code 1 git p4 clone --dest="$git" //depot >errs 2>&1
|
||||||
echo file-wild-at >file-wild@at &&
|
|
||||||
echo file-wild-percent >file-wild%percent &&
|
|
||||||
p4 add -f file-wild* &&
|
|
||||||
p4 submit -d "file wildcards"
|
|
||||||
)
|
|
||||||
'
|
|
||||||
|
|
||||||
test_expect_success 'wildcard files git p4 clone' '
|
|
||||||
git p4 clone --dest="$git" //depot &&
|
|
||||||
test_when_finished cleanup_git &&
|
|
||||||
(
|
|
||||||
cd "$git" &&
|
|
||||||
test -f file-wild#hash &&
|
|
||||||
test -f file-wild\*star &&
|
|
||||||
test -f file-wild@at &&
|
|
||||||
test -f file-wild%percent
|
|
||||||
)
|
|
||||||
'
|
|
||||||
|
|
||||||
test_expect_success 'wildcard files submit back to p4, add' '
|
|
||||||
test_when_finished cleanup_git &&
|
|
||||||
git p4 clone --dest="$git" //depot &&
|
|
||||||
(
|
|
||||||
cd "$git" &&
|
|
||||||
echo git-wild-hash >git-wild#hash &&
|
|
||||||
echo git-wild-star >git-wild\*star &&
|
|
||||||
echo git-wild-at >git-wild@at &&
|
|
||||||
echo git-wild-percent >git-wild%percent &&
|
|
||||||
git add git-wild* &&
|
|
||||||
git commit -m "add some wildcard filenames" &&
|
|
||||||
git config git-p4.skipSubmitEdit true &&
|
|
||||||
git p4 submit
|
|
||||||
) &&
|
) &&
|
||||||
(
|
cat errs &&
|
||||||
cd "$cli" &&
|
! test_i18ngrep Traceback errs
|
||||||
test_path_is_file git-wild#hash &&
|
|
||||||
test_path_is_file git-wild\*star &&
|
|
||||||
test_path_is_file git-wild@at &&
|
|
||||||
test_path_is_file git-wild%percent
|
|
||||||
)
|
|
||||||
'
|
|
||||||
|
|
||||||
test_expect_success 'wildcard files submit back to p4, modify' '
|
|
||||||
test_when_finished cleanup_git &&
|
|
||||||
git p4 clone --dest="$git" //depot &&
|
|
||||||
(
|
|
||||||
cd "$git" &&
|
|
||||||
echo new-line >>git-wild#hash &&
|
|
||||||
echo new-line >>git-wild\*star &&
|
|
||||||
echo new-line >>git-wild@at &&
|
|
||||||
echo new-line >>git-wild%percent &&
|
|
||||||
git add git-wild* &&
|
|
||||||
git commit -m "modify the wildcard files" &&
|
|
||||||
git config git-p4.skipSubmitEdit true &&
|
|
||||||
git p4 submit
|
|
||||||
) &&
|
|
||||||
(
|
|
||||||
cd "$cli" &&
|
|
||||||
test_line_count = 2 git-wild#hash &&
|
|
||||||
test_line_count = 2 git-wild\*star &&
|
|
||||||
test_line_count = 2 git-wild@at &&
|
|
||||||
test_line_count = 2 git-wild%percent
|
|
||||||
)
|
|
||||||
'
|
|
||||||
|
|
||||||
test_expect_success 'wildcard files submit back to p4, copy' '
|
|
||||||
test_when_finished cleanup_git &&
|
|
||||||
git p4 clone --dest="$git" //depot &&
|
|
||||||
(
|
|
||||||
cd "$git" &&
|
|
||||||
cp file2 git-wild-cp#hash &&
|
|
||||||
git add git-wild-cp#hash &&
|
|
||||||
cp git-wild\*star file-wild-3 &&
|
|
||||||
git add file-wild-3 &&
|
|
||||||
git commit -m "wildcard copies" &&
|
|
||||||
git config git-p4.detectCopies true &&
|
|
||||||
git config git-p4.detectCopiesHarder true &&
|
|
||||||
git config git-p4.skipSubmitEdit true &&
|
|
||||||
git p4 submit
|
|
||||||
) &&
|
|
||||||
(
|
|
||||||
cd "$cli" &&
|
|
||||||
test_path_is_file git-wild-cp#hash &&
|
|
||||||
test_path_is_file file-wild-3
|
|
||||||
)
|
|
||||||
'
|
|
||||||
|
|
||||||
test_expect_success 'wildcard files submit back to p4, rename' '
|
|
||||||
test_when_finished cleanup_git &&
|
|
||||||
git p4 clone --dest="$git" //depot &&
|
|
||||||
(
|
|
||||||
cd "$git" &&
|
|
||||||
git mv git-wild@at file-wild-4 &&
|
|
||||||
git mv file-wild-3 git-wild-cp%percent &&
|
|
||||||
git commit -m "wildcard renames" &&
|
|
||||||
git config git-p4.detectRenames true &&
|
|
||||||
git config git-p4.skipSubmitEdit true &&
|
|
||||||
git p4 submit
|
|
||||||
) &&
|
|
||||||
(
|
|
||||||
cd "$cli" &&
|
|
||||||
test_path_is_missing git-wild@at &&
|
|
||||||
test_path_is_file git-wild-cp%percent
|
|
||||||
)
|
|
||||||
'
|
|
||||||
|
|
||||||
test_expect_success 'wildcard files submit back to p4, delete' '
|
|
||||||
test_when_finished cleanup_git &&
|
|
||||||
git p4 clone --dest="$git" //depot &&
|
|
||||||
(
|
|
||||||
cd "$git" &&
|
|
||||||
git rm git-wild* &&
|
|
||||||
git commit -m "delete the wildcard files" &&
|
|
||||||
git config git-p4.skipSubmitEdit true &&
|
|
||||||
git p4 submit
|
|
||||||
) &&
|
|
||||||
(
|
|
||||||
cd "$cli" &&
|
|
||||||
test_path_is_missing git-wild#hash &&
|
|
||||||
test_path_is_missing git-wild\*star &&
|
|
||||||
test_path_is_missing git-wild@at &&
|
|
||||||
test_path_is_missing git-wild%percent
|
|
||||||
)
|
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'clone bare' '
|
test_expect_success 'clone bare' '
|
||||||
|
rm -rf "$git" &&
|
||||||
git p4 clone --dest="$git" --bare //depot &&
|
git p4 clone --dest="$git" --bare //depot &&
|
||||||
test_when_finished cleanup_git &&
|
test_when_finished cleanup_git &&
|
||||||
(
|
(
|
||||||
@ -280,133 +155,6 @@ test_expect_success 'clone bare' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
p4_add_user() {
|
|
||||||
name=$1 fullname=$2 &&
|
|
||||||
p4 user -f -i <<-EOF &&
|
|
||||||
User: $name
|
|
||||||
Email: $name@localhost
|
|
||||||
FullName: $fullname
|
|
||||||
EOF
|
|
||||||
p4 passwd -P secret $name
|
|
||||||
}
|
|
||||||
|
|
||||||
p4_grant_admin() {
|
|
||||||
name=$1 &&
|
|
||||||
{
|
|
||||||
p4 protect -o &&
|
|
||||||
echo " admin user $name * //depot/..."
|
|
||||||
} | p4 protect -i
|
|
||||||
}
|
|
||||||
|
|
||||||
p4_check_commit_author() {
|
|
||||||
file=$1 user=$2 &&
|
|
||||||
p4 changes -m 1 //depot/$file | grep -q $user
|
|
||||||
}
|
|
||||||
|
|
||||||
make_change_by_user() {
|
|
||||||
file=$1 name=$2 email=$3 &&
|
|
||||||
echo "username: a change by $name" >>"$file" &&
|
|
||||||
git add "$file" &&
|
|
||||||
git commit --author "$name <$email>" -m "a change by $name"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Test username support, submitting as user 'alice'
|
|
||||||
test_expect_success 'preserve users' '
|
|
||||||
p4_add_user alice Alice &&
|
|
||||||
p4_add_user bob Bob &&
|
|
||||||
p4_grant_admin alice &&
|
|
||||||
git p4 clone --dest="$git" //depot &&
|
|
||||||
test_when_finished cleanup_git &&
|
|
||||||
(
|
|
||||||
cd "$git" &&
|
|
||||||
echo "username: a change by alice" >>file1 &&
|
|
||||||
echo "username: a change by bob" >>file2 &&
|
|
||||||
git commit --author "Alice <alice@localhost>" -m "a change by alice" file1 &&
|
|
||||||
git commit --author "Bob <bob@localhost>" -m "a change by bob" file2 &&
|
|
||||||
git config git-p4.skipSubmitEditCheck true &&
|
|
||||||
P4EDITOR=touch P4USER=alice P4PASSWD=secret git p4 commit --preserve-user &&
|
|
||||||
p4_check_commit_author file1 alice &&
|
|
||||||
p4_check_commit_author file2 bob
|
|
||||||
)
|
|
||||||
'
|
|
||||||
|
|
||||||
# Test username support, submitting as bob, who lacks admin rights. Should
|
|
||||||
# not submit change to p4 (git diff should show deltas).
|
|
||||||
test_expect_success 'refuse to preserve users without perms' '
|
|
||||||
git p4 clone --dest="$git" //depot &&
|
|
||||||
test_when_finished cleanup_git &&
|
|
||||||
(
|
|
||||||
cd "$git" &&
|
|
||||||
git config git-p4.skipSubmitEditCheck true &&
|
|
||||||
echo "username-noperms: a change by alice" >>file1 &&
|
|
||||||
git commit --author "Alice <alice@localhost>" -m "perms: a change by alice" file1 &&
|
|
||||||
P4EDITOR=touch P4USER=bob P4PASSWD=secret &&
|
|
||||||
export P4EDITOR P4USER P4PASSWD &&
|
|
||||||
test_must_fail git p4 commit --preserve-user &&
|
|
||||||
! git diff --exit-code HEAD..p4/master
|
|
||||||
)
|
|
||||||
'
|
|
||||||
|
|
||||||
# What happens with unknown author? Without allowMissingP4Users it should fail.
|
|
||||||
test_expect_success 'preserve user where author is unknown to p4' '
|
|
||||||
git p4 clone --dest="$git" //depot &&
|
|
||||||
test_when_finished cleanup_git &&
|
|
||||||
(
|
|
||||||
cd "$git" &&
|
|
||||||
git config git-p4.skipSubmitEditCheck true &&
|
|
||||||
echo "username-bob: a change by bob" >>file1 &&
|
|
||||||
git commit --author "Bob <bob@localhost>" -m "preserve: a change by bob" file1 &&
|
|
||||||
echo "username-unknown: a change by charlie" >>file1 &&
|
|
||||||
git commit --author "Charlie <charlie@localhost>" -m "preserve: a change by charlie" file1 &&
|
|
||||||
P4EDITOR=touch P4USER=alice P4PASSWD=secret &&
|
|
||||||
export P4EDITOR P4USER P4PASSWD &&
|
|
||||||
test_must_fail git p4 commit --preserve-user &&
|
|
||||||
! git diff --exit-code HEAD..p4/master &&
|
|
||||||
|
|
||||||
echo "$0: repeat with allowMissingP4Users enabled" &&
|
|
||||||
git config git-p4.allowMissingP4Users true &&
|
|
||||||
git config git-p4.preserveUser true &&
|
|
||||||
git p4 commit &&
|
|
||||||
git diff --exit-code HEAD..p4/master &&
|
|
||||||
p4_check_commit_author file1 alice
|
|
||||||
)
|
|
||||||
'
|
|
||||||
|
|
||||||
# If we're *not* using --preserve-user, git p4 should warn if we're submitting
|
|
||||||
# changes that are not all ours.
|
|
||||||
# Test: user in p4 and user unknown to p4.
|
|
||||||
# Test: warning disabled and user is the same.
|
|
||||||
test_expect_success 'not preserving user with mixed authorship' '
|
|
||||||
git p4 clone --dest="$git" //depot &&
|
|
||||||
test_when_finished cleanup_git &&
|
|
||||||
(
|
|
||||||
cd "$git" &&
|
|
||||||
git config git-p4.skipSubmitEditCheck true &&
|
|
||||||
p4_add_user derek Derek &&
|
|
||||||
|
|
||||||
make_change_by_user usernamefile3 Derek derek@localhost &&
|
|
||||||
P4EDITOR=cat P4USER=alice P4PASSWD=secret &&
|
|
||||||
export P4EDITOR P4USER P4PASSWD &&
|
|
||||||
git p4 commit |\
|
|
||||||
grep "git author derek@localhost does not match" &&
|
|
||||||
|
|
||||||
make_change_by_user usernamefile3 Charlie charlie@localhost &&
|
|
||||||
git p4 commit |\
|
|
||||||
grep "git author charlie@localhost does not match" &&
|
|
||||||
|
|
||||||
make_change_by_user usernamefile3 alice alice@localhost &&
|
|
||||||
git p4 commit |\
|
|
||||||
test_must_fail grep "git author.*does not match" &&
|
|
||||||
|
|
||||||
git config git-p4.skipUserNameCheck true &&
|
|
||||||
make_change_by_user usernamefile3 Charlie charlie@localhost &&
|
|
||||||
git p4 commit |\
|
|
||||||
test_must_fail grep "git author.*does not match" &&
|
|
||||||
|
|
||||||
p4_check_commit_author usernamefile3 alice
|
|
||||||
)
|
|
||||||
'
|
|
||||||
|
|
||||||
marshal_dump() {
|
marshal_dump() {
|
||||||
what=$1
|
what=$1
|
||||||
"$PYTHON_PATH" -c 'import marshal, sys; d = marshal.load(sys.stdin); print d["'$what'"]'
|
"$PYTHON_PATH" -c 'import marshal, sys; d = marshal.load(sys.stdin); print d["'$what'"]'
|
||||||
@ -429,146 +177,6 @@ test_expect_success 'initial import time from top change time' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
# Rename a file and confirm that rename is not detected in P4.
|
|
||||||
# Rename the new file again with detectRenames option enabled and confirm that
|
|
||||||
# this is detected in P4.
|
|
||||||
# Rename the new file again adding an extra line, configure a big threshold in
|
|
||||||
# detectRenames and confirm that rename is not detected in P4.
|
|
||||||
# Repeat, this time with a smaller threshold and confirm that the rename is
|
|
||||||
# detected in P4.
|
|
||||||
test_expect_success 'detect renames' '
|
|
||||||
git p4 clone --dest="$git" //depot@all &&
|
|
||||||
test_when_finished cleanup_git &&
|
|
||||||
(
|
|
||||||
cd "$git" &&
|
|
||||||
git config git-p4.skipSubmitEdit true &&
|
|
||||||
|
|
||||||
git mv file1 file4 &&
|
|
||||||
git commit -a -m "Rename file1 to file4" &&
|
|
||||||
git diff-tree -r -M HEAD &&
|
|
||||||
git p4 submit &&
|
|
||||||
p4 filelog //depot/file4 &&
|
|
||||||
p4 filelog //depot/file4 | test_must_fail grep -q "branch from" &&
|
|
||||||
|
|
||||||
git mv file4 file5 &&
|
|
||||||
git commit -a -m "Rename file4 to file5" &&
|
|
||||||
git diff-tree -r -M HEAD &&
|
|
||||||
git config git-p4.detectRenames true &&
|
|
||||||
git p4 submit &&
|
|
||||||
p4 filelog //depot/file5 &&
|
|
||||||
p4 filelog //depot/file5 | grep -q "branch from //depot/file4" &&
|
|
||||||
|
|
||||||
git mv file5 file6 &&
|
|
||||||
echo update >>file6 &&
|
|
||||||
git add file6 &&
|
|
||||||
git commit -a -m "Rename file5 to file6 with changes" &&
|
|
||||||
git diff-tree -r -M HEAD &&
|
|
||||||
level=$(git diff-tree -r -M HEAD | sed 1d | cut -f1 | cut -d" " -f5 | sed "s/R0*//") &&
|
|
||||||
test -n "$level" && test "$level" -gt 0 && test "$level" -lt 98 &&
|
|
||||||
git config git-p4.detectRenames $(($level + 2)) &&
|
|
||||||
git p4 submit &&
|
|
||||||
p4 filelog //depot/file6 &&
|
|
||||||
p4 filelog //depot/file6 | test_must_fail grep -q "branch from" &&
|
|
||||||
|
|
||||||
git mv file6 file7 &&
|
|
||||||
echo update >>file7 &&
|
|
||||||
git add file7 &&
|
|
||||||
git commit -a -m "Rename file6 to file7 with changes" &&
|
|
||||||
git diff-tree -r -M HEAD &&
|
|
||||||
level=$(git diff-tree -r -M HEAD | sed 1d | cut -f1 | cut -d" " -f5 | sed "s/R0*//") &&
|
|
||||||
test -n "$level" && test "$level" -gt 2 && test "$level" -lt 100 &&
|
|
||||||
git config git-p4.detectRenames $(($level - 2)) &&
|
|
||||||
git p4 submit &&
|
|
||||||
p4 filelog //depot/file7 &&
|
|
||||||
p4 filelog //depot/file7 | grep -q "branch from //depot/file6"
|
|
||||||
)
|
|
||||||
'
|
|
||||||
|
|
||||||
# Copy a file and confirm that copy is not detected in P4.
|
|
||||||
# Copy a file with detectCopies option enabled and confirm that copy is not
|
|
||||||
# detected in P4.
|
|
||||||
# Modify and copy a file with detectCopies option enabled and confirm that copy
|
|
||||||
# is detected in P4.
|
|
||||||
# Copy a file with detectCopies and detectCopiesHarder options enabled and
|
|
||||||
# confirm that copy is detected in P4.
|
|
||||||
# Modify and copy a file, configure a bigger threshold in detectCopies and
|
|
||||||
# confirm that copy is not detected in P4.
|
|
||||||
# Modify and copy a file, configure a smaller threshold in detectCopies and
|
|
||||||
# confirm that copy is detected in P4.
|
|
||||||
test_expect_success 'detect copies' '
|
|
||||||
git p4 clone --dest="$git" //depot@all &&
|
|
||||||
test_when_finished cleanup_git &&
|
|
||||||
(
|
|
||||||
cd "$git" &&
|
|
||||||
git config git-p4.skipSubmitEdit true &&
|
|
||||||
|
|
||||||
cp file2 file8 &&
|
|
||||||
git add file8 &&
|
|
||||||
git commit -a -m "Copy file2 to file8" &&
|
|
||||||
git diff-tree -r -C HEAD &&
|
|
||||||
git p4 submit &&
|
|
||||||
p4 filelog //depot/file8 &&
|
|
||||||
p4 filelog //depot/file8 | test_must_fail grep -q "branch from" &&
|
|
||||||
|
|
||||||
cp file2 file9 &&
|
|
||||||
git add file9 &&
|
|
||||||
git commit -a -m "Copy file2 to file9" &&
|
|
||||||
git diff-tree -r -C HEAD &&
|
|
||||||
git config git-p4.detectCopies true &&
|
|
||||||
git p4 submit &&
|
|
||||||
p4 filelog //depot/file9 &&
|
|
||||||
p4 filelog //depot/file9 | test_must_fail grep -q "branch from" &&
|
|
||||||
|
|
||||||
echo "file2" >>file2 &&
|
|
||||||
cp file2 file10 &&
|
|
||||||
git add file2 file10 &&
|
|
||||||
git commit -a -m "Modify and copy file2 to file10" &&
|
|
||||||
git diff-tree -r -C HEAD &&
|
|
||||||
git p4 submit &&
|
|
||||||
p4 filelog //depot/file10 &&
|
|
||||||
p4 filelog //depot/file10 | grep -q "branch from //depot/file" &&
|
|
||||||
|
|
||||||
cp file2 file11 &&
|
|
||||||
git add file11 &&
|
|
||||||
git commit -a -m "Copy file2 to file11" &&
|
|
||||||
git diff-tree -r -C --find-copies-harder HEAD &&
|
|
||||||
src=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f2) &&
|
|
||||||
test "$src" = file10 &&
|
|
||||||
git config git-p4.detectCopiesHarder true &&
|
|
||||||
git p4 submit &&
|
|
||||||
p4 filelog //depot/file11 &&
|
|
||||||
p4 filelog //depot/file11 | grep -q "branch from //depot/file" &&
|
|
||||||
|
|
||||||
cp file2 file12 &&
|
|
||||||
echo "some text" >>file12 &&
|
|
||||||
git add file12 &&
|
|
||||||
git commit -a -m "Copy file2 to file12 with changes" &&
|
|
||||||
git diff-tree -r -C --find-copies-harder HEAD &&
|
|
||||||
level=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f1 | cut -d" " -f5 | sed "s/C0*//") &&
|
|
||||||
test -n "$level" && test "$level" -gt 0 && test "$level" -lt 98 &&
|
|
||||||
src=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f2) &&
|
|
||||||
test "$src" = file10 &&
|
|
||||||
git config git-p4.detectCopies $(($level + 2)) &&
|
|
||||||
git p4 submit &&
|
|
||||||
p4 filelog //depot/file12 &&
|
|
||||||
p4 filelog //depot/file12 | test_must_fail grep -q "branch from" &&
|
|
||||||
|
|
||||||
cp file2 file13 &&
|
|
||||||
echo "different text" >>file13 &&
|
|
||||||
git add file13 &&
|
|
||||||
git commit -a -m "Copy file2 to file13 with changes" &&
|
|
||||||
git diff-tree -r -C --find-copies-harder HEAD &&
|
|
||||||
level=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f1 | cut -d" " -f5 | sed "s/C0*//") &&
|
|
||||||
test -n "$level" && test "$level" -gt 2 && test "$level" -lt 100 &&
|
|
||||||
src=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f2) &&
|
|
||||||
test "$src" = file10 &&
|
|
||||||
git config git-p4.detectCopies $(($level - 2)) &&
|
|
||||||
git p4 submit &&
|
|
||||||
p4 filelog //depot/file13 &&
|
|
||||||
p4 filelog //depot/file13 | grep -q "branch from //depot/file"
|
|
||||||
)
|
|
||||||
'
|
|
||||||
|
|
||||||
test_expect_success 'kill p4d' '
|
test_expect_success 'kill p4d' '
|
||||||
kill_p4d
|
kill_p4d
|
||||||
'
|
'
|
||||||
|
@ -78,20 +78,19 @@ test_expect_success 'skipSubmitEditCheck' '
|
|||||||
test_expect_success 'no config, edited' '
|
test_expect_success 'no config, edited' '
|
||||||
git p4 clone --dest="$git" //depot &&
|
git p4 clone --dest="$git" //depot &&
|
||||||
test_when_finished cleanup_git &&
|
test_when_finished cleanup_git &&
|
||||||
ed="$TRASH_DIRECTORY/ed.sh" &&
|
test_when_finished "rm ed.sh" &&
|
||||||
test_when_finished "rm \"$ed\"" &&
|
cat >ed.sh <<-EOF &&
|
||||||
cat >"$ed" <<-EOF &&
|
|
||||||
#!$SHELL_PATH
|
#!$SHELL_PATH
|
||||||
sleep 1
|
sleep 1
|
||||||
touch "\$1"
|
touch "\$1"
|
||||||
exit 0
|
exit 0
|
||||||
EOF
|
EOF
|
||||||
chmod 755 "$ed" &&
|
chmod 755 ed.sh &&
|
||||||
(
|
(
|
||||||
cd "$git" &&
|
cd "$git" &&
|
||||||
echo line >>file1 &&
|
echo line >>file1 &&
|
||||||
git commit -a -m "change 5" &&
|
git commit -a -m "change 5" &&
|
||||||
P4EDITOR="" EDITOR="\"$ed\"" git p4 submit &&
|
P4EDITOR="" EDITOR="\"$TRASH_DIRECTORY/ed.sh\"" git p4 submit &&
|
||||||
p4 changes //depot/... >wc &&
|
p4 changes //depot/... >wc &&
|
||||||
test_line_count = 5 wc
|
test_line_count = 5 wc
|
||||||
)
|
)
|
||||||
|
@ -39,10 +39,9 @@ test_expect_success 'clone --branch' '
|
|||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'clone --changesfile' '
|
test_expect_success 'clone --changesfile' '
|
||||||
cf="$TRASH_DIRECTORY/cf" &&
|
test_when_finished "rm cf" &&
|
||||||
test_when_finished "rm \"$cf\"" &&
|
printf "1\n3\n" >cf &&
|
||||||
printf "1\n3\n" >"$cf" &&
|
git p4 clone --changesfile="$TRASH_DIRECTORY/cf" --dest="$git" //depot &&
|
||||||
git p4 clone --changesfile="$cf" --dest="$git" //depot &&
|
|
||||||
test_when_finished cleanup_git &&
|
test_when_finished cleanup_git &&
|
||||||
(
|
(
|
||||||
cd "$git" &&
|
cd "$git" &&
|
||||||
@ -55,10 +54,9 @@ test_expect_success 'clone --changesfile' '
|
|||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'clone --changesfile, @all' '
|
test_expect_success 'clone --changesfile, @all' '
|
||||||
cf="$TRASH_DIRECTORY/cf" &&
|
test_when_finished "rm cf" &&
|
||||||
test_when_finished "rm \"$cf\"" &&
|
printf "1\n3\n" >cf &&
|
||||||
printf "1\n3\n" >"$cf" &&
|
test_must_fail git p4 clone --changesfile="$TRASH_DIRECTORY/cf" --dest="$git" //depot@all
|
||||||
test_must_fail git p4 clone --changesfile="$cf" --dest="$git" //depot@all
|
|
||||||
'
|
'
|
||||||
|
|
||||||
# imports both master and p4/master in refs/heads
|
# imports both master and p4/master in refs/heads
|
||||||
@ -128,7 +126,7 @@ test_expect_success 'clone --use-client-spec' '
|
|||||||
exec >/dev/null &&
|
exec >/dev/null &&
|
||||||
test_must_fail git p4 clone --dest="$git" --use-client-spec
|
test_must_fail git p4 clone --dest="$git" --use-client-spec
|
||||||
) &&
|
) &&
|
||||||
cli2="$TRASH_DIRECTORY/cli2" &&
|
cli2=$(test-path-utils real_path "$TRASH_DIRECTORY/cli2") &&
|
||||||
mkdir -p "$cli2" &&
|
mkdir -p "$cli2" &&
|
||||||
test_when_finished "rmdir \"$cli2\"" &&
|
test_when_finished "rmdir \"$cli2\"" &&
|
||||||
(
|
(
|
||||||
@ -151,7 +149,6 @@ test_expect_success 'clone --use-client-spec' '
|
|||||||
cleanup_git &&
|
cleanup_git &&
|
||||||
|
|
||||||
# same thing again, this time with variable instead of option
|
# same thing again, this time with variable instead of option
|
||||||
mkdir "$git" &&
|
|
||||||
(
|
(
|
||||||
cd "$git" &&
|
cd "$git" &&
|
||||||
git init &&
|
git init &&
|
||||||
|
@ -21,7 +21,7 @@ test_expect_success 'init depot' '
|
|||||||
# environment variable is set
|
# environment variable is set
|
||||||
test_expect_success 'P4CONFIG and absolute dir clone' '
|
test_expect_success 'P4CONFIG and absolute dir clone' '
|
||||||
printf "P4PORT=$P4PORT\nP4CLIENT=$P4CLIENT\n" >p4config &&
|
printf "P4PORT=$P4PORT\nP4CLIENT=$P4CLIENT\n" >p4config &&
|
||||||
test_when_finished "rm \"$TRASH_DIRECTORY/p4config\"" &&
|
test_when_finished "rm p4config" &&
|
||||||
test_when_finished cleanup_git &&
|
test_when_finished cleanup_git &&
|
||||||
(
|
(
|
||||||
P4CONFIG=p4config && export P4CONFIG &&
|
P4CONFIG=p4config && export P4CONFIG &&
|
||||||
@ -33,7 +33,7 @@ test_expect_success 'P4CONFIG and absolute dir clone' '
|
|||||||
# same thing, but with relative directory name, note missing $ on --dest
|
# same thing, but with relative directory name, note missing $ on --dest
|
||||||
test_expect_success 'P4CONFIG and relative dir clone' '
|
test_expect_success 'P4CONFIG and relative dir clone' '
|
||||||
printf "P4PORT=$P4PORT\nP4CLIENT=$P4CLIENT\n" >p4config &&
|
printf "P4PORT=$P4PORT\nP4CLIENT=$P4CLIENT\n" >p4config &&
|
||||||
test_when_finished "rm \"$TRASH_DIRECTORY/p4config\"" &&
|
test_when_finished "rm p4config" &&
|
||||||
test_when_finished cleanup_git &&
|
test_when_finished cleanup_git &&
|
||||||
(
|
(
|
||||||
P4CONFIG=p4config && export P4CONFIG &&
|
P4CONFIG=p4config && export P4CONFIG &&
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
test_description='git-p4 rcs keywords'
|
test_description='git p4 rcs keywords'
|
||||||
|
|
||||||
. ./lib-git-p4.sh
|
. ./lib-git-p4.sh
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ test_expect_success 'scrub ko files differently' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
# hack; git-p4 submit should do it on its own
|
# hack; git p4 submit should do it on its own
|
||||||
test_expect_success 'cleanup after failure' '
|
test_expect_success 'cleanup after failure' '
|
||||||
(
|
(
|
||||||
cd "$cli" &&
|
cd "$cli" &&
|
||||||
@ -193,7 +193,7 @@ test_expect_success 'do not scrub plain text' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
# hack; git-p4 submit should do it on its own
|
# hack; git p4 submit should do it on its own
|
||||||
test_expect_success 'cleanup after failure 2' '
|
test_expect_success 'cleanup after failure 2' '
|
||||||
(
|
(
|
||||||
cd "$cli" &&
|
cd "$cli" &&
|
||||||
@ -244,7 +244,7 @@ test_expect_success 'cope with rcs keyword expansion damage' '
|
|||||||
cd "$git" &&
|
cd "$git" &&
|
||||||
git config git-p4.skipSubmitEdit true &&
|
git config git-p4.skipSubmitEdit true &&
|
||||||
git config git-p4.attemptRCSCleanup true &&
|
git config git-p4.attemptRCSCleanup true &&
|
||||||
(cd ../cli && p4_append_to_file kwfile1.c) &&
|
(cd "$cli" && p4_append_to_file kwfile1.c) &&
|
||||||
old_lines=$(wc -l <kwfile1.c) &&
|
old_lines=$(wc -l <kwfile1.c) &&
|
||||||
"$PERL_PATH" -n -i -e "print unless m/Revision:/" kwfile1.c &&
|
"$PERL_PATH" -n -i -e "print unless m/Revision:/" kwfile1.c &&
|
||||||
new_lines=$(wc -l <kwfile1.c) &&
|
new_lines=$(wc -l <kwfile1.c) &&
|
||||||
|
147
t/t9812-git-p4-wildcards.sh
Executable file
147
t/t9812-git-p4-wildcards.sh
Executable file
@ -0,0 +1,147 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
test_description='git p4 wildcards'
|
||||||
|
|
||||||
|
. ./lib-git-p4.sh
|
||||||
|
|
||||||
|
test_expect_success 'start p4d' '
|
||||||
|
start_p4d
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'add p4 files with wildcards in the names' '
|
||||||
|
(
|
||||||
|
cd "$cli" &&
|
||||||
|
printf "file2\nhas\nsome\nrandom\ntext\n" >file2 &&
|
||||||
|
p4 add file2 &&
|
||||||
|
echo file-wild-hash >file-wild#hash &&
|
||||||
|
echo file-wild-star >file-wild\*star &&
|
||||||
|
echo file-wild-at >file-wild@at &&
|
||||||
|
echo file-wild-percent >file-wild%percent &&
|
||||||
|
p4 add -f file-wild* &&
|
||||||
|
p4 submit -d "file wildcards"
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'wildcard files git p4 clone' '
|
||||||
|
git p4 clone --dest="$git" //depot &&
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
(
|
||||||
|
cd "$git" &&
|
||||||
|
test -f file-wild#hash &&
|
||||||
|
test -f file-wild\*star &&
|
||||||
|
test -f file-wild@at &&
|
||||||
|
test -f file-wild%percent
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'wildcard files submit back to p4, add' '
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
git p4 clone --dest="$git" //depot &&
|
||||||
|
(
|
||||||
|
cd "$git" &&
|
||||||
|
echo git-wild-hash >git-wild#hash &&
|
||||||
|
echo git-wild-star >git-wild\*star &&
|
||||||
|
echo git-wild-at >git-wild@at &&
|
||||||
|
echo git-wild-percent >git-wild%percent &&
|
||||||
|
git add git-wild* &&
|
||||||
|
git commit -m "add some wildcard filenames" &&
|
||||||
|
git config git-p4.skipSubmitEdit true &&
|
||||||
|
git p4 submit
|
||||||
|
) &&
|
||||||
|
(
|
||||||
|
cd "$cli" &&
|
||||||
|
test_path_is_file git-wild#hash &&
|
||||||
|
test_path_is_file git-wild\*star &&
|
||||||
|
test_path_is_file git-wild@at &&
|
||||||
|
test_path_is_file git-wild%percent
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'wildcard files submit back to p4, modify' '
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
git p4 clone --dest="$git" //depot &&
|
||||||
|
(
|
||||||
|
cd "$git" &&
|
||||||
|
echo new-line >>git-wild#hash &&
|
||||||
|
echo new-line >>git-wild\*star &&
|
||||||
|
echo new-line >>git-wild@at &&
|
||||||
|
echo new-line >>git-wild%percent &&
|
||||||
|
git add git-wild* &&
|
||||||
|
git commit -m "modify the wildcard files" &&
|
||||||
|
git config git-p4.skipSubmitEdit true &&
|
||||||
|
git p4 submit
|
||||||
|
) &&
|
||||||
|
(
|
||||||
|
cd "$cli" &&
|
||||||
|
test_line_count = 2 git-wild#hash &&
|
||||||
|
test_line_count = 2 git-wild\*star &&
|
||||||
|
test_line_count = 2 git-wild@at &&
|
||||||
|
test_line_count = 2 git-wild%percent
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'wildcard files submit back to p4, copy' '
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
git p4 clone --dest="$git" //depot &&
|
||||||
|
(
|
||||||
|
cd "$git" &&
|
||||||
|
cp file2 git-wild-cp#hash &&
|
||||||
|
git add git-wild-cp#hash &&
|
||||||
|
cp git-wild\*star file-wild-3 &&
|
||||||
|
git add file-wild-3 &&
|
||||||
|
git commit -m "wildcard copies" &&
|
||||||
|
git config git-p4.detectCopies true &&
|
||||||
|
git config git-p4.detectCopiesHarder true &&
|
||||||
|
git config git-p4.skipSubmitEdit true &&
|
||||||
|
git p4 submit
|
||||||
|
) &&
|
||||||
|
(
|
||||||
|
cd "$cli" &&
|
||||||
|
test_path_is_file git-wild-cp#hash &&
|
||||||
|
test_path_is_file file-wild-3
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'wildcard files submit back to p4, rename' '
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
git p4 clone --dest="$git" //depot &&
|
||||||
|
(
|
||||||
|
cd "$git" &&
|
||||||
|
git mv git-wild@at file-wild-4 &&
|
||||||
|
git mv file-wild-3 git-wild-cp%percent &&
|
||||||
|
git commit -m "wildcard renames" &&
|
||||||
|
git config git-p4.detectRenames true &&
|
||||||
|
git config git-p4.skipSubmitEdit true &&
|
||||||
|
git p4 submit
|
||||||
|
) &&
|
||||||
|
(
|
||||||
|
cd "$cli" &&
|
||||||
|
test_path_is_missing git-wild@at &&
|
||||||
|
test_path_is_file git-wild-cp%percent
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'wildcard files submit back to p4, delete' '
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
git p4 clone --dest="$git" //depot &&
|
||||||
|
(
|
||||||
|
cd "$git" &&
|
||||||
|
git rm git-wild* &&
|
||||||
|
git commit -m "delete the wildcard files" &&
|
||||||
|
git config git-p4.skipSubmitEdit true &&
|
||||||
|
git p4 submit
|
||||||
|
) &&
|
||||||
|
(
|
||||||
|
cd "$cli" &&
|
||||||
|
test_path_is_missing git-wild#hash &&
|
||||||
|
test_path_is_missing git-wild\*star &&
|
||||||
|
test_path_is_missing git-wild@at &&
|
||||||
|
test_path_is_missing git-wild%percent
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'kill p4d' '
|
||||||
|
kill_p4d
|
||||||
|
'
|
||||||
|
|
||||||
|
test_done
|
153
t/t9813-git-p4-preserve-users.sh
Executable file
153
t/t9813-git-p4-preserve-users.sh
Executable file
@ -0,0 +1,153 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
test_description='git p4 preserve users'
|
||||||
|
|
||||||
|
. ./lib-git-p4.sh
|
||||||
|
|
||||||
|
test_expect_success 'start p4d' '
|
||||||
|
start_p4d
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'create files' '
|
||||||
|
(
|
||||||
|
cd "$cli" &&
|
||||||
|
p4 client -o | sed "/LineEnd/s/:.*/:unix/" | p4 client -i &&
|
||||||
|
echo file1 >file1 &&
|
||||||
|
echo file2 >file2 &&
|
||||||
|
p4 add file1 file2 &&
|
||||||
|
p4 submit -d "add files"
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
p4_add_user() {
|
||||||
|
name=$1 fullname=$2 &&
|
||||||
|
p4 user -f -i <<-EOF &&
|
||||||
|
User: $name
|
||||||
|
Email: $name@localhost
|
||||||
|
FullName: $fullname
|
||||||
|
EOF
|
||||||
|
p4 passwd -P secret $name
|
||||||
|
}
|
||||||
|
|
||||||
|
p4_grant_admin() {
|
||||||
|
name=$1 &&
|
||||||
|
{
|
||||||
|
p4 protect -o &&
|
||||||
|
echo " admin user $name * //depot/..."
|
||||||
|
} | p4 protect -i
|
||||||
|
}
|
||||||
|
|
||||||
|
p4_check_commit_author() {
|
||||||
|
file=$1 user=$2 &&
|
||||||
|
p4 changes -m 1 //depot/$file | grep -q $user
|
||||||
|
}
|
||||||
|
|
||||||
|
make_change_by_user() {
|
||||||
|
file=$1 name=$2 email=$3 &&
|
||||||
|
echo "username: a change by $name" >>"$file" &&
|
||||||
|
git add "$file" &&
|
||||||
|
git commit --author "$name <$email>" -m "a change by $name"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Test username support, submitting as user 'alice'
|
||||||
|
test_expect_success 'preserve users' '
|
||||||
|
p4_add_user alice Alice &&
|
||||||
|
p4_add_user bob Bob &&
|
||||||
|
p4_grant_admin alice &&
|
||||||
|
git p4 clone --dest="$git" //depot &&
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
(
|
||||||
|
cd "$git" &&
|
||||||
|
echo "username: a change by alice" >>file1 &&
|
||||||
|
echo "username: a change by bob" >>file2 &&
|
||||||
|
git commit --author "Alice <alice@localhost>" -m "a change by alice" file1 &&
|
||||||
|
git commit --author "Bob <bob@localhost>" -m "a change by bob" file2 &&
|
||||||
|
git config git-p4.skipSubmitEditCheck true &&
|
||||||
|
P4EDITOR=touch P4USER=alice P4PASSWD=secret git p4 commit --preserve-user &&
|
||||||
|
p4_check_commit_author file1 alice &&
|
||||||
|
p4_check_commit_author file2 bob
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
# Test username support, submitting as bob, who lacks admin rights. Should
|
||||||
|
# not submit change to p4 (git diff should show deltas).
|
||||||
|
test_expect_success 'refuse to preserve users without perms' '
|
||||||
|
git p4 clone --dest="$git" //depot &&
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
(
|
||||||
|
cd "$git" &&
|
||||||
|
git config git-p4.skipSubmitEditCheck true &&
|
||||||
|
echo "username-noperms: a change by alice" >>file1 &&
|
||||||
|
git commit --author "Alice <alice@localhost>" -m "perms: a change by alice" file1 &&
|
||||||
|
P4EDITOR=touch P4USER=bob P4PASSWD=secret &&
|
||||||
|
export P4EDITOR P4USER P4PASSWD &&
|
||||||
|
test_must_fail git p4 commit --preserve-user &&
|
||||||
|
! git diff --exit-code HEAD..p4/master
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
# What happens with unknown author? Without allowMissingP4Users it should fail.
|
||||||
|
test_expect_success 'preserve user where author is unknown to p4' '
|
||||||
|
git p4 clone --dest="$git" //depot &&
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
(
|
||||||
|
cd "$git" &&
|
||||||
|
git config git-p4.skipSubmitEditCheck true &&
|
||||||
|
echo "username-bob: a change by bob" >>file1 &&
|
||||||
|
git commit --author "Bob <bob@localhost>" -m "preserve: a change by bob" file1 &&
|
||||||
|
echo "username-unknown: a change by charlie" >>file1 &&
|
||||||
|
git commit --author "Charlie <charlie@localhost>" -m "preserve: a change by charlie" file1 &&
|
||||||
|
P4EDITOR=touch P4USER=alice P4PASSWD=secret &&
|
||||||
|
export P4EDITOR P4USER P4PASSWD &&
|
||||||
|
test_must_fail git p4 commit --preserve-user &&
|
||||||
|
! git diff --exit-code HEAD..p4/master &&
|
||||||
|
|
||||||
|
echo "$0: repeat with allowMissingP4Users enabled" &&
|
||||||
|
git config git-p4.allowMissingP4Users true &&
|
||||||
|
git config git-p4.preserveUser true &&
|
||||||
|
git p4 commit &&
|
||||||
|
git diff --exit-code HEAD..p4/master &&
|
||||||
|
p4_check_commit_author file1 alice
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
# If we're *not* using --preserve-user, git-p4 should warn if we're submitting
|
||||||
|
# changes that are not all ours.
|
||||||
|
# Test: user in p4 and user unknown to p4.
|
||||||
|
# Test: warning disabled and user is the same.
|
||||||
|
test_expect_success 'not preserving user with mixed authorship' '
|
||||||
|
git p4 clone --dest="$git" //depot &&
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
(
|
||||||
|
cd "$git" &&
|
||||||
|
git config git-p4.skipSubmitEditCheck true &&
|
||||||
|
p4_add_user derek Derek &&
|
||||||
|
|
||||||
|
make_change_by_user usernamefile3 Derek derek@localhost &&
|
||||||
|
P4EDITOR=cat P4USER=alice P4PASSWD=secret &&
|
||||||
|
export P4EDITOR P4USER P4PASSWD &&
|
||||||
|
git p4 commit |\
|
||||||
|
grep "git author derek@localhost does not match" &&
|
||||||
|
|
||||||
|
make_change_by_user usernamefile3 Charlie charlie@localhost &&
|
||||||
|
git p4 commit |\
|
||||||
|
grep "git author charlie@localhost does not match" &&
|
||||||
|
|
||||||
|
make_change_by_user usernamefile3 alice alice@localhost &&
|
||||||
|
git p4 commit |\
|
||||||
|
test_must_fail grep "git author.*does not match" &&
|
||||||
|
|
||||||
|
git config git-p4.skipUserNameCheck true &&
|
||||||
|
make_change_by_user usernamefile3 Charlie charlie@localhost &&
|
||||||
|
git p4 commit |\
|
||||||
|
test_must_fail grep "git author.*does not match" &&
|
||||||
|
|
||||||
|
p4_check_commit_author usernamefile3 alice
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'kill p4d' '
|
||||||
|
kill_p4d
|
||||||
|
'
|
||||||
|
|
||||||
|
test_done
|
206
t/t9814-git-p4-rename.sh
Executable file
206
t/t9814-git-p4-rename.sh
Executable file
@ -0,0 +1,206 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
test_description='git p4 rename'
|
||||||
|
|
||||||
|
. ./lib-git-p4.sh
|
||||||
|
|
||||||
|
test_expect_success 'start p4d' '
|
||||||
|
start_p4d
|
||||||
|
'
|
||||||
|
|
||||||
|
# We rely on this behavior to detect for p4 move availability.
|
||||||
|
test_expect_success 'p4 help unknown returns 1' '
|
||||||
|
(
|
||||||
|
cd "$cli" &&
|
||||||
|
(
|
||||||
|
p4 help client >errs 2>&1
|
||||||
|
echo $? >retval
|
||||||
|
)
|
||||||
|
echo 0 >expected &&
|
||||||
|
test_cmp expected retval &&
|
||||||
|
rm retval &&
|
||||||
|
(
|
||||||
|
p4 help nosuchcommand >errs 2>&1
|
||||||
|
echo $? >retval
|
||||||
|
)
|
||||||
|
echo 1 >expected &&
|
||||||
|
test_cmp expected retval &&
|
||||||
|
rm retval
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'create files' '
|
||||||
|
(
|
||||||
|
cd "$cli" &&
|
||||||
|
p4 client -o | sed "/LineEnd/s/:.*/:unix/" | p4 client -i &&
|
||||||
|
cat >file1 <<-EOF &&
|
||||||
|
A large block of text
|
||||||
|
in file1 that will generate
|
||||||
|
enough context so that rename
|
||||||
|
and copy detection will find
|
||||||
|
something interesting to do.
|
||||||
|
EOF
|
||||||
|
cat >file2 <<-EOF &&
|
||||||
|
/*
|
||||||
|
* This blob looks a bit
|
||||||
|
* different.
|
||||||
|
*/
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
char text[200];
|
||||||
|
|
||||||
|
strcpy(text, "copy/rename this");
|
||||||
|
printf("text is %s\n", text);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
p4 add file1 file2 &&
|
||||||
|
p4 submit -d "add files"
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
# Rename a file and confirm that rename is not detected in P4.
|
||||||
|
# Rename the new file again with detectRenames option enabled and confirm that
|
||||||
|
# this is detected in P4.
|
||||||
|
# Rename the new file again adding an extra line, configure a big threshold in
|
||||||
|
# detectRenames and confirm that rename is not detected in P4.
|
||||||
|
# Repeat, this time with a smaller threshold and confirm that the rename is
|
||||||
|
# detected in P4.
|
||||||
|
test_expect_success 'detect renames' '
|
||||||
|
git p4 clone --dest="$git" //depot@all &&
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
(
|
||||||
|
cd "$git" &&
|
||||||
|
git config git-p4.skipSubmitEdit true &&
|
||||||
|
|
||||||
|
git mv file1 file4 &&
|
||||||
|
git commit -a -m "Rename file1 to file4" &&
|
||||||
|
git diff-tree -r -M HEAD &&
|
||||||
|
git p4 submit &&
|
||||||
|
p4 filelog //depot/file4 &&
|
||||||
|
p4 filelog //depot/file4 | test_must_fail grep -q "branch from" &&
|
||||||
|
|
||||||
|
git mv file4 file5 &&
|
||||||
|
git commit -a -m "Rename file4 to file5" &&
|
||||||
|
git diff-tree -r -M HEAD &&
|
||||||
|
git config git-p4.detectRenames true &&
|
||||||
|
git p4 submit &&
|
||||||
|
p4 filelog //depot/file5 &&
|
||||||
|
p4 filelog //depot/file5 | grep -q "branch from //depot/file4" &&
|
||||||
|
|
||||||
|
git mv file5 file6 &&
|
||||||
|
echo update >>file6 &&
|
||||||
|
git add file6 &&
|
||||||
|
git commit -a -m "Rename file5 to file6 with changes" &&
|
||||||
|
git diff-tree -r -M HEAD &&
|
||||||
|
level=$(git diff-tree -r -M HEAD | sed 1d | cut -f1 | cut -d" " -f5 | sed "s/R0*//") &&
|
||||||
|
test -n "$level" && test "$level" -gt 0 && test "$level" -lt 98 &&
|
||||||
|
git config git-p4.detectRenames $(($level + 2)) &&
|
||||||
|
git p4 submit &&
|
||||||
|
p4 filelog //depot/file6 &&
|
||||||
|
p4 filelog //depot/file6 | test_must_fail grep -q "branch from" &&
|
||||||
|
|
||||||
|
git mv file6 file7 &&
|
||||||
|
echo update >>file7 &&
|
||||||
|
git add file7 &&
|
||||||
|
git commit -a -m "Rename file6 to file7 with changes" &&
|
||||||
|
git diff-tree -r -M HEAD &&
|
||||||
|
level=$(git diff-tree -r -M HEAD | sed 1d | cut -f1 | cut -d" " -f5 | sed "s/R0*//") &&
|
||||||
|
test -n "$level" && test "$level" -gt 2 && test "$level" -lt 100 &&
|
||||||
|
git config git-p4.detectRenames $(($level - 2)) &&
|
||||||
|
git p4 submit &&
|
||||||
|
p4 filelog //depot/file7 &&
|
||||||
|
p4 filelog //depot/file7 | grep -q "branch from //depot/file6"
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
# Copy a file and confirm that copy is not detected in P4.
|
||||||
|
# Copy a file with detectCopies option enabled and confirm that copy is not
|
||||||
|
# detected in P4.
|
||||||
|
# Modify and copy a file with detectCopies option enabled and confirm that copy
|
||||||
|
# is detected in P4.
|
||||||
|
# Copy a file with detectCopies and detectCopiesHarder options enabled and
|
||||||
|
# confirm that copy is detected in P4.
|
||||||
|
# Modify and copy a file, configure a bigger threshold in detectCopies and
|
||||||
|
# confirm that copy is not detected in P4.
|
||||||
|
# Modify and copy a file, configure a smaller threshold in detectCopies and
|
||||||
|
# confirm that copy is detected in P4.
|
||||||
|
test_expect_success 'detect copies' '
|
||||||
|
git p4 clone --dest="$git" //depot@all &&
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
(
|
||||||
|
cd "$git" &&
|
||||||
|
git config git-p4.skipSubmitEdit true &&
|
||||||
|
|
||||||
|
cp file2 file8 &&
|
||||||
|
git add file8 &&
|
||||||
|
git commit -a -m "Copy file2 to file8" &&
|
||||||
|
git diff-tree -r -C HEAD &&
|
||||||
|
git p4 submit &&
|
||||||
|
p4 filelog //depot/file8 &&
|
||||||
|
p4 filelog //depot/file8 | test_must_fail grep -q "branch from" &&
|
||||||
|
|
||||||
|
cp file2 file9 &&
|
||||||
|
git add file9 &&
|
||||||
|
git commit -a -m "Copy file2 to file9" &&
|
||||||
|
git diff-tree -r -C HEAD &&
|
||||||
|
git config git-p4.detectCopies true &&
|
||||||
|
git p4 submit &&
|
||||||
|
p4 filelog //depot/file9 &&
|
||||||
|
p4 filelog //depot/file9 | test_must_fail grep -q "branch from" &&
|
||||||
|
|
||||||
|
echo "file2" >>file2 &&
|
||||||
|
cp file2 file10 &&
|
||||||
|
git add file2 file10 &&
|
||||||
|
git commit -a -m "Modify and copy file2 to file10" &&
|
||||||
|
git diff-tree -r -C HEAD &&
|
||||||
|
git p4 submit &&
|
||||||
|
p4 filelog //depot/file10 &&
|
||||||
|
p4 filelog //depot/file10 | grep -q "branch from //depot/file" &&
|
||||||
|
|
||||||
|
cp file2 file11 &&
|
||||||
|
git add file11 &&
|
||||||
|
git commit -a -m "Copy file2 to file11" &&
|
||||||
|
git diff-tree -r -C --find-copies-harder HEAD &&
|
||||||
|
src=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f2) &&
|
||||||
|
test "$src" = file10 &&
|
||||||
|
git config git-p4.detectCopiesHarder true &&
|
||||||
|
git p4 submit &&
|
||||||
|
p4 filelog //depot/file11 &&
|
||||||
|
p4 filelog //depot/file11 | grep -q "branch from //depot/file" &&
|
||||||
|
|
||||||
|
cp file2 file12 &&
|
||||||
|
echo "some text" >>file12 &&
|
||||||
|
git add file12 &&
|
||||||
|
git commit -a -m "Copy file2 to file12 with changes" &&
|
||||||
|
git diff-tree -r -C --find-copies-harder HEAD &&
|
||||||
|
level=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f1 | cut -d" " -f5 | sed "s/C0*//") &&
|
||||||
|
test -n "$level" && test "$level" -gt 0 && test "$level" -lt 98 &&
|
||||||
|
src=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f2) &&
|
||||||
|
test "$src" = file10 -o "$src" = file11 &&
|
||||||
|
git config git-p4.detectCopies $(($level + 2)) &&
|
||||||
|
git p4 submit &&
|
||||||
|
p4 filelog //depot/file12 &&
|
||||||
|
p4 filelog //depot/file12 | test_must_fail grep -q "branch from" &&
|
||||||
|
|
||||||
|
cp file2 file13 &&
|
||||||
|
echo "different text" >>file13 &&
|
||||||
|
git add file13 &&
|
||||||
|
git commit -a -m "Copy file2 to file13 with changes" &&
|
||||||
|
git diff-tree -r -C --find-copies-harder HEAD &&
|
||||||
|
level=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f1 | cut -d" " -f5 | sed "s/C0*//") &&
|
||||||
|
test -n "$level" && test "$level" -gt 2 && test "$level" -lt 100 &&
|
||||||
|
src=$(git diff-tree -r -C --find-copies-harder HEAD | sed 1d | cut -f2) &&
|
||||||
|
test "$src" = file10 -o "$src" = file11 -o "$src" = file12 &&
|
||||||
|
git config git-p4.detectCopies $(($level - 2)) &&
|
||||||
|
git p4 submit &&
|
||||||
|
p4 filelog //depot/file13 &&
|
||||||
|
p4 filelog //depot/file13 | grep -q "branch from //depot/file"
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'kill p4d' '
|
||||||
|
kill_p4d
|
||||||
|
'
|
||||||
|
|
||||||
|
test_done
|
Loading…
Reference in New Issue
Block a user