All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Philippe Blain via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: "SZEDER Gábor" <szeder.dev@gmail.com>,
	"Elijah Newren" <newren@gmail.com>,
	"Johannes Schindelin" <Johannes.Schindelin@gmx.de>,
	"Jens Lehmann" <Jens.Lehmann@web.de>,
	"Eric Sunshine" <sunshine@sunshineco.com>,
	"Taylor Blau" <me@ttaylorr.com>,
	"Carlo Arenas" <carenas@gmail.com>, "Jeff King" <peff@peff.net>,
	"Philippe Blain" <levraiphilippeblain@gmail.com>,
	"Philippe Blain" <levraiphilippeblain@gmail.com>
Subject: [PATCH v5 3/3] test-lib-functions: keep user's debugger config files and TERM in 'debug'
Date: Mon, 06 Sep 2021 04:39:00 +0000	[thread overview]
Message-ID: <ebf92b6b2c379ed007ec66e97dc4ad7aecb7ad81.1630903140.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1022.v5.git.1630903140.gitgitgadget@gmail.com>

From: Philippe Blain <levraiphilippeblain@gmail.com>

The 'debug' function in test-lib-functions.sh is used to invoke a
debugger at a specific line in a test. It inherits the value of HOME and
TERM set by 'test-lib.sh': HOME="$TRASH_DIRECTORY" and TERM=dumb.

Changing the value of HOME means that any customization configured in a
developers' debugger configuration file (like $HOME/.gdbinit or
$HOME/.lldbinit) are not available in the debugger invoked by
'test_pause'.

Changing the value of TERM to 'dumb' means that colored output
is disabled in the debugger.

To make the debugging experience with 'debug' more pleasant, leverage
the variable USER_HOME, added in the previous commit, to copy a
developer's ~/.gdbinit and ~/.lldbinit to the test HOME. We do not set
HOME to USER_HOME as in 'test_pause' to avoid user configuration in
$USER_HOME/.gitconfig from interfering with the command being debugged.

Also, add a flag to launch the debugger with the original value of
TERM, and add the same warning as for 'test_pause'.

Helped-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
---
 t/README                |  6 +++--
 t/test-lib-functions.sh | 60 +++++++++++++++++++++++++++++++----------
 2 files changed, 50 insertions(+), 16 deletions(-)

diff --git a/t/README b/t/README
index cc8be6e67ad..e924bd81e2d 100644
--- a/t/README
+++ b/t/README
@@ -800,10 +800,12 @@ see test-lib-functions.sh for the full list and their options.
    argument.  This is primarily meant for use during the
    development of a new test script.
 
- - debug <git-command>
+ - debug [options] <git-command>
 
    Run a git command inside a debugger. This is primarily meant for
-   use when debugging a failing test script.
+   use when debugging a failing test script. With '-t', use your
+   original TERM instead of test-lib.sh's "dumb", so that your
+   debugger interface has colors.
 
  - test_done
 
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index 5bed34e47e0..eef2262a360 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -190,25 +190,57 @@ test_pause () {
 # Wrap git with a debugger. Adding this to a command can make it easier
 # to understand what is going on in a failing test.
 #
+# Usage: debug [options] <git command>
+#   -d <debugger>
+#   --debugger=<debugger>
+#	Use <debugger> instead of GDB
+#   -t
+#	Use your original TERM instead of test-lib.sh's "dumb".
+#	This usually restores color output in the debugger.
+#	WARNING: the command being debugged might behave differently than when
+#	running the test.
+#
 # Examples:
 #     debug git checkout master
 #     debug --debugger=nemiver git $ARGS
 #     debug -d "valgrind --tool=memcheck --track-origins=yes" git $ARGS
 debug () {
-	case "$1" in
-	-d)
-		GIT_DEBUGGER="$2" &&
-		shift 2
-		;;
-	--debugger=*)
-		GIT_DEBUGGER="${1#*=}" &&
-		shift 1
-		;;
-	*)
-		GIT_DEBUGGER=1
-		;;
-	esac &&
-	GIT_DEBUGGER="${GIT_DEBUGGER}" "$@" <&6 >&5 2>&7
+	GIT_DEBUGGER=1 &&
+	DEBUG_TERM=$TERM &&
+	while test $# != 0
+	do
+		case "$1" in
+		-t)
+			DEBUG_TERM="$USER_TERM"
+			;;
+		-d)
+			GIT_DEBUGGER="$2" &&
+			shift
+			;;
+		--debugger=*)
+			GIT_DEBUGGER="${1#*=}"
+			;;
+		*)
+			break
+			;;
+		esac
+		shift
+	done &&
+
+	dotfiles=".gdbinit .lldbinit"
+
+	for dotfile in $dotfiles
+	do
+		dotfile="$USER_HOME/$dotfile" &&
+		test -f "$dotfile" && cp "$dotfile" "$HOME" || :
+	done &&
+
+	TERM="$DEBUG_TERM" GIT_DEBUGGER="${GIT_DEBUGGER}" "$@" <&6 >&5 2>&7 &&
+
+	for dotfile in $dotfiles
+	do
+		rm -f "$HOME/$dotfile"
+	done
 }
 
 # Usage: test_commit [options] <message> [<file> [<contents> [<tag>]]]
