mergetool: honor -O<orderfile>

Teach mergetool to pass "-O<orderfile>" down to `git diff` when
specified on the command-line.

Helped-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: David Aguilar <davvid@gmail.com>
Reviewed-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
David Aguilar 2016-10-07 17:01:30 -07:00 committed by Junio C Hamano
parent 57937f70a0
commit 654311bf6e
3 changed files with 40 additions and 6 deletions

View File

@ -79,10 +79,12 @@ success of the resolution after the custom tool has exited.
Prompt before each invocation of the merge resolution program Prompt before each invocation of the merge resolution program
to give the user a chance to skip the path. to give the user a chance to skip the path.
DIFF ORDER FILES -O<orderfile>::
---------------- Process files in the order specified in the
`git mergetool` honors the `diff.orderFile` configuration variable <orderfile>, which has one shell glob pattern per line.
used by `git diff`. See linkgit:git-config[1] for more details. This overrides the `diff.orderFile` configuration variable
(see linkgit:git-config[1]). To cancel `diff.orderFile`,
use `-O/dev/null`.
TEMPORARY FILES TEMPORARY FILES
--------------- ---------------

View File

@ -9,7 +9,7 @@
# at the discretion of Junio C Hamano. # at the discretion of Junio C Hamano.
# #
USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [file to merge] ...' USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [-O<orderfile>] [file to merge] ...'
SUBDIRECTORY_OK=Yes SUBDIRECTORY_OK=Yes
NONGIT_OK=Yes NONGIT_OK=Yes
OPTIONS_SPEC= OPTIONS_SPEC=
@ -390,6 +390,7 @@ print_noop_and_exit () {
main () { main () {
prompt=$(git config --bool mergetool.prompt) prompt=$(git config --bool mergetool.prompt)
guessed_merge_tool=false guessed_merge_tool=false
orderfile=
while test $# != 0 while test $# != 0
do do
@ -419,6 +420,9 @@ main () {
--prompt) --prompt)
prompt=true prompt=true
;; ;;
-O*)
orderfile="$1"
;;
--) --)
shift shift
break break
@ -460,7 +464,8 @@ main () {
fi fi
files=$(git -c core.quotePath=false \ files=$(git -c core.quotePath=false \
diff --name-only --diff-filter=U -- "$@") diff --name-only --diff-filter=U \
${orderfile:+"$orderfile"} -- "$@")
cd_to_toplevel cd_to_toplevel

View File

@ -638,5 +638,32 @@ test_expect_success 'diff.orderFile configuration is honored' '
test_cmp expect actual && test_cmp expect actual &&
git reset --hard >/dev/null git reset --hard >/dev/null
' '
test_expect_success 'mergetool -Oorder-file is honored' '
test_config diff.orderFile order-file &&
test_config mergetool.myecho.cmd "echo \"\$LOCAL\"" &&
test_config mergetool.myecho.trustExitCode true &&
test_must_fail git merge order-file-side1 &&
cat >expect <<-\EOF &&
Merging:
a
b
EOF
git mergetool -O/dev/null --no-prompt --tool myecho >output &&
git grep --no-index -h -A2 Merging: output >actual &&
test_cmp expect actual &&
git reset --hard >/dev/null 2>&1 &&
git config --unset diff.orderFile &&
test_must_fail git merge order-file-side1 &&
cat >expect <<-\EOF &&
Merging:
b
a
EOF
git mergetool -Oorder-file --no-prompt --tool myecho >output &&
git grep --no-index -h -A2 Merging: output >actual &&
test_cmp expect actual &&
git reset --hard >/dev/null 2>&1
'
test_done test_done