Thread (5 messages) flat view 5 messages, 4 authors, 2016-06-15

Re: A note on modern git plus ancient meld ("wrong number of arguments")

From: Jonathan Nieder <hidden>
Date: 2016-06-15 22:53:02
Subsystem: the rest · Maintainer: Linus Torvalds

David Aguilar wrote:
On Thu, Feb 9, 2012 at 11:17 AM, Jeff Epler [off-list ref] wrote:
quoted
At $DAYJOB, I recently encountered a problem after upgrading from (don't
laugh) git 1.7.1 to 1.7.8.3: one developer stated that meld failed to
run, instead displaying the error 'Wrong number of arguments (Got 5)'.

We determined that this user was running a very old version of meld
(1.1.1) from his home directory, as opposed to the also very old system
version of meld (1.1.5).
[...]
We originally used the --output test so that we wouldn't have to check
for a specific version.
My bad.  How about something like this patch (untested)?

-- >8 --
Subject: mergetools/meld: Use version number to detect '--output' support

In v1.7.7-rc0~3^2 (2011-08-19), git mergetool's "meld" support learned
to use the --output option when calling versions of meld (1.5.0 and
later) that support it.

Alas, it misdetects old versions (before 1.1.5, 2006-06-11) of meld as
supporting the option, so on systems with such meld, instead of
getting a nice merge helper, the operator gets a dialog box with the
text "Wrong number of arguments (Got 5)".  (Version 1.1.5 is when meld
switched to using optparse.  One consequence of that change was that
errors in usage are detected and signalled through the exit status
even when --help was passed.)

Just parse version numbers instead.  We can detect the version number
by running "meld --version" and postprocessing it.  As a
futureproofing measure, we are careful to handle all three --version
output formats encountered so far.  When confused, the mergetool falls
back to assuming the --output option is not usable.

 - [0.1, 0.8.5): "GNOME Meld 0.1".
 - [0.8.5, 0.9.4.1):
   "Meld 0.8.5
    Written by Stephen Kennedy [off-list ref]"
 - [0.9.4.1, 1.1.3): "GNOME Meld 0.9.4.1" again.
 - [1.1.3, 1.1.5): back to the two-line form.
 - [1.1.5, present): "$0 1.1.5".  ($0 is typically "meld".)

Reported-by: Jeff Epler <redacted>
Signed-off-by: Jonathan Nieder <redacted>
---
 mergetools/meld |   17 +++++++++++------
 1 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/mergetools/meld b/mergetools/meld
index eaa115cc..3de29629 100644
--- a/mergetools/meld
+++ b/mergetools/meld
@@ -23,10 +23,15 @@ check_meld_for_output_version () {
 	meld_path="$(git config mergetool.meld.path)"
 	meld_path="${meld_path:-meld}"
 
-	if "$meld_path" --output /dev/null --help >/dev/null 2>&1
-	then
-		meld_has_output_option=true
-	else
-		meld_has_output_option=false
-	fi
+	# "GNOME Meld 0.8.4" -> "0.8.4"
+	meld_version=$("$meld_path" --version 2>/dev/null)
+	meld_version=${meld_version#GNOME }
+	meld_version=${meld_version#* }
+
+	case $meld_version in
+	[2-9].* | [1-9][0-9]* | 1.[5-9]* | 1.[1-9][0-9]*)	# >= 1.5.0
+		meld_has_output_option=true ;;
+	*)
+		meld_has_output_option=false ;;
+	esac
 }
-- 
1.7.9
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help