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:
		@ -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
 | 
				
			||||||
		Reference in New Issue
	
	Block a user