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