about summary refs log tree commit diff
path: root/third_party/git/t/t7005-editor.sh
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/t/t7005-editor.sh')
-rwxr-xr-xthird_party/git/t/t7005-editor.sh131
1 files changed, 131 insertions, 0 deletions
diff --git a/third_party/git/t/t7005-editor.sh b/third_party/git/t/t7005-editor.sh
new file mode 100755
index 000000000000..5fcf281dfbf8
--- /dev/null
+++ b/third_party/git/t/t7005-editor.sh
@@ -0,0 +1,131 @@
+#!/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"
+
+'
+
+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 '
+
+	msg="Hand-edited" &&
+	test_commit "$msg" &&
+	echo "$msg" >expect &&
+	git show -s --format=%s > actual &&
+	test_cmp expect actual
+
+'
+
+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_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"
+
+'
+
+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" '
+		git --exec-path=. commit --amend &&
+		git show -s --pretty=oneline |
+		sed -e "s/^[0-9a-f]* //" >actual &&
+		test_cmp expect actual
+	'
+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)" '
+		git --exec-path=. commit --amend &&
+		git show -s --pretty=oneline |
+		sed -e "s/^[0-9a-f]* //" >actual &&
+		test_cmp expect actual
+	'
+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 space = "$(git show -s --pretty=format:%s)"
+
+'
+
+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_done