git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 03/10] Add a mergetool-lib scriptlet for holding common merge tool functions

From
David Aguilar <davvid@gmail.com>
Date
Apr 1, 2009, 12:55 UTC
Message-ID
<1238590514-41893-4-git-send-email-davvid@gmail.com>
In-Reply-To
<1238590514-41893-3-git-send-email-davvid@gmail.com>
git-mergetool-lib provides common merge tool functions.
Signed-off-by: David Aguilar <davvid@gmail.com>
---
 .gitignore                          |    1 +
 Documentation/git-mergetool-lib.txt |   42 +++++++++++++++++++++++++++++++++++
 Makefile                            |    1 +
 command-list.txt                    |    1 +
 git-mergetool-lib.sh                |   41 ++++++++++++++++++++++++++++++++++
 5 files changed, 86 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/git-mergetool-lib.txt
 create mode 100644 git-mergetool-lib.sh
diff --git a/.gitignore b/.gitignore
index 966c886..75c154a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -80,6 +80,7 @@ git-merge-recursive
 git-merge-resolve
 git-merge-subtree
 git-mergetool
+git-mergetool-lib
 git-mktag
 git-mktree
 git-name-rev
diff --git a/Documentation/git-mergetool-lib.txt b/Documentation/git-mergetool-lib.txt
new file mode 100644
index 0000000..a8d62f5
--- /dev/null
+++ b/Documentation/git-mergetool-lib.txt
@@ -0,0 +1,42 @@
+git-mergetool-lib(1)
+====================
+
+NAME
+----
+git-mergetool-lib - Common git merge tool shell scriptlets
+
+SYNOPSIS
+--------
+'. "$(git --exec-path)/git-mergetool-lib"'
+
+DESCRIPTION
+-----------
+
+This is not a command the end user would want to run.  Ever.
+This documentation is meant for people who are studying the
+Porcelain-ish scripts and/or are writing new ones.
+
+The 'git-mergetool-lib' scriptlet is designed to be sourced (using
+`.`) by other shell scripts to set up functions for working
+with git merge tools.
+
+Before sourcing it, your script should set up a few variables;
+`TOOL_MODE` is used to define the operation mode for various
+functions.  'diff' and 'merge' are valid values.
+
+FUNCTIONS
+---------
+get_merge_tool_path::
+	returns the `merge_tool_path` for a `merge_tool`.
+
+Author
+------
+Written by David Aguilar <davvid@gmail.com>
+
+Documentation
+--------------
+Documentation by David Aguilar and the git-list <git@vger.kernel.org>.
+
+GIT
+---
+Part of the linkgit:git[1] suite
diff --git a/Makefile b/Makefile
index d77fd71..086f9e7 100644
--- a/Makefile
+++ b/Makefile
@@ -284,6 +284,7 @@ SCRIPT_SH += git-merge-octopus.sh
 SCRIPT_SH += git-merge-one-file.sh
 SCRIPT_SH += git-merge-resolve.sh
 SCRIPT_SH += git-mergetool.sh
+SCRIPT_SH += git-mergetool-lib.sh
 SCRIPT_SH += git-parse-remote.sh
 SCRIPT_SH += git-pull.sh
 SCRIPT_SH += git-quiltimport.sh
diff --git a/command-list.txt b/command-list.txt
index fb03a2e..922c815 100644
--- a/command-list.txt
+++ b/command-list.txt
@@ -69,6 +69,7 @@ git-merge-file                          plumbingmanipulators
 git-merge-index                         plumbingmanipulators
 git-merge-one-file                      purehelpers
 git-mergetool                           ancillarymanipulators
+git-mergetool-lib                       purehelpers
 git-merge-tree                          ancillaryinterrogators
 git-mktag                               plumbingmanipulators
 git-mktree                              plumbingmanipulators
diff --git a/git-mergetool-lib.sh b/git-mergetool-lib.sh
new file mode 100644
index 0000000..c307a5d
--- /dev/null
+++ b/git-mergetool-lib.sh
@@ -0,0 +1,41 @@
+# git-mergetool-lib is a library for common merge tool functions
+diff_mode() {
+	test $TOOL_MODE = "diff"
+}
+
+get_merge_tool_path () {
+	if test -z "$2"; then
+		case "$1" in
+		emerge)
+			path=emacs
+			;;
+		*)
+			path="$1"
+			;;
+		esac
+	fi
+	echo "$path"
+}
+
+valid_tool () {
+	case "$1" in
+	kdiff3 | kompare | tkdiff | xxdiff | meld | opendiff | emerge | vimdiff | gvimdiff | ecmerge)
+		if test "$1" = "kompare" && ! diff_mode; then
+			return 1
+		fi
+		;; # happy
+	*)
+		if ! test -n "$(get_custom_cmd "$1")"; then
+			return 1
+		fi ;;
+	esac
+}
+
+get_custom_cmd () {
+	diff_mode &&
+	custom_cmd="$(git config difftool.$1.cmd)"
+	test -z "$custom_cmd" &&
+	custom_cmd="$(git config mergetool.$1.cmd)"
+	test -n "$custom_cmd" &&
+	echo "$custom_cmd"
+}
-- 
1.6.1.3
Previous: David AguilarNext: David Aguilar
Message 4 of 26 in “git-{diff,merge} refactor round 2”
  1. David AguilarApr 1, 2009
  2. 01/10 difftool: add support for a difftool.prompt config variableDavid Aguilar, Apr 1, 2009
  3. 02/10 mergetool: use $( ... ) instead of `backticks`David Aguilar, Apr 1, 2009
  4. 03/10 Add a mergetool-lib scriptlet for holding common merge tool functionsDavid Aguilar, Apr 1, 2009
  5. 04/10 mergetool: use get_mergetool_path from git-mergetool-libDavid Aguilar, Apr 1, 2009
  6. 05/10 difftool: use get_mergetool_path from git-mergetool-libDavid Aguilar, Apr 1, 2009
  7. 06/10 mergetool: use valid_tool from git-mergetool-libDavid Aguilar, Apr 1, 2009
  8. 07/10 difftool: use valid_tool from git-mergetool-libDavid Aguilar, Apr 1, 2009
  9. 08/10 mergetool-lib: introduce run_mergetoolDavid Aguilar, Apr 1, 2009
  10. 09/10 difftool: use run_mergetool from git-mergetool-libDavid Aguilar, Apr 1, 2009
  11. 10/10 mergetool: use run_mergetool from git-mergetool-libDavid Aguilar, Apr 1, 2009
  12. Markus HeidelbergApr 1, 2009
  13. Charles BaileyApr 2, 2009
  14. Markus HeidelbergApr 2, 2009
  15. Markus HeidelbergApr 2, 2009
  16. David AguilarApr 3, 2009
  17. Markus HeidelbergApr 1, 2009
  18. Markus HeidelbergApr 1, 2009
  19. David AguilarApr 2, 2009
  20. Charles BaileyApr 2, 2009
  21. Markus HeidelbergApr 5, 2009
  22. David AguilarApr 5, 2009
  23. Junio C HamanoApr 5, 2009
  24. David AguilarApr 5, 2009
  25. Markus HeidelbergApr 5, 2009
  26. Junio C HamanoApr 6, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.