git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCHv2 08/21] git p4 test: translate windows paths for cygwin

From
PWPete Wyckoff <pw@padd.com>
Date
Jan 27, 2013, 03:11 UTC
Message-ID
<1359256284-5660-9-git-send-email-pw@padd.com>
In-Reply-To
<1359256284-5660-1-git-send-email-pw@padd.com>

Native windows binaries do not understand posix-like path mapping offered by cygwin. Convert paths to native using "cygpath --windows" before presenting them to p4d.

This is done using the AltRoots mechanism of p4. Both the posix and windows forms are put in the client specification, allowing p4 to find its location by native path even though the environment reports a different PWD.

Shell operations in tests will use the normal form of $cli, which will look like a posix path in cygwin, while p4 will use AltRoots to match against the windows form of the working directory.

This mechanism also handles the symlink issue that was fixed in 23bd0c9 (git p4 test: use real_path to resolve p4 client symlinks, 2012-06-27). Now that every p4 client view has an AltRoots with the real_path in it, explicitly calculating the real_path elsewhere is not necessary.

Thanks-to: Sebastian Schuberth <sschuberth@gmail.com>
Thanks-to: Johannes Sixt <j6t@kdbg.org>
fixup! git p4 test: translate windows paths for cygwin
Signed-off-by: Pete Wyckoff <pw@padd.com>
---
 t/lib-git-p4.sh           | 24 ++++++++++++++++++++++--
 t/t9806-git-p4-options.sh |  2 +-
 t/test-lib.sh             |  3 +++
 3 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/t/lib-git-p4.sh b/t/lib-git-p4.sh
index 185f6f1..d5596de 100644
--- a/t/lib-git-p4.sh
+++ b/t/lib-git-p4.sh
@@ -8,7 +8,8 @@ TEST_NO_CREATE_REPO=NoThanks
 
 . ./test-lib.sh
 
-if ! test_have_prereq PYTHON; then
+if ! test_have_prereq PYTHON
+then
 	skip_all='skipping git p4 tests; python not available'
 	test_done
 fi
@@ -17,6 +18,24 @@ fi
 	test_done
 }
 
+# On cygwin, the NT version of Perforce can be used.  When giving
+# it paths, either on the command-line or in client specifications,
+# be sure to use the native windows form.
+#
+# Older versions of perforce were available compiled natively for
+# cygwin.  Those do not accept native windows paths, so make sure
+# not to convert for them.
+native_path() {
+	path="$1" &&
+	if test_have_prereq CYGWIN && ! p4 -V | grep -q CYGWIN
+	then
+		path=$(cygpath --windows "$path")
+	else
+		path=$(test-path-utils real_path "$path")
+	fi &&
+	echo "$path"
+}
+
 # Try to pick a unique port: guess a large number, then hope
 # no more than one of each test is running.
 #
@@ -32,7 +51,7 @@ P4EDITOR=:
 export P4PORT P4CLIENT P4EDITOR
 
 db="$TRASH_DIRECTORY/db"
-cli=$(test-path-utils real_path "$TRASH_DIRECTORY/cli")
+cli="$TRASH_DIRECTORY/cli"
 git="$TRASH_DIRECTORY/git"
 pidfile="$TRASH_DIRECTORY/p4d.pid"
 
@@ -122,6 +141,7 @@ client_view() {
 		Client: $P4CLIENT
 		Description: $P4CLIENT
 		Root: $cli
+		AltRoots: $(native_path "$cli")
 		View:
 		EOF
 		printf "\t%s\n" "$@"
diff --git a/t/t9806-git-p4-options.sh b/t/t9806-git-p4-options.sh
index 564fc80..254d428 100755
--- a/t/t9806-git-p4-options.sh
+++ b/t/t9806-git-p4-options.sh
@@ -215,7 +215,7 @@ test_expect_success 'clone --use-client-spec' '
 		test_must_fail git p4 clone --dest="$git" --use-client-spec
 	) &&
 	# build a different client
