[PATCH 11/10] fixup! t9904: new __git_ps1 tests for Zsh

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Richard Hansen <rhansen@xxxxxxx>
---

On 2014-05-29 15:02, Thomas Rast wrote:
> Richard Hansen <rhansen@xxxxxxx> writes:
>
>> These are the same tests as in t9903, but run in zsh instead of bash.
>>
>> Signed-off-by: Richard Hansen <rhansen@xxxxxxx>
>> ---
>>  t/lib-zsh.sh          | 30 ++++++++++++++++++++++++++++++
>>  t/t9904-zsh-prompt.sh | 10 ++++++++++
>>  2 files changed, 40 insertions(+)
>>  create mode 100644 t/lib-zsh.sh
>>  create mode 100755 t/t9904-zsh-prompt.sh
>
> This doesn't appear to work in valgrind mode:
>
> $ ./t9904-zsh-prompt.sh --valgrind
> error: Test script did not set test_description.
>
> t9903 however works.  I'm not sure how much of a difference it makes,
> but: I use bash as my shell and as /bin/sh, but I do have zsh installed.
>
> Can you look into it?

*sigh* By default, Zsh munges $0 whenever a function is called or a
file is sourced, with no (immediately obvious) way to get the original
value of $0.  This fixup causes that feature to be temporarily turned
off so that test-lib.sh does the right thing when it execs $0.

Thank you for finding this bug!

-Richard


 t/lib-zsh.sh | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/t/lib-zsh.sh b/t/lib-zsh.sh
index fa6fcd9..ab4bef2 100644
--- a/t/lib-zsh.sh
+++ b/t/lib-zsh.sh
@@ -2,17 +2,23 @@
 # run under Zsh; primarily intended for tests of the git-prompt.sh
 # script.
 
-if test -n "$ZSH_VERSION" && test -z "$POSIXLY_CORRECT"; then
+if test -n "$ZSH_VERSION" && test -z "$POSIXLY_CORRECT" && [[ ! -o FUNCTION_ARGZERO ]]; then
 	true
 elif command -v zsh >/dev/null 2>&1; then
 	unset POSIXLY_CORRECT
-	exec zsh "$0" "$@"
+	# Run Zsh with the FUNCTION_ARGZERO option disabled so that
+	# test-lib.sh sees the test script pathname when it examines
+	# $0 instead of "./lib-zsh.sh".  (This works around a Zsh bug;
+	# 'emulate sh -c' should temporarily restore $0 to the POSIX
+	# specification for $0, but it doesn't.)
+	exec zsh +o FUNCTION_ARGZERO "$0" "$@"
 else
 	echo '1..0 #SKIP skipping Zsh-specific tests; zsh not available'
 	exit 0
 fi
 
-# ensure that we are in full-on Zsh mode
+# ensure that we are in full-on Zsh mode.  note: this re-enables the
+# FUNCTION_ARGZERO option
 emulate -R zsh || exit 1
 
 shellname=Zsh
@@ -27,4 +33,7 @@ set_ps1_format_vars () {
 	c_clear='%%f'
 }
 
+# note: although the FUNCTION_ARGZERO option is currently enabled, sh
+# emulation mode temporarily turns it off ($0 is left alone when
+# sourcing test-lib.sh)
 emulate sh -c '. ./test-lib.sh'
-- 
2.0.0

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]