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

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

From
RHRichard Hansen <rhansen@bbn.com>
Date
May 29, 2014, 22:30 UTC
Message-ID
<1401402633-14742-1-git-send-email-rhansen@bbn.com>
In-Reply-To
<87fvjsmmr4.fsf@thomasrast.ch>
Signed-off-by: Richard Hansen <rhansen@bbn.com>
---
On 2014-05-29 15:02, Thomas Rast wrote:
Show 21 quoted lines
> Richard Hansen <rhansen@bbn.com> writes:
>
>> These are the same tests as in t9903, but run in zsh instead of bash.
>>
>> Signed-off-by: Richard Hansen <rhansen@bbn.com>
>> ---
>>  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
Previous: Thomas RastNext: Richard Hansen
Message 15 of 35 in “git-prompt.sh: don't assume the shell expands the value of PS1”
  1. git-prompt.sh: don't assume the shell expands the value of PS1Richard Hansen, May 19, 2014
  2. Junio C HamanoMay 20, 2014
  3. 00/10 Zsh prompt testsRichard Hansen, May 27, 2014
  4. 01/10 t9903: remove Zsh test from the suite of Bash prompt testsRichard Hansen, May 27, 2014
  5. 02/10 t9903: put the Bash pc mode prompt test cases in a functionRichard Hansen, May 27, 2014
  6. 03/10 t9903: move test name prefix to a separate variableRichard Hansen, May 27, 2014
  7. 04/10 t9903: run pc mode tests again with PS1 expansion disabledRichard Hansen, May 27, 2014
  8. 05/10 t9903: include "Bash" in test names via new $shellname varRichard Hansen, May 27, 2014
  9. 06/10 t9903: move PS1 color code variable definitions to lib-bash.shRichard Hansen, May 27, 2014
  10. 07/10 t9903: move prompt tests to a new lib-prompt-tests.sh fileRichard Hansen, May 27, 2014
  11. 08/10 lib-prompt-tests.sh: put all tests inside a functionRichard Hansen, May 27, 2014
  12. 09/10 lib-prompt-tests.sh: add variable for string that encodes percent in PS1Richard Hansen, May 27, 2014
  13. 10/10 t9904: new __git_ps1 tests for ZshRichard Hansen, May 27, 2014
  14. Thomas RastMay 29, 2014
  15. 11/10 fixup! t9904: new __git_ps1 tests for ZshRichard Hansen, May 29, 2014
  16. 00/11 Zsh prompt testsRichard Hansen, Jun 4, 2014
  17. 01/11 t9903: remove Zsh test from the suite of Bash prompt testsRichard Hansen, Jun 4, 2014
  18. 02/11 t9903: put the Bash pc mode prompt test cases in a functionRichard Hansen, Jun 4, 2014
  19. 03/11 t9903: move test name prefix to a separate variableRichard Hansen, Jun 4, 2014
  20. 04/11 t9903: run pc mode tests again with PS1 expansion disabledRichard Hansen, Jun 4, 2014
  21. 05/11 t9903: include "Bash" in test names via new $shellname varRichard Hansen, Jun 4, 2014
  22. 06/11 t9903: move PS1 color code variable definitions to lib-bash.shRichard Hansen, Jun 4, 2014
  23. 07/11 t9903: move prompt tests to a new lib-prompt-tests.sh fileRichard Hansen, Jun 4, 2014
  24. 08/11 lib-prompt-tests.sh: put all tests inside a functionRichard Hansen, Jun 4, 2014
  25. 09/11 lib-prompt-tests.sh: add variable for string that encodes percent in PS1Richard Hansen, Jun 4, 2014
  26. 10/11 test-lib: make it possible to override how test code is eval'dRichard Hansen, Jun 4, 2014
  27. Junio C HamanoJun 5, 2014
  28. Richard HansenJun 6, 2014
  29. Junio C HamanoJun 6, 2014
  30. 11/11 t9904: new __git_ps1 tests for ZshRichard Hansen, Jun 4, 2014
  31. Torsten BögershausenJun 10, 2014
  32. Richard HansenJun 10, 2014
  33. brian m. carlsonJun 11, 2014
  34. Richard HansenJun 11, 2014
  35. brian m. carlsonJun 11, 2014

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.