diff options
author | Junio C Hamano <gitster@pobox.com> | 2014-10-21 13:28:37 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-10-21 13:28:37 -0700 |
commit | e96e98b3399ae4c638466f84068fe94d4712c5a3 (patch) | |
tree | 55cee4b82db5239c5f1b2070509c261b378f55f3 | |
parent | 02f4db83bd979fe33f18006fa612d7d5ab1d2470 (diff) | |
parent | 4fb4b02d98310f4f859f7d52f57f36d49198be5c (diff) | |
download | git-e96e98b3399ae4c638466f84068fe94d4712c5a3.tar.gz git-e96e98b3399ae4c638466f84068fe94d4712c5a3.tar.xz |
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 config
-rwxr-xr-x | git-difftool.perl | 6 | ||||
-rwxr-xr-x | git-mergetool.sh | 9 | ||||
-rw-r--r-- | git-sh-setup.sh | 8 | ||||
-rwxr-xr-x | t/t7610-mergetool.sh | 12 |
4 files changed, 21 insertions, 14 deletions
diff --git a/git-difftool.perl b/git-difftool.perl index 18ca61e8d..598fcc23b 100755 --- a/git-difftool.perl +++ b/git-difftool.perl @@ -47,13 +47,9 @@ sub find_worktree 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 # 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)); } diff --git a/git-mergetool.sh b/git-mergetool.sh index 96a61ba6f..ec644d542 100755 --- a/git-mergetool.sh +++ b/git-mergetool.sh @@ -10,11 +10,11 @@ USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [file to merge] ...' SUBDIRECTORY_OK=Yes +NONGIT_OK=Yes OPTIONS_SPEC= TOOL_MODE=merge . git-sh-setup . git-mergetool--lib -require_work_tree # Returns true if the mode reflects a symlink is_symlink () { @@ -327,6 +327,10 @@ guessed_merge_tool=false while test $# != 0 do case "$1" in + --tool-help=*) + TOOL_MODE=${1#--tool-help=} + show_tool_help + ;; --tool-help) show_tool_help ;; @@ -378,6 +382,9 @@ prompt_after_failed_merge () { done } +git_dir_init +require_work_tree + if test -z "$merge_tool" then # Check if a merge tool has been configured diff --git a/git-sh-setup.sh b/git-sh-setup.sh index 944798033..d96876013 100644 --- a/git-sh-setup.sh +++ b/git-sh-setup.sh @@ -330,8 +330,7 @@ esac # Make sure we are in a valid repository of a vintage we understand, # if we require to be in a git repository. -if test -z "$NONGIT_OK" -then +git_dir_init () { GIT_DIR=$(git rev-parse --git-dir) || exit if [ -z "$SUBDIRECTORY_OK" ] then @@ -346,6 +345,11 @@ then exit 1 } : ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"} +} + +if test -z "$NONGIT_OK" +then + git_dir_init fi peel_committish () { diff --git a/t/t7610-mergetool.sh b/t/t7610-mergetool.sh index 2834ded84..3502ec9fe 100755 --- a/t/t7610-mergetool.sh +++ b/t/t7610-mergetool.sh @@ -14,7 +14,7 @@ Testing basic merge tool invocation' # running mergetool test_expect_success 'setup' ' - git config rerere.enabled true && + test_config rerere.enabled true && echo master >file1 && echo master spaced >"spaced name" && echo master file11 >file11 && @@ -129,7 +129,7 @@ test_expect_success 'mergetool crlf' ' git submodule update -N && test "$(cat submod/bar)" = "master submodule" && git commit -m "branch1 resolved with mergetool - autocrlf" && - git config core.autocrlf false && + test_config core.autocrlf false && git reset --hard ' @@ -176,7 +176,7 @@ test_expect_success 'mergetool skips autoresolved' ' test_expect_success 'mergetool merges all from subdir' ' ( cd subdir && - git config rerere.enabled false && + test_config rerere.enabled false && test_must_fail git merge master && ( yes "r" | git mergetool ../submod ) && ( 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' ' - git config rerere.enabled true && + test_config rerere.enabled true && rm -rf .git/rr-cache && git checkout -b test5 branch1 && 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' ' - git config rerere.enabled true && + test_config rerere.enabled true && git checkout stash1 && echo "Conflicting stash content" >file11 && git stash && @@ -232,7 +232,7 @@ test_expect_success 'conflicted stash sets up rerere' ' test_expect_success 'mergetool takes partial path' ' git reset --hard && - git config rerere.enabled false && + test_config rerere.enabled false && git checkout -b test12 branch1 && git submodule update -N && test_must_fail git merge master && |