Files
git/t/t7005-editor.sh
D. Ben Knoble a60203a015 t7005: sanitize test environment for subsequent tests
Some of the editor tests manipulate the environment or config in ways
that affect future tests, but those modifications are visible to future
tests and create a footgun for them.

Use test_config, subshells, single-command environment overrides, and
test helpers to automatically undo environment and config modifications
once finished.

Best-viewed-with: --ignore-all-space
Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-08-13 11:50:00 -07:00

103 lines
2.0 KiB
Bash
Executable File

#!/bin/sh
test_description='GIT_EDITOR, core.editor, and stuff'
. ./test-lib.sh
unset EDITOR VISUAL GIT_EDITOR
test_expect_success 'determine default editor' '
vi=$(TERM=vt100 git var GIT_EDITOR) &&
test -n "$vi"
'
test_expect_success setup '
if ! expr "$vi" : "[a-z]*$" >/dev/null
then
vi=
fi &&
for i in GIT_EDITOR core_editor EDITOR VISUAL $vi
do
write_script e-$i.sh <<-EOF || return 1
echo "Edited by $i" >"\$1"
EOF
done &&
if ! test -z "$vi"
then
mv e-$vi.sh $vi
fi &&
msg="Hand-edited" &&
test_commit "$msg" &&
test_commit_message HEAD -m "$msg"
'
test_expect_success 'dumb should error out when falling back on vi' '
test_must_fail env TERM=dumb git commit --amend
'
test_expect_success 'dumb should prefer EDITOR to VISUAL' '
TERM=dumb EDITOR=./e-EDITOR.sh VISUAL=./e-VISUAL.sh \
git commit --amend &&
test_commit_message HEAD -m "Edited by EDITOR"
'
for i in $vi EDITOR VISUAL core_editor GIT_EDITOR
do
test_expect_success "Using $i" '
if test "$i" = core_editor
then
test_config core.editor ./e-core_editor.sh
fi &&
(
case "$i" in
[A-Z]*)
eval "$i=./e-$i.sh" &&
export $i
;;
esac &&
PATH="$PWD:$PATH" TERM=vt100 git commit --amend
) &&
test_commit_message HEAD -m "Edited by $i"
'
done
test_expect_success 'Using editors with overrides' '
(
TERM=vt100 &&
export TERM &&
for i in $vi EDITOR VISUAL core_editor GIT_EDITOR
do
echo "Edited by $i" >expect &&
case "$i" in
core_editor)
git config core.editor ./e-core_editor.sh
;;
[A-Z]*)
eval "$i=./e-$i.sh" &&
export $i
;;
esac &&
PATH="$PWD:$PATH" git commit --amend &&
test_commit_message HEAD expect || exit 1
done
)
'
test_expect_success 'editor with a space' '
echo "echo space >\"\$1\"" >"e space.sh" &&
chmod a+x "e space.sh" &&
GIT_EDITOR="./e\ space.sh" git commit --amend &&
test_commit_message HEAD -m space
'
test_expect_success 'core.editor with a space' '
test_config core.editor \"./e\ space.sh\" &&
git commit --amend &&
test_commit_message HEAD -m space
'
test_done