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
This commit is contained in:
Junio C Hamano 2014-10-21 13:28:37 -07:00
Родитель 02f4db83bd 4fb4b02d98
Коммит e96e98b339
4 изменённых файлов: 21 добавлений и 14 удалений

Просмотреть файл

@ -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 &&