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

Re: [PATCH v2 2/3] test-lib-functions: optionally keep HOME, TERM and SHELL in 'test_pause'

From
Elijah Newren <newren@gmail.com>
Date
Aug 28, 2021, 07:27 UTC
Message-ID
<CABPp-BFxDxD0Y5Ru+4VqebAJve4tjZk-4csN3JurC6hmRAUf4A@mail.gmail.com>
In-Reply-To
<00211457eceab756528abf0ca296af866cda00e7.1630111653.git.gitgitgadget@gmail.com>

On Fri, Aug 27, 2021 at 5:47 PM Philippe Blain via GitGitGadget <gitgitgadget@gmail.com> wrote:

Show 63 quoted lines
>
> From: Philippe Blain <levraiphilippeblain@gmail.com>
>
> The 'test_pause' function, which is designed to help interactive
> debugging and exploration of tests, currently inherits the value of HOME
> and TERM set by 'test-lib.sh': HOME="$TRASH_DIRECTORY" and TERM=dumb. It
> also invokes the shell defined by TEST_SHELL_PATH, which defaults to
> /bin/sh (through SHELL_PATH).
>
> Changing the value of HOME means that any customization configured in a
> developers' shell startup files and any Git aliases defined in their
> global Git configuration file are not available in the shell invoked by
> 'test_pause'.
>
> Changing the value of TERM to 'dumb' means that colored output
> is disabled for all commands in that shell.
>
> Using /bin/sh as the shell invoked by 'test_pause' is not ideal since
> some platforms (i.e. Debian and derivatives) use Dash as /bin/sh, and
> this shell is usually compiled without readline support, which makes for
> a poor interactive command line experience.
>
> To make the interactive command line experience in the shell invoked by
> 'test_pause' more pleasant, save the values of HOME and TERM in
> USER_HOME and USER_TERM before changing them in test-lib.sh, and add
> options to 'test_pause' to optionally use these variables to invoke the
> shell. Also add an option to invoke SHELL instead of TEST_SHELL_PATH, so
> that developer's interactive shell is used.
>
> We use options instead of changing the behaviour unconditionally since
> these three variables can break test reproducibility. Moreover, using the
> original HOME means tests could overwrite files in a user's home
> directory. Be explicit about these caveats in the new 'Usage' section in
> test-lib-functions.sh.
>
> Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
> ---
>  t/test-lib-functions.sh | 37 ++++++++++++++++++++++++++++++++++++-
>  t/test-lib.sh           |  6 ++++--
>  2 files changed, 40 insertions(+), 3 deletions(-)
>
> diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
> index 1884177e293..1b775343adc 100644
> --- a/t/test-lib-functions.sh
> +++ b/t/test-lib-functions.sh
> @@ -137,9 +137,44 @@ test_tick () {
>  # Stop execution and start a shell. This is useful for debugging tests.
>  #
>  # Be sure to remove all invocations of this command before submitting.
> +#
> +# Usage: test_pause [options]
> +#   -t
> +#      Use your original TERM instead of test-lib.sh's "dumb".
> +#      This usually restores color output in the invoked shell.
> +#      WARNING: this can break test reproducibility.
> +#   -s
> +#      Invoke $SHELL instead of $TEST_SHELL_PATH
> +#      WARNING: this can break test reproducibility.
> +#   -h
> +#      Use your original HOME instead of test-lib.sh's "$TRASH_DIRECTORY".
> +#      This allows you to use your regular shell environment and Git aliases.
> +#      WARNING: this can break test reproducibility.
> +#      CAUTION: this can overwrite files in your HOME.

Do you want to add an option that implies the other three, so that folks can do something like `test_pause -a` (or some other single letter) rather than `test_pause -t -s -h`?

Show 57 quoted lines
>
>  test_pause () {
> -       "$TEST_SHELL_PATH" <&6 >&5 2>&7
> +       PAUSE_TERM=$TERM &&
> +       PAUSE_SHELL=$TEST_SHELL_PATH &&
> +       PAUSE_HOME=$HOME &&
> +       while test $# != 0
> +       do
> +               case "$1" in
> +               -t)
> +                       PAUSE_TERM="$USER_TERM"
> +                       ;;
> +               -s)
> +                       PAUSE_SHELL="$SHELL"
> +                       ;;
> +               -h)
> +                       PAUSE_HOME="$USER_HOME"
> +                       ;;
> +               *)
> +                       break
> +                       ;;
> +               esac
> +               shift
> +       done &&
> +       TERM="$PAUSE_TERM" HOME="$PAUSE_HOME" "$PAUSE_SHELL" <&6 >&5 2>&7
>  }
>
>  # Wrap git with a debugger. Adding this to a command can make it easier
> diff --git a/t/test-lib.sh b/t/test-lib.sh
> index abcfbed6d61..132618991e2 100644
> --- a/t/test-lib.sh
> +++ b/t/test-lib.sh
> @@ -585,8 +585,9 @@ else
>         }
>  fi
>
> +USER_TERM="$TERM"
>  TERM=dumb
> -export TERM
> +export TERM USER_TERM
>
>  error () {
>         say_color error "error: $*"
> @@ -1380,9 +1381,10 @@ then
>  fi
>
>  # Last-minute variable setup
> +USER_HOME="$HOME"
>  HOME="$TRASH_DIRECTORY"
>  GNUPGHOME="$HOME/gnupg-home-not-used"
> -export HOME GNUPGHOME
> +export HOME GNUPGHOME USER_HOME
>
>  # Test repository
>  rm -fr "$TRASH_DIRECTORY" || {
> --
> gitgitgadget
Previous: Philippe Blain via GitGitGadgetNext: Philippe Blain
Message 19 of 39 in “test-lib-functions.sh: keep user's HOME, TERM and SHELL for 'test_pause' and 'debug'”
  1. 0/2 test-lib-functions.sh: keep user's HOME, TERM and SHELL for 'test_pause' and 'debug'Philippe Blain via GitGitGadget, Aug 19, 2021
  2. 1/2 test-lib-functions: use user's SHELL, HOME and TERM for 'test_pause'Philippe Blain via GitGitGadget, Aug 19, 2021
  3. Carlo ArenasAug 20, 2021
  4. Philippe BlainAug 20, 2021
  5. 2/2 test-lib-functions: use user's TERM and HOME for 'debug'Philippe Blain via GitGitGadget, Aug 19, 2021
  6. Taylor BlauAug 19, 2021
  7. Carlo ArenasAug 20, 2021
  8. Eric SunshineAug 19, 2021
  9. Junio C HamanoAug 19, 2021
  10. Eric SunshineAug 19, 2021
  11. Elijah NewrenAug 19, 2021
  12. Eric SunshineAug 19, 2021
  13. Philippe BlainAug 20, 2021
  14. Eric SunshineAug 20, 2021
  15. Jeff KingAug 20, 2021
  16. 0/3 test-lib-functions.sh: keep user's HOME, TERM and SHELL for 'test_pause' and 'debug'Philippe Blain via GitGitGadget, Aug 28, 2021
  17. 1/3 test-lib-functions: use 'TEST_SHELL_PATH' in 'test_pause'Philippe Blain via GitGitGadget, Aug 28, 2021
  18. 2/3 test-lib-functions: optionally keep HOME, TERM and SHELL in 'test_pause'Philippe Blain via GitGitGadget, Aug 28, 2021
  19. Elijah NewrenAug 28, 2021
  20. Philippe BlainAug 28, 2021
  21. 3/3 test-lib-functions: optionally keep HOME and TERM in 'debug'Philippe Blain via GitGitGadget, Aug 28, 2021
  22. 0/3 test-lib-functions.sh: keep user's HOME, TERM and SHELL for 'test_pause' and 'debug'Philippe Blain via GitGitGadget, Sep 1, 2021
  23. 2/3 test-lib-functions: optionally keep HOME, TERM and SHELL in 'test_pause'Philippe Blain via GitGitGadget, Sep 1, 2021
  24. Junio C HamanoSep 1, 2021
  25. Elijah NewrenSep 1, 2021
  26. Junio C HamanoSep 1, 2021
  27. Philippe BlainSep 2, 2021
  28. 1/3 test-lib-functions: use 'TEST_SHELL_PATH' in 'test_pause'Philippe Blain via GitGitGadget, Sep 1, 2021
  29. Junio C HamanoSep 1, 2021
  30. 3/3 test-lib-functions: optionally keep HOME and TERM in 'debug'Philippe Blain via GitGitGadget, Sep 1, 2021
  31. 0/3 test-lib-functions.sh: keep user's HOME, TERM and SHELL for 'test_pause' and 'debug'Philippe Blain via GitGitGadget, Sep 6, 2021
  32. 1/3 test-lib-functions: use 'TEST_SHELL_PATH' in 'test_pause'Philippe Blain via GitGitGadget, Sep 6, 2021
  33. 2/3 test-lib-functions: optionally keep HOME, TERM and SHELL in 'test_pause'Philippe Blain via GitGitGadget, Sep 6, 2021
  34. 3/3 test-lib-functions: keep user's debugger config files and TERM in 'debug'Philippe Blain via GitGitGadget, Sep 6, 2021
  35. 0/3 test-lib-functions.sh: keep user's HOME, TERM and SHELL for 'test_pause' and 'debug'Philippe Blain via GitGitGadget, Sep 6, 2021
  36. 1/3 test-lib-functions: use 'TEST_SHELL_PATH' in 'test_pause'Philippe Blain via GitGitGadget, Sep 6, 2021
  37. 2/3 test-lib-functions: optionally keep HOME, TERM and SHELL in 'test_pause'Philippe Blain via GitGitGadget, Sep 6, 2021
  38. 3/3 test-lib-functions: keep user's debugger config files and TERM in 'debug'Philippe Blain via GitGitGadget, Sep 6, 2021
  39. Elijah NewrenSep 7, 2021

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.