diff options
author | David Aguilar <davvid@gmail.com> | 2011-08-18 00:23:46 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-08-19 00:09:19 -0700 |
commit | bc7a96a8965d4ce0651689301e1702a942dfb9f0 (patch) | |
tree | d4d6f70f97683090221c8f7ba4888a54e4d73a92 /mergetools | |
parent | 240dc3e8edb3ae4ee968febc006fa761811c60e6 (diff) | |
download | git-bc7a96a8965d4ce0651689301e1702a942dfb9f0.tar.gz |
mergetool--lib: Refactor tools into separate files
Individual merge tools are now defined in a mergetools/$tool
file which is sourced at runtime.
The individual files are installed into $(git --exec-path)/mergetools/.
New tools can be added by creating a new file instead of editing the
git-mergetool--lib.sh scriptlet.
http://thread.gmane.org/gmane.comp.version-control.git/134906/focus=135006
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'mergetools')
-rw-r--r-- | mergetools/araxis | 20 | ||||
-rw-r--r-- | mergetools/bc3 | 20 | ||||
-rw-r--r-- | mergetools/defaults | 46 | ||||
-rw-r--r-- | mergetools/diffuse | 17 | ||||
-rw-r--r-- | mergetools/ecmerge | 16 | ||||
-rw-r--r-- | mergetools/emerge | 23 | ||||
-rw-r--r-- | mergetools/kdiff3 | 24 | ||||
-rw-r--r-- | mergetools/kompare | 7 | ||||
-rw-r--r-- | mergetools/meld | 9 | ||||
-rw-r--r-- | mergetools/opendiff | 16 | ||||
-rw-r--r-- | mergetools/p4merge | 10 | ||||
-rw-r--r-- | mergetools/tkdiff | 12 | ||||
-rw-r--r-- | mergetools/tortoisemerge | 17 | ||||
-rw-r--r-- | mergetools/vim | 44 | ||||
-rw-r--r-- | mergetools/xxdiff | 25 |
15 files changed, 306 insertions, 0 deletions
diff --git a/mergetools/araxis b/mergetools/araxis new file mode 100644 index 0000000000..64f97c5e97 --- /dev/null +++ b/mergetools/araxis @@ -0,0 +1,20 @@ +diff_cmd () { + "$merge_tool_path" -wait -2 "$LOCAL" "$REMOTE" >/dev/null 2>&1 +} + +merge_cmd () { + touch "$BACKUP" + 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 + check_unchanged +} + +translate_merge_tool_path() { + echo compare +} diff --git a/mergetools/bc3 b/mergetools/bc3 new file mode 100644 index 0000000000..27b3dd48b8 --- /dev/null +++ b/mergetools/bc3 @@ -0,0 +1,20 @@ +diff_cmd () { + "$merge_tool_path" "$LOCAL" "$REMOTE" +} + +merge_cmd () { + touch "$BACKUP" + if $base_present + then + "$merge_tool_path" "$LOCAL" "$REMOTE" "$BASE" \ + -mergeoutput="$MERGED" + else + "$merge_tool_path" "$LOCAL" "$REMOTE" \ + -mergeoutput="$MERGED" + fi + check_unchanged +} + +translate_merge_tool_path() { + echo bcompare +} diff --git a/mergetools/defaults b/mergetools/defaults new file mode 100644 index 0000000000..1d8f2a3dd3 --- /dev/null +++ b/mergetools/defaults @@ -0,0 +1,46 @@ +# Redefined by builtin tools +can_merge () { + return 0 +} + +can_diff () { + return 0 +} + +diff_cmd () { + merge_tool_cmd="$(get_merge_tool_cmd "$1")" + if test -z "$merge_tool_cmd" + then + status=1 + break + fi + ( eval $merge_tool_cmd ) + status=$? + return $status +} + +merge_cmd () { + merge_tool_cmd="$(get_merge_tool_cmd "$1")" + if test -z "$merge_tool_cmd" + then + status=1 + break + fi + trust_exit_code="$(git config --bool \ + mergetool."$1".trustExitCode || echo false)" + if test "$trust_exit_code" = "false" + then + touch "$BACKUP" + ( eval $merge_tool_cmd ) + status=$? + check_unchanged + else + ( eval $merge_tool_cmd ) + status=$? + fi + return $status +} + +translate_merge_tool_path () { + echo "$1" +} diff --git a/mergetools/diffuse b/mergetools/diffuse new file mode 100644 index 0000000000..02e0843f47 --- /dev/null +++ b/mergetools/diffuse @@ -0,0 +1,17 @@ +diff_cmd () { + "$merge_tool_path" "$LOCAL" "$REMOTE" | cat +} + +merge_cmd () { + touch "$BACKUP" + if $base_present + then + "$merge_tool_path" \ + "$LOCAL" "$MERGED" "$REMOTE" \ + "$BASE" | cat + else + "$merge_tool_path" \ + "$LOCAL" "$MERGED" "$REMOTE" | cat + fi + check_unchanged +} diff --git a/mergetools/ecmerge b/mergetools/ecmerge new file mode 100644 index 0000000000..13c2e439de --- /dev/null +++ b/mergetools/ecmerge @@ -0,0 +1,16 @@ +diff_cmd () { + "$merge_tool_path" --default --mode=diff2 "$LOCAL" "$REMOTE" +} + +merge_cmd () { + touch "$BACKUP" + 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 + check_unchanged +} diff --git a/mergetools/emerge b/mergetools/emerge new file mode 100644 index 0000000000..f96d9e550a --- /dev/null +++ b/mergetools/emerge @@ -0,0 +1,23 @@ +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 + status=$? +} + +translate_merge_tool_path() { + echo emacs +} diff --git a/mergetools/kdiff3 b/mergetools/kdiff3 new file mode 100644 index 0000000000..28fead428b --- /dev/null +++ b/mergetools/kdiff3 @@ -0,0 +1,24 @@ +diff_cmd () { + "$merge_tool_path" --auto \ + --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 + status=$? +} diff --git a/mergetools/kompare b/mergetools/kompare new file mode 100644 index 0000000000..433686c12a --- /dev/null +++ b/mergetools/kompare @@ -0,0 +1,7 @@ +can_merge () { + return 1 +} + +diff_cmd () { + "$merge_tool_path" "$LOCAL" "$REMOTE" +} diff --git a/mergetools/meld b/mergetools/meld new file mode 100644 index 0000000000..73d70ae28a --- /dev/null +++ b/mergetools/meld @@ -0,0 +1,9 @@ +diff_cmd () { + "$merge_tool_path" "$LOCAL" "$REMOTE" +} + +merge_cmd () { + touch "$BACKUP" + "$merge_tool_path" "$LOCAL" "$MERGED" "$REMOTE" + check_unchanged +} diff --git a/mergetools/opendiff b/mergetools/opendiff new file mode 100644 index 0000000000..0942b2a733 --- /dev/null +++ b/mergetools/opendiff @@ -0,0 +1,16 @@ +diff_cmd () { + "$merge_tool_path" "$LOCAL" "$REMOTE" | cat +} + +merge_cmd () { + touch "$BACKUP" + if $base_present + then + "$merge_tool_path" "$LOCAL" "$REMOTE" \ + -ancestor "$BASE" -merge "$MERGED" | cat + else + "$merge_tool_path" "$LOCAL" "$REMOTE" \ + -merge "$MERGED" | cat + fi + check_unchanged +} diff --git a/mergetools/p4merge b/mergetools/p4merge new file mode 100644 index 0000000000..1a45c1b0c5 --- /dev/null +++ b/mergetools/p4merge @@ -0,0 +1,10 @@ +diff_cmd () { + "$merge_tool_path" "$LOCAL" "$REMOTE" +} + +merge_cmd () { + touch "$BACKUP" + $base_present || >"$BASE" + "$merge_tool_path" "$BASE" "$LOCAL" "$REMOTE" "$MERGED" + check_unchanged +} diff --git a/mergetools/tkdiff b/mergetools/tkdiff new file mode 100644 index 0000000000..618c438e87 --- /dev/null +++ b/mergetools/tkdiff @@ -0,0 +1,12 @@ +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 +} diff --git a/mergetools/tortoisemerge b/mergetools/tortoisemerge new file mode 100644 index 0000000000..ed7db495ed --- /dev/null +++ b/mergetools/tortoisemerge @@ -0,0 +1,17 @@ +can_diff () { + return 1 +} + +merge_cmd () { + if $base_present + then + touch "$BACKUP" + "$merge_tool_path" \ + -base:"$BASE" -mine:"$LOCAL" \ + -theirs:"$REMOTE" -merged:"$MERGED" + check_unchanged + else + echo "TortoiseMerge cannot be used without a base" 1>&2 + return 1 + fi +} diff --git a/mergetools/vim b/mergetools/vim new file mode 100644 index 0000000000..619594ae4b --- /dev/null +++ b/mergetools/vim @@ -0,0 +1,44 @@ +diff_cmd () { + case "$1" in + gvimdiff|vimdiff) + "$merge_tool_path" -R -f -d \ + -c 'wincmd l' -c 'cd $GIT_PREFIX' "$LOCAL" "$REMOTE" + ;; + gvimdiff2|vimdiff2) + "$merge_tool_path" -R -f -d \ + -c 'wincmd l' -c 'cd $GIT_PREFIX' "$LOCAL" "$REMOTE" + ;; + esac +} + +merge_cmd () { + touch "$BACKUP" + case "$1" in + gvimdiff|vimdiff) + if $base_present + then + "$merge_tool_path" -f -d -c 'wincmd J' \ + "$MERGED" "$LOCAL" "$BASE" "$REMOTE" + else + "$merge_tool_path" -f -d -c 'wincmd l' \ + "$LOCAL" "$MERGED" "$REMOTE" + fi + ;; + gvimdiff2|vimdiff2) + "$merge_tool_path" -f -d -c 'wincmd l' \ + "$LOCAL" "$MERGED" "$REMOTE" + ;; + esac + check_unchanged +} + +translate_merge_tool_path() { + case "$1" in + gvimdiff|gvimdiff2) + echo gvim + ;; + vimdiff|vimdiff2) + echo vim + ;; + esac +} diff --git a/mergetools/xxdiff b/mergetools/xxdiff new file mode 100644 index 0000000000..05b443394b --- /dev/null +++ b/mergetools/xxdiff @@ -0,0 +1,25 @@ +diff_cmd () { + "$merge_tool_path" \ + -R 'Accel.Search: "Ctrl+F"' \ + -R 'Accel.SearchForward: "Ctrl-G"' \ + "$LOCAL" "$REMOTE" +} + +merge_cmd () { + touch "$BACKUP" + 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 + check_unchanged +} |