-	cli2=$(test-path-utils real_path "$TRASH_DIRECTORY/cli2") &&
+	cli2="$TRASH_DIRECTORY/cli2" &&
 	mkdir -p "$cli2" &&
 	test_when_finished "rmdir \"$cli2\"" &&
 	test_when_finished cleanup_git &&
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 1a6c4ab..9e7f6b4 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -666,12 +666,14 @@ case $(uname -s) in
 	# backslashes in pathspec are converted to '/'
 	# exec does not inherit the PID
 	test_set_prereq MINGW
+	test_set_prereq NOT_CYGWIN
 	test_set_prereq SED_STRIPS_CR
 	;;
 *CYGWIN*)
 	test_set_prereq POSIXPERM
 	test_set_prereq EXECKEEPSPID
 	test_set_prereq NOT_MINGW
+	test_set_prereq CYGWIN
 	test_set_prereq SED_STRIPS_CR
 	;;
 *)
@@ -679,6 +681,7 @@ case $(uname -s) in
 	test_set_prereq BSLASHPSPEC
 	test_set_prereq EXECKEEPSPID
 	test_set_prereq NOT_MINGW
+	test_set_prereq NOT_CYGWIN
 	;;
 esac
 
-- 
1.8.1.1.460.g6fa8886
Previous: Pete WyckoffNext: Pete Wyckoff
Message 9 of 22 in “[PATCHv2 00/21] git p4: work on cygwin”
  1. Pete WyckoffJan 27, 2013
  2. 01/21 git p4: temp branch name should use / even on windowsPete Wyckoff, Jan 27, 2013
  3. 02/21 git p4: remove unused importsPete Wyckoff, Jan 27, 2013
  4. 03/21 git p4: generate better error message for bad depot pathPete Wyckoff, Jan 27, 2013
  5. 04/21 git p4 test: use client_view to build the initial clientPete Wyckoff, Jan 27, 2013
  6. 05/21 git p4 test: avoid loop in client_viewPete Wyckoff, Jan 27, 2013
  7. 06/21 git p4 test: use client_view in t9806Pete Wyckoff, Jan 27, 2013
  8. 07/21 git p4 test: start p4d inside its db dirPete Wyckoff, Jan 27, 2013
  9. 08/21 git p4 test: translate windows paths for cygwinPete Wyckoff, Jan 27, 2013
  10. 09/21 git p4: remove unreachable windows \r\n conversion codePete Wyckoff, Jan 27, 2013
  11. 10/21 git p4: scrub crlf for utf16 files on windowsPete Wyckoff, Jan 27, 2013
  12. 11/21 git p4 test: newline handlingPete Wyckoff, Jan 27, 2013
  13. 12/21 git p4 test: use LineEnd unix in windows tests tooPete Wyckoff, Jan 27, 2013
  14. 13/21 git p4 test: avoid wildcard * in windowsPete Wyckoff, Jan 27, 2013
  15. 14/21 git p4: cygwin p4 client does not mark read-onlyPete Wyckoff, Jan 27, 2013
  16. 15/21 git p4 test: use test_chmod for cygwinPete Wyckoff, Jan 27, 2013
  17. 16/21 git p4: disable read-only attribute before deletingPete Wyckoff, Jan 27, 2013
  18. 17/21 git p4: avoid shell when mapping usersPete Wyckoff, Jan 27, 2013
  19. 18/21 git p4: avoid shell when invoking git rev-listPete Wyckoff, Jan 27, 2013
  20. 19/21 git p4: avoid shell when invoking git config --get-allPete Wyckoff, Jan 27, 2013
  21. 20/21 git p4: avoid shell when calling git configPete Wyckoff, Jan 27, 2013
  22. 21/21 git p4: introduce gitConfigBoolPete Wyckoff, Jan 27, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.