mirror of
https://github.com/git/git.git
synced 2024-11-26 03:14:50 +08:00
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
|
||||
#
|
||||
|
||||
# p4 tests never use the top-level repo; always build/clone into
|
||||
# a subdirectory called "$git"
|
||||
TEST_NO_CREATE_REPO=NoThanks
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
if ! test_have_prereq PYTHON; then
|
||||
@ -27,23 +31,48 @@ export P4CLIENT=client
|
||||
export P4EDITOR=:
|
||||
|
||||
db="$TRASH_DIRECTORY/db"
|
||||
cli="$TRASH_DIRECTORY/cli"
|
||||
cli=$(test-path-utils real_path "$TRASH_DIRECTORY/cli")
|
||||
git="$TRASH_DIRECTORY/git"
|
||||
pidfile="$TRASH_DIRECTORY/p4d.pid"
|
||||
|
||||
start_p4d() {
|
||||
mkdir -p "$db" "$cli" "$git" &&
|
||||
rm -f "$pidfile" &&
|
||||
(
|
||||
p4d -q -r "$db" -p $P4DPORT &
|
||||
echo $! >"$pidfile"
|
||||
) &&
|
||||
for i in 1 2 3 4 5 ; do
|
||||
p4 info >/dev/null 2>&1 && break || true &&
|
||||
echo waiting for p4d to start &&
|
||||
|
||||
# This gives p4d a long time to start up, as it can be
|
||||
# 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
|
||||
done &&
|
||||
# complain if it never started
|
||||
p4 info >/dev/null &&
|
||||
i=$(( $i - 1 ))
|
||||
done
|
||||
|
||||
if test -z "$ready"
|
||||
then
|
||||
# p4d failed to start
|
||||
return 1
|
||||
fi
|
||||
|
||||
# build a client
|
||||
(
|
||||
cd "$cli" &&
|
||||
p4 client -i <<-EOF
|
||||
@ -53,6 +82,7 @@ start_p4d() {
|
||||
View: //depot/... //client/...
|
||||
EOF
|
||||
)
|
||||
return 0
|
||||
}
|
||||
|
||||
kill_p4d() {
|
||||
@ -69,5 +99,6 @@ kill_p4d() {
|
||||
}
|
||||
|
||||
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 &&
|
||||
(
|
||||
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' '
|
||||
badp4dir="$TRASH_DIRECTORY/badp4dir" &&
|
||||
mkdir "$badp4dir" &&
|
||||
test_when_finished "rm \"$badp4dir/p4\" && rmdir \"$badp4dir\"" &&
|
||||
cat >"$badp4dir"/p4 <<-EOF &&
|
||||
mkdir badp4dir &&
|
||||
test_when_finished "rm badp4dir/p4 && rmdir badp4dir" &&
|
||||
cat >badp4dir/p4 <<-EOF &&
|
||||
#!$SHELL_PATH
|
||||
exit 1
|
||||
EOF
|
||||
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' '
|
||||
chmod 755 badp4dir/p4 &&
|
||||
(
|
||||
cd "$cli" &&
|
||||
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
|
||||
PATH="$TRASH_DIRECTORY/badp4dir:$PATH" &&
|
||||
export PATH &&
|
||||
test_expect_code 1 git p4 clone --dest="$git" //depot >errs 2>&1
|
||||
) &&
|
||||
(
|
||||
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
|
||||
)
|
||||
cat errs &&
|
||||
! test_i18ngrep Traceback errs
|
||||
'
|
||||
|
||||
test_expect_success 'clone bare' '
|
||||
rm -rf "$git" &&
|
||||
git p4 clone --dest="$git" --bare //depot &&
|
||||
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() {
|
||||
what=$1
|
||||
"$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' '
|
||||
kill_p4d
|
||||
'
|
||||
|
@ -78,20 +78,19 @@ test_expect_success 'skipSubmitEditCheck' '
|
||||
test_expect_success 'no config, edited' '
|
||||
git p4 clone --dest="$git" //depot &&
|
||||
test_when_finished cleanup_git &&
|
||||
ed="$TRASH_DIRECTORY/ed.sh" &&
|
||||
test_when_finished "rm \"$ed\"" &&
|
||||
cat >"$ed" <<-EOF &&
|
||||
test_when_finished "rm ed.sh" &&
|
||||
cat >ed.sh <<-EOF &&
|
||||
#!$SHELL_PATH
|
||||
sleep 1
|
||||
touch "\$1"
|
||||
exit 0
|
||||
EOF
|
||||
chmod 755 "$ed" &&
|
||||
chmod 755 ed.sh &&
|
||||
(
|
||||
cd "$git" &&
|
||||
echo line >>file1 &&
|
||||
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 &&
|
||||
test_line_count = 5 wc
|
||||
)
|
||||
|
@ -39,10 +39,9 @@ test_expect_success 'clone --branch' '
|
||||
'
|
||||
|
||||
test_expect_success 'clone --changesfile' '
|
||||
cf="$TRASH_DIRECTORY/cf" &&
|
||||
test_when_finished "rm \"$cf\"" &&
|
||||
printf "1\n3\n" >"$cf" &&
|
||||
git p4 clone --changesfile="$cf" --dest="$git" //depot &&
|
||||
test_when_finished "rm cf" &&
|
||||
printf "1\n3\n" >cf &&
|
||||
git p4 clone --changesfile="$TRASH_DIRECTORY/cf" --dest="$git" //depot &&
|
||||
test_when_finished cleanup_git &&
|
||||
(
|
||||
cd "$git" &&
|
||||
@ -55,10 +54,9 @@ test_expect_success 'clone --changesfile' '
|
||||
'
|
||||
|
||||
test_expect_success 'clone --changesfile, @all' '
|
||||
cf="$TRASH_DIRECTORY/cf" &&
|
||||
test_when_finished "rm \"$cf\"" &&
|
||||
printf "1\n3\n" >"$cf" &&
|
||||
test_must_fail git p4 clone --changesfile="$cf" --dest="$git" //depot@all
|
||||
test_when_finished "rm cf" &&
|
||||
printf "1\n3\n" >cf &&
|
||||
test_must_fail git p4 clone --changesfile="$TRASH_DIRECTORY/cf" --dest="$git" //depot@all
|
||||
'
|
||||
|
||||
# imports both master and p4/master in refs/heads
|
||||
@ -128,7 +126,7 @@ test_expect_success 'clone --use-client-spec' '
|
||||
exec >/dev/null &&
|
||||
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" &&
|
||||
test_when_finished "rmdir \"$cli2\"" &&
|
||||
(
|
||||
@ -151,7 +149,6 @@ test_expect_success 'clone --use-client-spec' '
|
||||
cleanup_git &&
|
||||
|
||||
# same thing again, this time with variable instead of option
|
||||
mkdir "$git" &&
|
||||
(
|
||||
cd "$git" &&
|
||||
git init &&
|
||||
|
@ -21,7 +21,7 @@ test_expect_success 'init depot' '
|
||||
# environment variable is set
|
||||
test_expect_success 'P4CONFIG and absolute dir clone' '
|
||||
printf "P4PORT=$P4PORT\nP4CLIENT=$P4CLIENT\n" >p4config &&
|
||||
test_when_finished "rm \"$TRASH_DIRECTORY/p4config\"" &&
|
||||
test_when_finished "rm p4config" &&
|
||||
test_when_finished cleanup_git &&
|
||||
(
|
||||
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
|
||||
test_expect_success 'P4CONFIG and relative dir clone' '
|
||||
printf "P4PORT=$P4PORT\nP4CLIENT=$P4CLIENT\n" >p4config &&
|
||||
test_when_finished "rm \"$TRASH_DIRECTORY/p4config\"" &&
|
||||
test_when_finished "rm p4config" &&
|
||||
test_when_finished cleanup_git &&
|
||||
(
|
||||
P4CONFIG=p4config && export P4CONFIG &&
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='git-p4 rcs keywords'
|
||||
test_description='git p4 rcs keywords'
|
||||
|
||||
. ./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' '
|
||||
(
|
||||
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' '
|
||||
(
|
||||
cd "$cli" &&
|
||||
@ -244,7 +244,7 @@ test_expect_success 'cope with rcs keyword expansion damage' '
|
||||
cd "$git" &&
|
||||
git config git-p4.skipSubmitEdit 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) &&
|
||||
"$PERL_PATH" -n -i -e "print unless m/Revision:/" 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