-- 
gitgitgadget

  parent reply	other threads:[~2021-09-06  4:39 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-19 17:16 [PATCH 0/2] test-lib-functions.sh: keep user's HOME, TERM and SHELL for 'test_pause' and 'debug' Philippe Blain via GitGitGadget
2021-08-19 17:16 ` [PATCH 1/2] test-lib-functions: use user's SHELL, HOME and TERM for 'test_pause' Philippe Blain via GitGitGadget
2021-08-20  3:08   ` Carlo Arenas
2021-08-20 12:14     ` Philippe Blain
2021-08-19 17:16 ` [PATCH 2/2] test-lib-functions: use user's TERM and HOME for 'debug' Philippe Blain via GitGitGadget
2021-08-19 19:24   ` Taylor Blau
2021-08-20  3:18     ` Carlo Arenas
2021-08-19 18:10 ` [PATCH 0/2] test-lib-functions.sh: keep user's HOME, TERM and SHELL for 'test_pause' and 'debug' Eric Sunshine
2021-08-19 19:57   ` Junio C Hamano
2021-08-19 20:14     ` Eric Sunshine
2021-08-19 20:03   ` Elijah Newren
2021-08-19 20:11     ` Eric Sunshine
2021-08-20 12:12       ` Philippe Blain
2021-08-20 15:50         ` Eric Sunshine
2021-08-20 18:23         ` Jeff King
2021-08-28  0:47 ` [PATCH v2 0/3] " Philippe Blain via GitGitGadget
2021-08-28  0:47   ` [PATCH v2 1/3] test-lib-functions: use 'TEST_SHELL_PATH' in 'test_pause' Philippe Blain via GitGitGadget
2021-08-28  0:47   ` [PATCH v2 2/3] test-lib-functions: optionally keep HOME, TERM and SHELL " Philippe Blain via GitGitGadget
2021-08-28  7:27     ` Elijah Newren
2021-08-28 14:50       ` Philippe Blain
2021-08-28  0:47   ` [PATCH v2 3/3] test-lib-functions: optionally keep HOME and TERM in 'debug' Philippe Blain via GitGitGadget
2021-09-01 13:31   ` [PATCH v3 0/3] test-lib-functions.sh: keep user's HOME, TERM and SHELL for 'test_pause' and 'debug' Philippe Blain via GitGitGadget
2021-09-01 13:31     ` [PATCH v3 1/3] test-lib-functions: use 'TEST_SHELL_PATH' in 'test_pause' Philippe Blain via GitGitGadget
2021-09-01 20:04       ` Junio C Hamano
2021-09-01 13:31     ` [PATCH v3 2/3] test-lib-functions: optionally keep HOME, TERM and SHELL " Philippe Blain via GitGitGadget
2021-09-01 20:26       ` Junio C Hamano
2021-09-01 21:52         ` Elijah Newren
2021-09-01 23:09           ` Junio C Hamano
2021-09-02 13:10             ` Philippe Blain
2021-09-01 13:31     ` [PATCH v3 3/3] test-lib-functions: optionally keep HOME and TERM in 'debug' Philippe Blain via GitGitGadget
2021-09-06  4:20     ` [PATCH v4 0/3] test-lib-functions.sh: keep user's HOME, TERM and SHELL for 'test_pause' and 'debug' Philippe Blain via GitGitGadget
2021-09-06  4:20       ` [PATCH v4 1/3] test-lib-functions: use 'TEST_SHELL_PATH' in 'test_pause' Philippe Blain via GitGitGadget
2021-09-06  4:20       ` [PATCH v4 2/3] test-lib-functions: optionally keep HOME, TERM and SHELL " Philippe Blain via GitGitGadget
2021-09-06  4:20       ` [PATCH v4 3/3] test-lib-functions: keep user's debugger config files and TERM in 'debug' Philippe Blain via GitGitGadget
2021-09-06  4:38       ` [PATCH v5 0/3] test-lib-functions.sh: keep user's HOME, TERM and SHELL for 'test_pause' and 'debug' Philippe Blain via GitGitGadget
2021-09-06  4:38         ` [PATCH v5 1/3] test-lib-functions: use 'TEST_SHELL_PATH' in 'test_pause' Philippe Blain via GitGitGadget
2021-09-06  4:38         ` [PATCH v5 2/3] test-lib-functions: optionally keep HOME, TERM and SHELL " Philippe Blain via GitGitGadget
2021-09-06  4:39         ` Philippe Blain via GitGitGadget [this message]
2021-09-07  6:24         ` [PATCH v5 0/3] test-lib-functions.sh: keep user's HOME, TERM and SHELL for 'test_pause' and 'debug' Elijah Newren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ebf92b6b2c379ed007ec66e97dc4ad7aecb7ad81.1630903140.git.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=Jens.Lehmann@web.de \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=carenas@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=levraiphilippeblain@gmail.com \
    --cc=me@ttaylorr.com \
    --cc=newren@gmail.com \
    --cc=peff@peff.net \
    --cc=sunshine@sunshineco.com \
    --cc=szeder.dev@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.