Skip to content

Commit

Permalink
mergetools: simplify how we handle "vim" and "defaults"
Browse files Browse the repository at this point in the history
Remove the exceptions for "vim" and "defaults" in the mergetool library
so that every filename in mergetools/ matches 1:1 with the name of a
valid built-in tool.

Define the trivial fallback definition of shell functions in-line in
git-mergetool-lib script, instead of dot-sourcing them from another
file.  The result is much easier to follow.

[jc: squashed in an update from John Keeping as well]

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
David Aguilar authored and Junio C Hamano committed Jan 29, 2013
1 parent 62957be commit 073678b
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 52 deletions.
61 changes: 31 additions & 30 deletions git-mergetool--lib.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/bin/sh
# git-mergetool--lib is a library for common merge tool functions
MERGE_TOOLS_DIR=$(git --exec-path)/mergetools

diff_mode() {
test "$TOOL_MODE" = diff
}
Expand Down Expand Up @@ -44,19 +46,32 @@ valid_tool () {
}

setup_tool () {
case "$1" in
vim*|gvim*)
tool=vim
;;
*)
tool="$1"
;;
esac
mergetools="$(git --exec-path)/mergetools"
tool="$1"

# Fallback definitions, to be overriden by tools.
can_merge () {
return 0
}

can_diff () {
return 0
}

diff_cmd () {
status=1
return $status
}

merge_cmd () {
status=1
return $status
}

# Load the default definitions
. "$mergetools/defaults"
if ! test -f "$mergetools/$tool"
translate_merge_tool_path () {
echo "$1"
}

if ! test -f "$MERGE_TOOLS_DIR/$tool"
then
# Use a special return code for this case since we want to
# source "defaults" even when an explicit tool path is
Expand All @@ -66,7 +81,7 @@ setup_tool () {
fi

# Load the redefined functions
. "$mergetools/$tool"
. "$MERGE_TOOLS_DIR/$tool"

if merge_mode && ! can_merge
then
Expand Down Expand Up @@ -194,24 +209,10 @@ list_merge_tool_candidates () {
show_tool_help () {
unavailable= available= LF='
'

scriptlets="$(git --exec-path)"/mergetools
for i in "$scriptlets"/*
for i in "$MERGE_TOOLS_DIR"/*
do
. "$scriptlets"/defaults
. "$i"

tool="$(basename "$i")"
if test "$tool" = "defaults"
then
continue
elif merge_mode && ! can_merge
then
continue
elif diff_mode && ! can_diff
then
continue
fi
tool=$(basename "$i")
setup_tool "$tool" 2>/dev/null || continue

merge_tool_path=$(translate_merge_tool_path "$tool")
if type "$merge_tool_path" >/dev/null 2>&1
Expand Down
22 changes: 0 additions & 22 deletions mergetools/defaults

This file was deleted.

1 change: 1 addition & 0 deletions mergetools/gvimdiff
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
. "$MERGE_TOOLS_DIR/vimdiff"
1 change: 1 addition & 0 deletions mergetools/gvimdiff2
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
. "$MERGE_TOOLS_DIR/vimdiff"
File renamed without changes.
1 change: 1 addition & 0 deletions mergetools/vimdiff2
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
. "$MERGE_TOOLS_DIR/vimdiff"

0 comments on commit 073678b

Please sign in to comment.