From 83d64df8d574a7cdfa96fa7a18194373b223fafe Mon Sep 17 00:00:00 2001 From: "D. Ben Knoble" Date: Wed, 13 Aug 2025 13:50:03 -0400 Subject: [PATCH 1/3] t7005: use modern test style Tests in t7005 mask Git error codes and do not use our nice test helpers. Improve that, move some code into the setup test, and drop a few old-style blank lines while at it. Best-viewed-with: --ignore-all-space Signed-off-by: D. Ben Knoble Signed-off-by: Junio C Hamano --- t/t7005-editor.sh | 70 ++++++++++++++++------------------------------- 1 file changed, 23 insertions(+), 47 deletions(-) diff --git a/t/t7005-editor.sh b/t/t7005-editor.sh index 5fcf281dfb..791e2a0e74 100755 --- a/t/t7005-editor.sh +++ b/t/t7005-editor.sh @@ -7,62 +7,45 @@ test_description='GIT_EDITOR, core.editor, and stuff' unset EDITOR VISUAL GIT_EDITOR test_expect_success 'determine default editor' ' - vi=$(TERM=vt100 git var GIT_EDITOR) && test -n "$vi" - ' -if ! expr "$vi" : '[a-z]*$' >/dev/null -then - vi= -fi - -for i in GIT_EDITOR core_editor EDITOR VISUAL $vi -do - cat >e-$i.sh <<-EOF - #!$SHELL_PATH - echo "Edited by $i" >"\$1" - EOF - chmod +x e-$i.sh -done - -if ! test -z "$vi" -then - mv e-$vi.sh $vi -fi - 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" && - echo "$msg" >expect && - git show -s --format=%s > actual && - test_cmp expect actual - + test_commit_message HEAD -m "$msg" ' TERM=dumb export TERM test_expect_success 'dumb should error out when falling back on vi' ' - - if git commit --amend - then - echo "Oops?" - false - else - : happy - fi + test_must_fail git commit --amend ' test_expect_success 'dumb should prefer EDITOR to VISUAL' ' - EDITOR=./e-EDITOR.sh && VISUAL=./e-VISUAL.sh && export EDITOR VISUAL && git commit --amend && - test "$(git show -s --format=%s)" = "Edited by EDITOR" - + test_commit_message HEAD -m "Edited by EDITOR" ' TERM=vt100 @@ -83,9 +66,7 @@ do esac test_expect_success "Using $i" ' git --exec-path=. commit --amend && - git show -s --pretty=oneline | - sed -e "s/^[0-9a-f]* //" >actual && - test_cmp expect actual + test_commit_message HEAD expect ' done @@ -105,9 +86,7 @@ do esac test_expect_success "Using $i (override)" ' git --exec-path=. commit --amend && - git show -s --pretty=oneline | - sed -e "s/^[0-9a-f]* //" >actual && - test_cmp expect actual + test_commit_message HEAD expect ' done @@ -115,17 +94,14 @@ 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 space = "$(git show -s --pretty=format:%s)" - + test_commit_message HEAD -m space ' unset GIT_EDITOR test_expect_success 'core.editor with a space' ' - git config core.editor \"./e\ space.sh\" && git commit --amend && - test space = "$(git show -s --pretty=format:%s)" - + test_commit_message HEAD -m space ' test_done From a9c4141abb9fa13abcb226d569c43f9b7b0aa53f Mon Sep 17 00:00:00 2001 From: "D. Ben Knoble" Date: Wed, 13 Aug 2025 13:50:04 -0400 Subject: [PATCH 2/3] t7005: stop abusing --exec-path We want the editors in this test on PATH, so put them there. Signed-off-by: D. Ben Knoble Signed-off-by: Junio C Hamano --- t/t7005-editor.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/t/t7005-editor.sh b/t/t7005-editor.sh index 791e2a0e74..0a5861b7f0 100755 --- a/t/t7005-editor.sh +++ b/t/t7005-editor.sh @@ -65,7 +65,7 @@ do ;; esac test_expect_success "Using $i" ' - git --exec-path=. commit --amend && + PATH="$PWD:$PATH" git commit --amend && test_commit_message HEAD expect ' done @@ -85,7 +85,7 @@ do ;; esac test_expect_success "Using $i (override)" ' - git --exec-path=. commit --amend && + PATH="$PWD:$PATH" git commit --amend && test_commit_message HEAD expect ' done From a60203a01512c7544e5e10b9e8b936a30ac4455c Mon Sep 17 00:00:00 2001 From: "D. Ben Knoble" Date: Wed, 13 Aug 2025 13:50:05 -0400 Subject: [PATCH 3/3] 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 Signed-off-by: Junio C Hamano --- t/t7005-editor.sh | 83 ++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 44 deletions(-) diff --git a/t/t7005-editor.sh b/t/t7005-editor.sh index 0a5861b7f0..c490e5707a 100755 --- a/t/t7005-editor.sh +++ b/t/t7005-editor.sh @@ -34,61 +34,57 @@ test_expect_success setup ' test_commit_message HEAD -m "$msg" ' -TERM=dumb -export TERM test_expect_success 'dumb should error out when falling back on vi' ' - test_must_fail git commit --amend + test_must_fail env TERM=dumb git commit --amend ' test_expect_success 'dumb should prefer EDITOR to VISUAL' ' - EDITOR=./e-EDITOR.sh && - VISUAL=./e-VISUAL.sh && - export EDITOR VISUAL && - git commit --amend && + TERM=dumb EDITOR=./e-EDITOR.sh VISUAL=./e-VISUAL.sh \ + git commit --amend && test_commit_message HEAD -m "Edited by EDITOR" ' -TERM=vt100 -export TERM for i in $vi EDITOR VISUAL core_editor GIT_EDITOR do - echo "Edited by $i" >expect - unset EDITOR VISUAL GIT_EDITOR - git config --unset-all core.editor - case "$i" in - core_editor) - git config core.editor ./e-core_editor.sh - ;; - [A-Z]*) - eval "$i=./e-$i.sh" - export $i - ;; - esac test_expect_success "Using $i" ' - PATH="$PWD:$PATH" git commit --amend && - test_commit_message HEAD expect + 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 -unset EDITOR VISUAL GIT_EDITOR -git config --unset-all core.editor -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 - test_expect_success "Using $i (override)" ' - PATH="$PWD:$PATH" git commit --amend && - test_commit_message HEAD expect - ' -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" && @@ -97,9 +93,8 @@ test_expect_success 'editor with a space' ' test_commit_message HEAD -m space ' -unset GIT_EDITOR test_expect_success 'core.editor with a space' ' - git config core.editor \"./e\ space.sh\" && + test_config core.editor \"./e\ space.sh\" && git commit --amend && test_commit_message HEAD -m space '