summaryrefslogtreecommitdiffstats
path: root/mergetools
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--mergetools/araxis18
-rw-r--r--mergetools/bc29
-rw-r--r--mergetools/codecompare23
-rw-r--r--mergetools/deltawalker25
-rw-r--r--mergetools/diffmerge18
-rw-r--r--mergetools/diffuse15
-rw-r--r--mergetools/ecmerge14
-rw-r--r--mergetools/emerge26
-rw-r--r--mergetools/examdiff16
-rw-r--r--mergetools/guiffy18
-rw-r--r--mergetools/gvimdiff1
-rw-r--r--mergetools/kdiff327
-rw-r--r--mergetools/kompare11
-rw-r--r--mergetools/meld89
-rw-r--r--mergetools/nvimdiff1
-rw-r--r--mergetools/opendiff14
-rw-r--r--mergetools/p4merge36
-rw-r--r--mergetools/smerge12
-rw-r--r--mergetools/tkdiff16
-rw-r--r--mergetools/tortoisemerge32
-rw-r--r--mergetools/vimdiff59
-rw-r--r--mergetools/winmerge15
-rw-r--r--mergetools/xxdiff23
23 files changed, 538 insertions, 0 deletions
diff --git a/mergetools/araxis b/mergetools/araxis
new file mode 100644
index 0000000..e2407b6
--- /dev/null
+++ b/mergetools/araxis
@@ -0,0 +1,18 @@
+diff_cmd () {
+ "$merge_tool_path" -wait -2 "$LOCAL" "$REMOTE" >/dev/null 2>&1
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ "$merge_tool_path" -wait -merge -3 -a1 \
+ "$BASE" "$LOCAL" "$REMOTE" "$MERGED" >/dev/null 2>&1
+ else
+ "$merge_tool_path" -wait -2 \
+ "$LOCAL" "$REMOTE" "$MERGED" >/dev/null 2>&1
+ fi
+}
+
+translate_merge_tool_path() {
+ echo compare
+}
diff --git a/mergetools/bc b/mergetools/bc
new file mode 100644
index 0000000..26c19d4
--- /dev/null
+++ b/mergetools/bc
@@ -0,0 +1,29 @@
+diff_cmd () {
+ "$merge_tool_path" "$LOCAL" "$REMOTE"
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ "$merge_tool_path" "$LOCAL" "$REMOTE" "$BASE" \
+ -mergeoutput="$MERGED"
+ else
+ "$merge_tool_path" "$LOCAL" "$REMOTE" \
+ -mergeoutput="$MERGED"
+ fi
+}
+
+translate_merge_tool_path() {
+ if type bcomp >/dev/null 2>/dev/null
+ then
+ echo bcomp
+ else
+ echo bcompare
+ fi
+}
+
+list_tool_variants () {
+ echo bc
+ echo bc3
+ echo bc4
+}
diff --git a/mergetools/codecompare b/mergetools/codecompare
new file mode 100644
index 0000000..9f60e8d
--- /dev/null
+++ b/mergetools/codecompare
@@ -0,0 +1,23 @@
+diff_cmd () {
+ "$merge_tool_path" "$LOCAL" "$REMOTE"
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ "$merge_tool_path" -MF="$LOCAL" -TF="$REMOTE" -BF="$BASE" \
+ -RF="$MERGED"
+ else
+ "$merge_tool_path" -MF="$LOCAL" -TF="$REMOTE" \
+ -RF="$MERGED"
+ fi
+}
+
+translate_merge_tool_path() {
+ if merge_mode
+ then
+ echo CodeMerge
+ else
+ echo CodeCompare
+ fi
+}
diff --git a/mergetools/deltawalker b/mergetools/deltawalker
new file mode 100644
index 0000000..ee6f374
--- /dev/null
+++ b/mergetools/deltawalker
@@ -0,0 +1,25 @@
+diff_cmd () {
+ "$merge_tool_path" "$LOCAL" "$REMOTE" >/dev/null 2>&1
+}
+
+merge_cmd () {
+ # Adding $(pwd)/ in front of $MERGED should not be necessary.
+ # However without it, DeltaWalker (at least v1.9.8 on Windows)
+ # crashes with a JRE exception. The DeltaWalker user manual,
+ # shows $(pwd)/ whenever the '-merged' options is given.
+ # Adding it here seems to work around the problem.
+ if $base_present
+ then
+ "$merge_tool_path" "$LOCAL" "$REMOTE" "$BASE" -merged="$(pwd)/$MERGED"
+ else
+ "$merge_tool_path" "$LOCAL" "$REMOTE" -merged="$(pwd)/$MERGED"
+ fi >/dev/null 2>&1
+}
+
+translate_merge_tool_path () {
+ echo DeltaWalker
+}
+
+exit_code_trustable () {
+ true
+}
diff --git a/mergetools/diffmerge b/mergetools/diffmerge
new file mode 100644
index 0000000..9b6355b
--- /dev/null
+++ b/mergetools/diffmerge
@@ -0,0 +1,18 @@
+diff_cmd () {
+ "$merge_tool_path" "$LOCAL" "$REMOTE" >/dev/null 2>&1
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ "$merge_tool_path" --merge --result="$MERGED" \
+ "$LOCAL" "$BASE" "$REMOTE"
+ else
+ "$merge_tool_path" --merge \
+ --result="$MERGED" "$LOCAL" "$REMOTE"
+ fi
+}
+
+exit_code_trustable () {
+ true
+}
diff --git a/mergetools/diffuse b/mergetools/diffuse
new file mode 100644
index 0000000..5a3ae8b
--- /dev/null
+++ b/mergetools/diffuse
@@ -0,0 +1,15 @@
+diff_cmd () {
+ "$merge_tool_path" "$LOCAL" "$REMOTE" | cat
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ "$merge_tool_path" \
+ "$LOCAL" "$MERGED" "$REMOTE" \
+ "$BASE" | cat
+ else
+ "$merge_tool_path" \
+ "$LOCAL" "$MERGED" "$REMOTE" | cat
+ fi
+}
diff --git a/mergetools/ecmerge b/mergetools/ecmerge
new file mode 100644
index 0000000..6c5101c
--- /dev/null
+++ b/mergetools/ecmerge
@@ -0,0 +1,14 @@
+diff_cmd () {
+ "$merge_tool_path" --default --mode=diff2 "$LOCAL" "$REMOTE"
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ "$merge_tool_path" "$BASE" "$LOCAL" "$REMOTE" \
+ --default --mode=merge3 --to="$MERGED"
+ else
+ "$merge_tool_path" "$LOCAL" "$REMOTE" \
+ --default --mode=merge2 --to="$MERGED"
+ fi
+}
diff --git a/mergetools/emerge b/mergetools/emerge
new file mode 100644
index 0000000..d1ce513
--- /dev/null
+++ b/mergetools/emerge
@@ -0,0 +1,26 @@
+diff_cmd () {
+ "$merge_tool_path" -f emerge-files-command "$LOCAL" "$REMOTE"
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ "$merge_tool_path" \
+ -f emerge-files-with-ancestor-command \
+ "$LOCAL" "$REMOTE" "$BASE" \
+ "$(basename "$MERGED")"
+ else
+ "$merge_tool_path" \
+ -f emerge-files-command \
+ "$LOCAL" "$REMOTE" \
+ "$(basename "$MERGED")"
+ fi
+}
+
+translate_merge_tool_path() {
+ echo emacs
+}
+
+exit_code_trustable () {
+ true
+}
diff --git a/mergetools/examdiff b/mergetools/examdiff
new file mode 100644
index 0000000..e72b06f
--- /dev/null
+++ b/mergetools/examdiff
@@ -0,0 +1,16 @@
+diff_cmd () {
+ "$merge_tool_path" "$LOCAL" "$REMOTE" -nh
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ "$merge_tool_path" -merge "$LOCAL" "$BASE" "$REMOTE" -o:"$MERGED" -nh
+ else
+ "$merge_tool_path" -merge "$LOCAL" "$REMOTE" -o:"$MERGED" -nh
+ fi
+}
+
+translate_merge_tool_path() {
+ mergetool_find_win32_cmd "ExamDiff.com" "ExamDiff Pro"
+}
diff --git a/mergetools/guiffy b/mergetools/guiffy
new file mode 100644
index 0000000..8b23a13
--- /dev/null
+++ b/mergetools/guiffy
@@ -0,0 +1,18 @@
+diff_cmd () {
+ "$merge_tool_path" "$LOCAL" "$REMOTE"
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ "$merge_tool_path" -s "$LOCAL" \
+ "$REMOTE" "$BASE" "$MERGED"
+ else
+ "$merge_tool_path" -m "$LOCAL" \
+ "$REMOTE" "$MERGED"
+ fi
+}
+
+exit_code_trustable () {
+ true
+}
diff --git a/mergetools/gvimdiff b/mergetools/gvimdiff
new file mode 100644
index 0000000..04a5bb0
--- /dev/null
+++ b/mergetools/gvimdiff
@@ -0,0 +1 @@
+. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/kdiff3 b/mergetools/kdiff3
new file mode 100644
index 0000000..0264ed5
--- /dev/null
+++ b/mergetools/kdiff3
@@ -0,0 +1,27 @@
+diff_cmd () {
+ "$merge_tool_path" \
+ --L1 "$MERGED (A)" --L2 "$MERGED (B)" \
+ "$LOCAL" "$REMOTE" >/dev/null 2>&1
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ "$merge_tool_path" --auto \
+ --L1 "$MERGED (Base)" \
+ --L2 "$MERGED (Local)" \
+ --L3 "$MERGED (Remote)" \
+ -o "$MERGED" "$BASE" "$LOCAL" "$REMOTE" \
+ >/dev/null 2>&1
+ else
+ "$merge_tool_path" --auto \
+ --L1 "$MERGED (Local)" \
+ --L2 "$MERGED (Remote)" \
+ -o "$MERGED" "$LOCAL" "$REMOTE" \
+ >/dev/null 2>&1
+ fi
+}
+
+exit_code_trustable () {
+ true
+}
diff --git a/mergetools/kompare b/mergetools/kompare
new file mode 100644
index 0000000..e8c0bfa
--- /dev/null
+++ b/mergetools/kompare
@@ -0,0 +1,11 @@
+can_merge () {
+ return 1
+}
+
+diff_cmd () {
+ "$merge_tool_path" "$LOCAL" "$REMOTE"
+}
+
+exit_code_trustable () {
+ true
+}
diff --git a/mergetools/meld b/mergetools/meld
new file mode 100644
index 0000000..aab4ebb
--- /dev/null
+++ b/mergetools/meld
@@ -0,0 +1,89 @@
+diff_cmd () {
+ "$merge_tool_path" "$LOCAL" "$REMOTE"
+}
+
+merge_cmd () {
+ check_meld_for_features
+
+ option_auto_merge=
+ if test "$meld_use_auto_merge_option" = true
+ then
+ option_auto_merge="--auto-merge"
+ fi
+
+ if test "$meld_has_output_option" = true
+ then
+ "$merge_tool_path" $option_auto_merge --output="$MERGED" \
+ "$LOCAL" "$BASE" "$REMOTE"
+ else
+ "$merge_tool_path" $option_auto_merge "$LOCAL" "$MERGED" "$REMOTE"
+ fi
+}
+
+# Get meld help message
+init_meld_help_msg () {
+ if test -z "$meld_help_msg"
+ then
+ meld_path="$(git config mergetool.meld.path || echo meld)"
+ meld_help_msg=$("$meld_path" --help 2>&1)
+ fi
+}
+
+# Check the features and set flags
+check_meld_for_features () {
+ # Check whether we should use 'meld --output <file>'
+ if test -z "$meld_has_output_option"
+ then
+ meld_has_output_option=$(git config --bool mergetool.meld.hasOutput)
+ case "$meld_has_output_option" in
+ true | false)
+ : use configured value
+ ;;
+ *)
+ : empty or invalid configured value, detecting "--output" automatically
+ init_meld_help_msg
+
+ case "$meld_help_msg" in
+ *"--output="* | *'[OPTION...]'*)
+ # All version that has [OPTION...] supports --output
+ meld_has_output_option=true
+ ;;
+ *)
+ meld_has_output_option=false
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ # Check whether we should use 'meld --auto-merge ...'
+ if test -z "$meld_use_auto_merge_option"
+ then
+ meld_use_auto_merge_option=$(
+ git config --bool-or-str mergetool.meld.useAutoMerge
+ )
+ case "$meld_use_auto_merge_option" in
+ true | false)
+ : use well formatted boolean value
+ ;;
+ auto)
+ # testing the "--auto-merge" option only if config is "auto"
+ init_meld_help_msg
+
+ case "$meld_help_msg" in
+ *"--auto-merge"* | *'[OPTION...]'*)
+ meld_use_auto_merge_option=true
+ ;;
+ *)
+ meld_use_auto_merge_option=false
+ ;;
+ esac
+ ;;
+ "")
+ meld_use_auto_merge_option=false
+ ;;
+ *)
+ die "unknown mergetool.meld.useAutoMerge: $meld_use_auto_merge_option"
+ ;;
+ esac
+ fi
+}
diff --git a/mergetools/nvimdiff b/mergetools/nvimdiff
new file mode 100644
index 0000000..04a5bb0
--- /dev/null
+++ b/mergetools/nvimdiff
@@ -0,0 +1 @@
+. "$MERGE_TOOLS_DIR/vimdiff"
diff --git a/mergetools/opendiff b/mergetools/opendiff
new file mode 100644
index 0000000..b608dd6
--- /dev/null
+++ b/mergetools/opendiff
@@ -0,0 +1,14 @@
+diff_cmd () {
+ "$merge_tool_path" "$LOCAL" "$REMOTE" | cat
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ "$merge_tool_path" "$LOCAL" "$REMOTE" \
+ -ancestor "$BASE" -merge "$MERGED" | cat
+ else
+ "$merge_tool_path" "$LOCAL" "$REMOTE" \
+ -merge "$MERGED" | cat
+ fi
+}
diff --git a/mergetools/p4merge b/mergetools/p4merge
new file mode 100644
index 0000000..7a5b291
--- /dev/null
+++ b/mergetools/p4merge
@@ -0,0 +1,36 @@
+diff_cmd () {
+ empty_file=
+
+ # p4merge does not like /dev/null
+ if test "/dev/null" = "$LOCAL"
+ then
+ LOCAL="$(create_empty_file)"
+ fi
+ if test "/dev/null" = "$REMOTE"
+ then
+ REMOTE="$(create_empty_file)"
+ fi
+
+ "$merge_tool_path" "$LOCAL" "$REMOTE"
+
+ if test -n "$empty_file"
+ then
+ rm -f "$empty_file"
+ fi
+}
+
+merge_cmd () {
+ if ! $base_present
+ then
+ cp -- "$LOCAL" "$BASE"
+ create_virtual_base "$BASE" "$REMOTE"
+ fi
+ "$merge_tool_path" "$BASE" "$REMOTE" "$LOCAL" "$MERGED"
+}
+
+create_empty_file () {
+ empty_file="${TMPDIR:-/tmp}/git-difftool-p4merge-empty-file.$$"
+ >"$empty_file"
+
+ printf "%s" "$empty_file"
+}
diff --git a/mergetools/smerge b/mergetools/smerge
new file mode 100644
index 0000000..9c2e6f6
--- /dev/null
+++ b/mergetools/smerge
@@ -0,0 +1,12 @@
+diff_cmd () {
+ "$merge_tool_path" mergetool "$LOCAL" "$REMOTE" -o "$MERGED"
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ "$merge_tool_path" mergetool "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"
+ else
+ "$merge_tool_path" mergetool "$LOCAL" "$REMOTE" -o "$MERGED"
+ fi
+}
diff --git a/mergetools/tkdiff b/mergetools/tkdiff
new file mode 100644
index 0000000..eee5cb5
--- /dev/null
+++ b/mergetools/tkdiff
@@ -0,0 +1,16 @@
+diff_cmd () {
+ "$merge_tool_path" "$LOCAL" "$REMOTE"
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ "$merge_tool_path" -a "$BASE" -o "$MERGED" "$LOCAL" "$REMOTE"
+ else
+ "$merge_tool_path" -o "$MERGED" "$LOCAL" "$REMOTE"
+ fi
+}
+
+exit_code_trustable () {
+ true
+}
diff --git a/mergetools/tortoisemerge b/mergetools/tortoisemerge
new file mode 100644
index 0000000..d7ab666
--- /dev/null
+++ b/mergetools/tortoisemerge
@@ -0,0 +1,32 @@
+can_diff () {
+ return 1
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ basename="$(basename "$merge_tool_path" .exe)"
+ if test "$basename" = "tortoisegitmerge"
+ then
+ "$merge_tool_path" \
+ -base "$BASE" -mine "$LOCAL" \
+ -theirs "$REMOTE" -merged "$MERGED"
+ else
+ "$merge_tool_path" \
+ -base:"$BASE" -mine:"$LOCAL" \
+ -theirs:"$REMOTE" -merged:"$MERGED"
+ fi
+ else
+ echo "$merge_tool_path cannot be used without a base" 1>&2
+ return 1
+ fi
+}
+
+translate_merge_tool_path() {
+ if type tortoisegitmerge >/dev/null 2>/dev/null
+ then
+ echo tortoisegitmerge
+ else
+ echo tortoisemerge
+ fi
+}
diff --git a/mergetools/vimdiff b/mergetools/vimdiff
new file mode 100644
index 0000000..abc8ce4
--- /dev/null
+++ b/mergetools/vimdiff
@@ -0,0 +1,59 @@
+diff_cmd () {
+ "$merge_tool_path" -R -f -d \
+ -c 'wincmd l' -c 'cd $GIT_PREFIX' "$LOCAL" "$REMOTE"
+}
+
+merge_cmd () {
+ case "$1" in
+ *vimdiff)
+ if $base_present
+ then
+ "$merge_tool_path" -f -d -c '4wincmd w | wincmd J' \
+ "$LOCAL" "$BASE" "$REMOTE" "$MERGED"
+ else
+ "$merge_tool_path" -f -d -c 'wincmd l' \
+ "$LOCAL" "$MERGED" "$REMOTE"
+ fi
+ ;;
+ *vimdiff2)
+ "$merge_tool_path" -f -d -c 'wincmd l' \
+ "$LOCAL" "$MERGED" "$REMOTE"
+ ;;
+ *vimdiff3)
+ if $base_present
+ then
+ "$merge_tool_path" -f -d -c 'hid | hid | hid' \
+ "$LOCAL" "$REMOTE" "$BASE" "$MERGED"
+ else
+ "$merge_tool_path" -f -d -c 'hid | hid' \
+ "$LOCAL" "$REMOTE" "$MERGED"
+ fi
+ ;;
+ esac
+}
+
+translate_merge_tool_path() {
+ case "$1" in
+ nvimdiff*)
+ echo nvim
+ ;;
+ gvimdiff*)
+ echo gvim
+ ;;
+ vimdiff*)
+ echo vim
+ ;;
+ esac
+}
+
+exit_code_trustable () {
+ true
+}
+
+list_tool_variants () {
+ for prefix in '' g n; do
+ for suffix in '' 2 3; do
+ echo "${prefix}vimdiff${suffix}"
+ done
+ done
+}
diff --git a/mergetools/winmerge b/mergetools/winmerge
new file mode 100644
index 0000000..74d0325
--- /dev/null
+++ b/mergetools/winmerge
@@ -0,0 +1,15 @@
+diff_cmd () {
+ "$merge_tool_path" -u -e "$LOCAL" "$REMOTE"
+ return 0
+}
+
+merge_cmd () {
+ # mergetool.winmerge.trustExitCode is implicitly false.
+ # touch $BACKUP so that we can check_unchanged.
+ "$merge_tool_path" -u -e -dl Local -dr Remote \
+ "$LOCAL" "$REMOTE" "$MERGED"
+}
+
+translate_merge_tool_path() {
+ mergetool_find_win32_cmd "WinMergeU.exe" "WinMerge"
+}
diff --git a/mergetools/xxdiff b/mergetools/xxdiff
new file mode 100644
index 0000000..ce5b8e9
--- /dev/null
+++ b/mergetools/xxdiff
@@ -0,0 +1,23 @@
+diff_cmd () {
+ "$merge_tool_path" \
+ -R 'Accel.Search: "Ctrl+F"' \
+ -R 'Accel.SearchForward: "Ctrl+G"' \
+ "$LOCAL" "$REMOTE"
+}
+
+merge_cmd () {
+ if $base_present
+ then
+ "$merge_tool_path" -X --show-merged-pane \
+ -R 'Accel.SaveAsMerged: "Ctrl+S"' \
+ -R 'Accel.Search: "Ctrl+F"' \
+ -R 'Accel.SearchForward: "Ctrl+G"' \
+ --merged-file "$MERGED" "$LOCAL" "$BASE" "$REMOTE"
+ else
+ "$merge_tool_path" -X $extra \
+ -R 'Accel.SaveAsMerged: "Ctrl+S"' \
+ -R 'Accel.Search: "Ctrl+F"' \
+ -R 'Accel.SearchForward: "Ctrl+G"' \
+ --merged-file "$MERGED" "$LOCAL" "$REMOTE"
+ fi
+}