 b1492bf315
			
		
	
	b1492bf315
	
	
	
		
			
			Commit 4362da078e (t7005-editor: get rid of the SPACES_IN_FILENAMES
prereq, 2018-05-14) removed code for detecting whether spaces in
filenames work. Since we rely on spaces throughout the test suite
("trash directory.t1234-foo"), testing whether we can use the filename
"e space.sh" was redundant and unnecessary.
In simplifying the code, though, this introduced a regression around how
spaces are handled, not in the /name/ of the editor script, but /in/ the
script itself. The script just does `echo space >$1`, where $1 is for
example "/foo/t/trash directory.t7005-editor/.git/COMMIT_EDITMSG".
With most shells, or with Bash in posix mode, $1 will not be subjected
to field splitting. But if we invoke Bash directly, which will happen if
we build Git with SHELL_PATH=/bin/bash, it will detect and complain
about an "ambiguous redirect". More details can be found in [1], thanks
to SZEDER Gábor.
Make sure that the editor script quotes "$1" to remove the ambiguity.
[1] https://public-inbox.org/git/20180926121107.GH27036@localhost/
Signed-off-by: Alexander Pyhalov <apyhalov@gmail.com>
Commit-message-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
	
		
			
				
	
	
		
			132 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			2.3 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"
 | |
| 
 | |
| '
 | |
| 
 | |
| 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
 |