mirror of
https://github.com/git/git.git
synced 2026-01-09 17:46:37 +00:00
mergetool: add per-tool support and overrides for the hideResolved flag
Add a per-tool override flag so that users may enable the flag for one
tool and disable it for another by setting
`mergetool.<tool>.hideResolved` to `false`.
In addition, the author or maintainer of a mergetool may optionally
override the default `hideResolved` value for that mergetool. If the
`mergetools/<tool>` shell script contains a `hide_resolved_enabled`
function it will be called when the mergetool is invoked and the return
value will be used as the default for the `hideResolved` flag.
hide_resolved_enabled () {
return 1
}
Disabling may be desirable if the mergetool wants or needs access to the
original, unmodified 'LOCAL' and 'REMOTE' versions of the conflicted
file. For example:
- A tool may use a custom conflict resolution algorithm and prefer to
ignore the results of Git's conflict resolution.
- A tool may want to visually compare/constrast the version of the file
from before the merge (saved to 'LOCAL', 'REMOTE', and 'BASE') with
Git's conflict resolution results (saved to 'MERGED').
Helped-by: Johannes Sixt <j6t@kdbg.org>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Seth House <seth@eseth.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
de8dafbada
commit
9d9cf23031
@@ -333,7 +333,41 @@ merge_file () {
|
||||
checkout_staged_file 2 "$MERGED" "$LOCAL"
|
||||
checkout_staged_file 3 "$MERGED" "$REMOTE"
|
||||
|
||||
if test "$(git config --type=bool mergetool.hideResolved)" != "false"
|
||||
# hideResolved preferences hierarchy.
|
||||
global_config="mergetool.hideResolved"
|
||||
tool_config="mergetool.${merge_tool}.hideResolved"
|
||||
|
||||
if enabled=$(git config --type=bool "$tool_config")
|
||||
then
|
||||
# The user has a specific preference for a specific tool and no
|
||||
# other preferences should override that.
|
||||
: ;
|
||||
elif enabled=$(git config --type=bool "$global_config")
|
||||
then
|
||||
# The user has a general preference for all tools.
|
||||
#
|
||||
# 'true' means the user likes the feature so we should use it
|
||||
# where possible but tool authors can still override.
|
||||
#
|
||||
# 'false' means the user doesn't like the feature so we should
|
||||
# not use it anywhere.
|
||||
if test "$enabled" = true && hide_resolved_enabled
|
||||
then
|
||||
enabled=true
|
||||
else
|
||||
enabled=false
|
||||
fi
|
||||
else
|
||||
# The user does not have a preference. Ask the tool.
|
||||
if hide_resolved_enabled
|
||||
then
|
||||
enabled=true
|
||||
else
|
||||
enabled=false
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$enabled" = true
|
||||
then
|
||||
hide_resolved
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user