Rev 3821: (Marius Kruger) Give a reasonable version string for plugins with in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Mon Nov 3 21:16:57 GMT 2008


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 3821
revision-id: pqm at pqm.ubuntu.com-20081103211653-vyode1g8p1lfsuzy
parent: pqm at pqm.ubuntu.com-20081103202328-0nzzr8qhwbo0fvqk
parent: amanic at gmail.com-20081016091648-mv0bz3x9ti4d2rw8
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Mon 2008-11-03 21:16:53 +0000
message:
  (Marius Kruger) Give a reasonable version string for plugins with
  	invalid version_info values.
modified:
  bzrlib/plugin.py               plugin.py-20050622060424-829b654519533d69
  bzrlib/tests/test_plugins.py   plugins.py-20050622075746-32002b55e5e943e9
  doc/en/user-guide/writing_a_plugin.txt writing_a_plugin.txt-20071114035000-q36a9h57ps06uvnl-7
    ------------------------------------------------------------
    revno: 3777.6.7
    revision-id: amanic at gmail.com-20081016091648-mv0bz3x9ti4d2rw8
    parent: amanic at gmail.com-20081016084130-0oe2fj0ishbsoyqo
    committer: Marius Kruger <amanic at gmail.com>
    branch nick: bzr.plugins
    timestamp: Thu 2008-10-16 11:16:48 +0200
    message:
      * Can now also handle non-iteratable and string plugin versions.
      * Add some more tests.
    modified:
      bzrlib/plugin.py               plugin.py-20050622060424-829b654519533d69
      bzrlib/tests/test_plugins.py   plugins.py-20050622075746-32002b55e5e943e9
    ------------------------------------------------------------
    revno: 3777.6.6
    revision-id: amanic at gmail.com-20081016084130-0oe2fj0ishbsoyqo
    parent: amanic at gmail.com-20081015230132-1jbf11eq8rfjak6t
    committer: Marius Kruger <amanic at gmail.com>
    branch nick: bzr.plugins
    timestamp: Thu 2008-10-16 10:41:30 +0200
    message:
      catch only ValueError, TypeError, IndexError as per feedback from John
    modified:
      bzrlib/plugin.py               plugin.py-20050622060424-829b654519533d69
    ------------------------------------------------------------
    revno: 3777.6.5
    revision-id: amanic at gmail.com-20081015230132-1jbf11eq8rfjak6t
    parent: amanic at gmail.com-20081015224911-k9j3gnufvihi4q9i
    committer: Marius Kruger <amanic at gmail.com>
    branch nick: bzr.plugins
    timestamp: Thu 2008-10-16 01:01:32 +0200
    message:
      add 2 more tests for plugin version numbers
    modified:
      bzrlib/tests/test_plugins.py   plugins.py-20050622075746-32002b55e5e943e9
    ------------------------------------------------------------
    revno: 3777.6.4
    revision-id: amanic at gmail.com-20081015224911-k9j3gnufvihi4q9i
    parent: amanic at gmail.com-20081015214810-x3rd3z5ow2oi8415
    committer: Marius Kruger <amanic at gmail.com>
    branch nick: bzr.plugins
    timestamp: Thu 2008-10-16 00:49:11 +0200
    message:
      fix tests
    modified:
      bzrlib/tests/test_plugins.py   plugins.py-20050622075746-32002b55e5e943e9
    ------------------------------------------------------------
    revno: 3777.6.3
    revision-id: amanic at gmail.com-20081015214810-x3rd3z5ow2oi8415
    parent: amanic at gmail.com-20081015193448-bx2ds2amudgufo2t
    committer: Marius Kruger <amanic at gmail.com>
    branch nick: bzr.plugins
    timestamp: Wed 2008-10-15 23:48:10 +0200
    message:
      Use bzrlib._format_version_tuple and map as per review from John.
    modified:
      bzrlib/plugin.py               plugin.py-20050622060424-829b654519533d69
    ------------------------------------------------------------
    revno: 3777.6.2
    revision-id: amanic at gmail.com-20081015193448-bx2ds2amudgufo2t
    parent: amanic at gmail.com-20081015192746-tc8f1se3bhekqr1q
    committer: Marius Kruger <amanic at gmail.com>
    branch nick: bzr.plugins
    timestamp: Wed 2008-10-15 21:34:48 +0200
    message:
      Give an indication of how to specify a plugin version number
      in the user guide.
    modified:
      doc/en/user-guide/writing_a_plugin.txt writing_a_plugin.txt-20071114035000-q36a9h57ps06uvnl-7
    ------------------------------------------------------------
    revno: 3777.6.1
    revision-id: amanic at gmail.com-20081015192746-tc8f1se3bhekqr1q
    parent: pqm at pqm.ubuntu.com-20081014031836-0pn8u98igc7gvtv0
    committer: Marius Kruger <amanic at gmail.com>
    branch nick: bzr.plugins
    timestamp: Wed 2008-10-15 21:27:46 +0200
    message:
      Try to return something usefull for plugins with bad version numbers, 
      in stead of stack tracing.
    modified:
      bzrlib/plugin.py               plugin.py-20050622060424-829b654519533d69
