Rev 3: Add extract_info_local for extracting data from a locally present tree. in http://people.ubuntu.com/~robertc/baz2.0/plugins/plugin_info/trunk
Robert Collins
robertc at robertcollins.net
Fri Feb 29 16:07:13 GMT 2008
At http://people.ubuntu.com/~robertc/baz2.0/plugins/plugin_info/trunk
------------------------------------------------------------
revno: 3
revision-id:robertc at robertcollins.net-20080229160713-lne6c7462w7m3how
parent: robertc at robertcollins.net-20080229121009-b0o16yv1pm22nhpz
committer: Robert Collins <robertc at robertcollins.net>
branch nick: trunk
timestamp: Sat 2008-03-01 03:07:13 +1100
message:
Add extract_info_local for extracting data from a locally present tree.
modified:
NEWS news-20080229113630-0dhvipp22wlcjolw-2
extract.py extract.py-20080229115650-cgv523um54o9zvew-1
tests/test_extract.py test_extract.py-20080229115650-cgv523um54o9zvew-2
=== modified file 'NEWS'
--- a/NEWS 2008-02-29 12:10:09 +0000
+++ b/NEWS 2008-02-29 16:07:13 +0000
@@ -25,3 +25,6 @@
* New class ``extract.PluginInfo`` for reporting extraction results.
(Robert Collins)
+
+ * New method ``extract.extract_info_local`` to extract data from an
+ unpacked plugin on disk.
=== modified file 'extract.py'
--- a/extract.py 2008-02-29 12:10:09 +0000
+++ b/extract.py 2008-02-29 16:07:13 +0000
@@ -17,7 +17,35 @@
"""Extraction of plugin data from a plugin."""
-__all__ = ['PluginInfo']
+__all__ = ['extract_info_local', 'PluginInfo']
+
+
+def extract_info_local(path):
+ """Extract plugin info from a plugin directory on disk.
+
+ :param path: The path the plugin can be found at.
+ :return: A PluginInfo for the plugin at path.
+ """
+ source_file = open(path + '/setup.py', 'rb')
+ try:
+ source = source_file.read()
+ finally:
+ source_file.close()
+ code = compile(source, 'setup.py', 'exec')
+ eval_globals = {}
+ module = eval(code, eval_globals)
+ result = PluginInfo()
+ result.name = eval_globals.get('bzr_plugin_name', None)
+ result.commands = eval_globals.get('bzr_commands', [])
+ result.version_info = eval_globals.get('bzr_plugin_version', None)
+ result.minimum_bzr_version = eval_globals.get('bzr_minimum_version', None)
+ result.maximum_bzr_version = eval_globals.get('bzr_maximum_version', None)
+ result.control_formats = eval_globals.get('bzr_control_formats', {})
+ result.checkout_formats = eval_globals.get('bzr_checkout_formats', {})
+ result.branch_formats = eval_globals.get('bzr_branch_formats', {})
+ result.repository_formats = eval_globals.get('bzr_repository_formats', {})
+ return result
+
class PluginInfo(object):
"""Information about a plugin."""
@@ -33,3 +61,6 @@
self.checkout_formats = {}
self.branch_formats = {}
self.repository_formats = {}
+
+ def __eq__(self, other):
+ return self.__dict__ == other.__dict__
=== modified file 'tests/test_extract.py'
--- a/tests/test_extract.py 2008-02-29 12:10:09 +0000
+++ b/tests/test_extract.py 2008-02-29 16:07:13 +0000
@@ -17,6 +17,8 @@
"""Tests for extracting data from a plugin."""
+from copy import copy
+
from bzrlib.plugins.plugin_info.extract import *
from bzrlib.tests import TestCaseWithTransport
@@ -37,3 +39,93 @@
self.assertEqual({}, plugin.checkout_formats)
self.assertEqual({}, plugin.branch_formats)
self.assertEqual({}, plugin.repository_formats)
+
+ def test___eq__(self):
+ plugin_expected = PluginInfo()
+ plugin_expected.name = "1"
+ plugin_expected.commands = "2"
+ plugin_expected.version_info = "3"
+ plugin_expected.minimum_bzr_version = "4"
+ plugin_expected.maximum_bzr_version = "5"
+ plugin_expected.control_formats = "6"
+ plugin_expected.checkout_formats = "7"
+ plugin_expected.branch_formats = "8"
+ plugin_expected.repository_formats = "9"
+ plugin = copy(plugin_expected)
+ self.assertEqual(plugin_expected, plugin)
+ plugin.name = None
+ self.assertNotEqual(plugin_expected, plugin)
+
+ plugin = copy(plugin_expected)
+ plugin.commands = None
+ self.assertNotEqual(plugin_expected, plugin)
+
+ plugin = copy(plugin_expected)
+ plugin.version_info = None
+ self.assertNotEqual(plugin_expected, plugin)
+
+ plugin = copy(plugin_expected)
+ plugin.minimum_bzr_version = None
+ self.assertNotEqual(plugin_expected, plugin)
+
+ plugin = copy(plugin_expected)
+ plugin.maximum_bzr_version = None
+ self.assertNotEqual(plugin_expected, plugin)
+
+ plugin = copy(plugin_expected)
+ plugin.control_formats = None
+ self.assertNotEqual(plugin_expected, plugin)
+
+ plugin = copy(plugin_expected)
+ plugin.checkout_formats = None
+ self.assertNotEqual(plugin_expected, plugin)
+
+ plugin = copy(plugin_expected)
+ plugin.branch_formats = None
+ self.assertNotEqual(plugin_expected, plugin)
+
+ plugin = copy(plugin_expected)
+ plugin.repository_formats = None
+ self.assertNotEqual(plugin_expected, plugin)
+
+
+class TestExtraction(TestCaseWithTransport):
+
+ def test_extract_no_variables(self):
+ self.build_tree(['foo-bar/'])
+ self.build_tree_contents([('foo-bar/setup.py', '')])
+ plugin = extract_info_local('foo-bar')
+ self.assertEqual(PluginInfo(), plugin)
+
+ def test_extract_all_variables(self):
+ self.build_tree(['foo-bar/'])
+ self.build_tree_contents([('foo-bar/setup.py',
+"""
+bzr_plugin_name = "foo_bar"
+bzr_commands = ["a-command"]
+bzr_plugin_version = (1, 2, 3, 'dev', 0)
+bzr_minimum_version = (1, 2, 0)
+bzr_maximum_version = (1, 3, 0)
+bzr_control_formats = {"bzr-meta":{".bzr/branch-format":"Bazaar-NG meta directory, format 1\\n"}}
+bzr_checkout_formats = {"Bazaar Working Tree Format 4 (bzr 0.15)\\n":"dirstate"}
+bzr_branch_formats = {"Bazaar Branch Format 6 (bzr 0.15)\\n":"branch 6"}
+bzr_repository_formats = {"Bazaar pack repository format 1 (needs bzr 0.92)\\n":"packs"}
+""")])
+ plugin = extract_info_local('foo-bar')
+ expected_plugin = PluginInfo()
+ expected_plugin.name = "foo_bar"
+ expected_plugin.commands = ["a-command"]
+ expected_plugin.version_info = (1, 2, 3, 'dev', 0)
+ expected_plugin.minimum_bzr_version = (1, 2, 0)
+ expected_plugin.maximum_bzr_version = (1, 3, 0)
+ expected_plugin.control_formats = {
+ "bzr-meta":{
+ ".bzr/branch-format":"Bazaar-NG meta directory, format 1\n"}}
+ expected_plugin.checkout_formats = {
+ "Bazaar Working Tree Format 4 (bzr 0.15)\n":"dirstate"}
+ expected_plugin.branch_formats = {
+ "Bazaar Branch Format 6 (bzr 0.15)\n":"branch 6"}
+ expected_plugin.repository_formats = {
+ "Bazaar pack repository format 1 (needs bzr 0.92)\n":"packs"}
+ self.assertEqual(expected_plugin, plugin)
+
More information about the bazaar-commits
mailing list