dispatch: fix traceback when extension was tested with newer versions only stable
authorThomas Arendsen Hein <thomas@intevation.de>
Thu, 19 Jul 2012 21:20:56 +0200
branchstable
changeset 17228 d1b49b02bc16
parent 17227 7af38fe1f829
child 17229 a6d9b2d33040
child 17239 848a1c1e51cd
dispatch: fix traceback when extension was tested with newer versions only The "worst" extension still is the one tested with the lowest tested version below the current version of Mercurial, but if an extension with was only tested with newer versions, it is considered a candidate for a bad extension, too. In this case extensions which have been tested with higher versions of Mercurial are considered better. This allows finding the oldest extension if ct can't be calculated correctly and therefore defaults to an empty tuple, and it involves less changes to the comparison logic during the current code freeze.
mercurial/dispatch.py
tests/test-extension.t
--- a/mercurial/dispatch.py	Thu Jul 19 16:50:52 2012 +0200
+++ b/mercurial/dispatch.py	Thu Jul 19 21:20:56 2012 +0200
@@ -225,8 +225,9 @@
                 break
             if compare not in testedwith.split() and testedwith != 'internal':
                 tested = [tuplever(v) for v in testedwith.split()]
-                nearest = max([t for t in tested if t < ct])
-                if nearest < worst[1]:
+                lower = [t for t in tested if t < ct]
+                nearest = max(lower or tested)
+                if worst[0] is None or nearest < worst[1]:
                     worst = name, nearest, report
         if worst[0] is not None:
             name, testedwith, report = worst
--- a/tests/test-extension.t	Thu Jul 19 16:50:52 2012 +0200
+++ b/tests/test-extension.t	Thu Jul 19 21:20:56 2012 +0200
@@ -522,7 +522,31 @@
   ** Please disable older and try your action again.
   ** If that fixes the bug please report it to the extension author.
   ** Python * (glob)
-  ** Mercurial Distributed SCM (*) (glob)
+  ** Mercurial Distributed SCM (version 2.2)
+  ** Extensions loaded: throw, older
+One extension only tested with older, one only with newer versions:
+  $ echo "util.version = lambda:'2.1.0'" >> older.py
+  $ rm -f older.pyc older.pyo
+  $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
+  >   throw 2>&1 | egrep '^\*\*'
+  ** Unknown exception encountered with possibly-broken third-party extension older
+  ** which supports versions 1.9.3 of Mercurial.
+  ** Please disable older and try your action again.
+  ** If that fixes the bug please report it to the extension author.
+  ** Python * (glob)
+  ** Mercurial Distributed SCM (version 2.1.0)
+  ** Extensions loaded: throw, older
+Older extension is tested with current version, the other only with newer:
+  $ echo "util.version = lambda:'1.9.3'" >> older.py
+  $ rm -f older.pyc older.pyo
+  $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
+  >   throw 2>&1 | egrep '^\*\*'
+  ** Unknown exception encountered with possibly-broken third-party extension throw
+  ** which supports versions 2.1.1 of Mercurial.
+  ** Please disable throw and try your action again.
+  ** If that fixes the bug please report it to http://example.com/bts
+  ** Python * (glob)
+  ** Mercurial Distributed SCM (version 1.9.3)
   ** Extensions loaded: throw, older
 
 Declare the version as supporting this hg version, show regular bts link: