Merge branch 'da/mergetool-tool-help'
Allow "git mergetool --help" to run outside a Git repository. * da/mergetool-tool-help: difftool: don't assume that default sh is sane mergetool: don't require a work tree for --tool-help git-sh-setup: move GIT_DIR initialization into a function mergetool: use more conservative temporary filenames test-lib-functions: adjust style to match CodingGuidelines t7610-mergetool: prefer test_config over git configmaint
						commit
						e96e98b339
					
				|  | @ -47,13 +47,9 @@ sub find_worktree | ||||||
|  |  | ||||||
| sub print_tool_help | sub print_tool_help | ||||||
| { | { | ||||||
| 	my $cmd = 'TOOL_MODE=diff'; |  | ||||||
| 	$cmd .= ' && . "$(git --exec-path)/git-mergetool--lib"'; |  | ||||||
| 	$cmd .= ' && show_tool_help'; |  | ||||||
|  |  | ||||||
| 	# See the comment at the bottom of file_diff() for the reason behind | 	# See the comment at the bottom of file_diff() for the reason behind | ||||||
| 	# using system() followed by exit() instead of exec(). | 	# using system() followed by exit() instead of exec(). | ||||||
| 	my $rc = system('sh', '-c', $cmd); | 	my $rc = system(qw(git mergetool --tool-help=diff)); | ||||||
| 	exit($rc | ($rc >> 8)); | 	exit($rc | ($rc >> 8)); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -10,11 +10,11 @@ | ||||||
|  |  | ||||||
| USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [file to merge] ...' | USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [file to merge] ...' | ||||||
| SUBDIRECTORY_OK=Yes | SUBDIRECTORY_OK=Yes | ||||||
|  | NONGIT_OK=Yes | ||||||
| OPTIONS_SPEC= | OPTIONS_SPEC= | ||||||
| TOOL_MODE=merge | TOOL_MODE=merge | ||||||
| . git-sh-setup | . git-sh-setup | ||||||
| . git-mergetool--lib | . git-mergetool--lib | ||||||
| require_work_tree |  | ||||||
|  |  | ||||||
| # Returns true if the mode reflects a symlink | # Returns true if the mode reflects a symlink | ||||||
| is_symlink () { | is_symlink () { | ||||||
|  | @ -327,6 +327,10 @@ guessed_merge_tool=false | ||||||
| while test $# != 0 | while test $# != 0 | ||||||
| do | do | ||||||
| 	case "$1" in | 	case "$1" in | ||||||
|  | 	--tool-help=*) | ||||||
|  | 		TOOL_MODE=${1#--tool-help=} | ||||||
|  | 		show_tool_help | ||||||
|  | 		;; | ||||||
| 	--tool-help) | 	--tool-help) | ||||||
| 		show_tool_help | 		show_tool_help | ||||||
| 		;; | 		;; | ||||||
|  | @ -378,6 +382,9 @@ prompt_after_failed_merge () { | ||||||
| 	done | 	done | ||||||
| } | } | ||||||
|  |  | ||||||
|  | git_dir_init | ||||||
|  | require_work_tree | ||||||
|  |  | ||||||
| if test -z "$merge_tool" | if test -z "$merge_tool" | ||||||
| then | then | ||||||
| 	# Check if a merge tool has been configured | 	# Check if a merge tool has been configured | ||||||
|  |  | ||||||
|  | @ -330,8 +330,7 @@ esac | ||||||
|  |  | ||||||
| # Make sure we are in a valid repository of a vintage we understand, | # Make sure we are in a valid repository of a vintage we understand, | ||||||
| # if we require to be in a git repository. | # if we require to be in a git repository. | ||||||
| if test -z "$NONGIT_OK" | git_dir_init () { | ||||||
| then |  | ||||||
| 	GIT_DIR=$(git rev-parse --git-dir) || exit | 	GIT_DIR=$(git rev-parse --git-dir) || exit | ||||||
| 	if [ -z "$SUBDIRECTORY_OK" ] | 	if [ -z "$SUBDIRECTORY_OK" ] | ||||||
| 	then | 	then | ||||||
|  | @ -346,6 +345,11 @@ then | ||||||
| 		exit 1 | 		exit 1 | ||||||
| 	} | 	} | ||||||
| 	: ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"} | 	: ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | if test -z "$NONGIT_OK" | ||||||
|  | then | ||||||
|  | 	git_dir_init | ||||||
| fi | fi | ||||||
|  |  | ||||||
| peel_committish () { | peel_committish () { | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ Testing basic merge tool invocation' | ||||||
| # running mergetool | # running mergetool | ||||||
|  |  | ||||||
| test_expect_success 'setup' ' | test_expect_success 'setup' ' | ||||||
| 	git config rerere.enabled true && | 	test_config rerere.enabled true && | ||||||
| 	echo master >file1 && | 	echo master >file1 && | ||||||
| 	echo master spaced >"spaced name" && | 	echo master spaced >"spaced name" && | ||||||
| 	echo master file11 >file11 && | 	echo master file11 >file11 && | ||||||
|  | @ -129,7 +129,7 @@ test_expect_success 'mergetool crlf' ' | ||||||
| 	git submodule update -N && | 	git submodule update -N && | ||||||
| 	test "$(cat submod/bar)" = "master submodule" && | 	test "$(cat submod/bar)" = "master submodule" && | ||||||
| 	git commit -m "branch1 resolved with mergetool - autocrlf" && | 	git commit -m "branch1 resolved with mergetool - autocrlf" && | ||||||
| 	git config core.autocrlf false && | 	test_config core.autocrlf false && | ||||||
| 	git reset --hard | 	git reset --hard | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | @ -176,7 +176,7 @@ test_expect_success 'mergetool skips autoresolved' ' | ||||||
| test_expect_success 'mergetool merges all from subdir' ' | test_expect_success 'mergetool merges all from subdir' ' | ||||||
| 	( | 	( | ||||||
| 		cd subdir && | 		cd subdir && | ||||||
| 		git config rerere.enabled false && | 		test_config rerere.enabled false && | ||||||
| 		test_must_fail git merge master && | 		test_must_fail git merge master && | ||||||
| 		( yes "r" | git mergetool ../submod ) && | 		( yes "r" | git mergetool ../submod ) && | ||||||
| 		( yes "d" "d" | git mergetool --no-prompt ) && | 		( yes "d" "d" | git mergetool --no-prompt ) && | ||||||
|  | @ -190,7 +190,7 @@ test_expect_success 'mergetool merges all from subdir' ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'mergetool skips resolved paths when rerere is active' ' | test_expect_success 'mergetool skips resolved paths when rerere is active' ' | ||||||
| 	git config rerere.enabled true && | 	test_config rerere.enabled true && | ||||||
| 	rm -rf .git/rr-cache && | 	rm -rf .git/rr-cache && | ||||||
| 	git checkout -b test5 branch1 && | 	git checkout -b test5 branch1 && | ||||||
| 	git submodule update -N && | 	git submodule update -N && | ||||||
|  | @ -204,7 +204,7 @@ test_expect_success 'mergetool skips resolved paths when rerere is active' ' | ||||||
| ' | ' | ||||||
|  |  | ||||||
| test_expect_success 'conflicted stash sets up rerere'  ' | test_expect_success 'conflicted stash sets up rerere'  ' | ||||||
| 	git config rerere.enabled true && | 	test_config rerere.enabled true && | ||||||
| 	git checkout stash1 && | 	git checkout stash1 && | ||||||
| 	echo "Conflicting stash content" >file11 && | 	echo "Conflicting stash content" >file11 && | ||||||
| 	git stash && | 	git stash && | ||||||
|  | @ -232,7 +232,7 @@ test_expect_success 'conflicted stash sets up rerere'  ' | ||||||
|  |  | ||||||
| test_expect_success 'mergetool takes partial path' ' | test_expect_success 'mergetool takes partial path' ' | ||||||
| 	git reset --hard && | 	git reset --hard && | ||||||
| 	git config rerere.enabled false && | 	test_config rerere.enabled false && | ||||||
| 	git checkout -b test12 branch1 && | 	git checkout -b test12 branch1 && | ||||||
| 	git submodule update -N && | 	git submodule update -N && | ||||||
| 	test_must_fail git merge master && | 	test_must_fail git merge master && | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano