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