=== modified file 'bzrlib/plugin.py'
--- a/bzrlib/plugin.py	2008-10-30 00:43:55 +0000
+++ b/bzrlib/plugin.py	2008-11-03 21:16:53 +0000
@@ -44,6 +44,7 @@
 import zipfile
 
 from bzrlib import (
+    _format_version_tuple,
     config,
     debug,
     errors,
@@ -455,18 +456,29 @@
     def version_info(self):
         """Return the plugin's version_tuple or None if unknown."""
         version_info = getattr(self.module, 'version_info', None)
-        if version_info is not None and len(version_info) == 3:
-            version_info = tuple(version_info) + ('final', 0)
+        if version_info is not None:
+            try:
+                if isinstance(version_info, types.StringType):
+                    version_info = version_info.split('.')
+                elif len(version_info) == 3:
+                    version_info = tuple(version_info) + ('final', 0)
+            except TypeError, e:
+                # The given version_info isn't even iteratible
+                trace.log_exception_quietly()
+                version_info = (version_info,)
         return version_info
 
     def _get__version__(self):
         version_info = self.version_info()
-        if version_info is None:
+        if version_info is None or len(version_info) == 0:
             return "unknown"
-        if version_info[3] == 'final':
-            version_string = '%d.%d.%d' % version_info[:3]
-        else:
-            version_string = '%d.%d.%d%s%d' % version_info
+        try:
+            version_string = _format_version_tuple(version_info)
+        except (ValueError, TypeError, IndexError), e:
+            trace.log_exception_quietly()
+            # try to return something usefull for bad plugins, in stead of
+            # stack tracing.
+            version_string = '.'.join(map(str, version_info))
         return version_string
 
     __version__ = property(_get__version__)

=== modified file 'bzrlib/tests/test_plugins.py'
--- a/bzrlib/tests/test_plugins.py	2008-10-21 14:08:31 +0000
+++ b/bzrlib/tests/test_plugins.py	2008-11-03 21:16:53 +0000
@@ -353,13 +353,48 @@
         plugin = bzrlib.plugin.plugins()['plugin']
         self.assertEqual("unknown", plugin.__version__)
 
-    def test___version__with_version_info(self):
+    def test_str__version__with_version_info(self):
+        self.setup_plugin("version_info = '1.2.3'")
+        plugin = bzrlib.plugin.plugins()['plugin']
+        self.assertEqual("1.2.3", plugin.__version__)
+
+    def test_noniterable__version__with_version_info(self):
+        self.setup_plugin("version_info = (1)")
+        plugin = bzrlib.plugin.plugins()['plugin']
+        self.assertEqual("1", plugin.__version__)
+
+    def test_1__version__with_version_info(self):
+        self.setup_plugin("version_info = (1,)")
+        plugin = bzrlib.plugin.plugins()['plugin']
+        self.assertEqual("1", plugin.__version__)
+
+    def test_1_2__version__with_version_info(self):
+        self.setup_plugin("version_info = (1, 2)")
+        plugin = bzrlib.plugin.plugins()['plugin']
+        self.assertEqual("1.2", plugin.__version__)
+
+    def test_1_2_3__version__with_version_info(self):
+        self.setup_plugin("version_info = (1, 2, 3)")
+        plugin = bzrlib.plugin.plugins()['plugin']
+        self.assertEqual("1.2.3", plugin.__version__)
+
+    def test_candidate__version__with_version_info(self):
+        self.setup_plugin("version_info = (1, 2, 3, 'candidate', 1)")
+        plugin = bzrlib.plugin.plugins()['plugin']
+        self.assertEqual("1.2.3rc1", plugin.__version__)
+
+    def test_dev__version__with_version_info(self):
+        self.setup_plugin("version_info = (1, 2, 3, 'dev', 0)")
+        plugin = bzrlib.plugin.plugins()['plugin']
+        self.assertEqual("1.2.3dev", plugin.__version__)
+
+    def test_dev_fallback__version__with_version_info(self):
         self.setup_plugin("version_info = (1, 2, 3, 'dev', 4)")
         plugin = bzrlib.plugin.plugins()['plugin']
-        self.assertEqual("1.2.3dev4", plugin.__version__)
+        self.assertEqual("1.2.3.dev.4", plugin.__version__)
 
     def test_final__version__with_version_info(self):
-        self.setup_plugin("version_info = (1, 2, 3, 'final', 4)")
+        self.setup_plugin("version_info = (1, 2, 3, 'final', 0)")
         plugin = bzrlib.plugin.plugins()['plugin']
         self.assertEqual("1.2.3", plugin.__version__)
 

=== modified file 'doc/en/user-guide/writing_a_plugin.txt'
--- a/doc/en/user-guide/writing_a_plugin.txt	2007-11-14 03:50:56 +0000
+++ b/doc/en/user-guide/writing_a_plugin.txt	2008-10-15 19:34:48 +0000
@@ -22,6 +22,13 @@
 ``bzrlib.commands.register_command(cmd_foo)``.  You must register the
 command when your file is imported, otherwise bzr will not see it.
 
+Specifying a plugin version number
+----------------------------------
+Simply define ``version_info`` to be a tuple defining the current version
+number of your plugin. eg.
+``version_info = (0, 9, 0)``
+``version_info = (0, 9, 0, 'dev', 0)``
+
 Plugin searching rules
 ----------------------
 




More information about the bazaar-commits mailing list