Rev 5801: Merge config-hooks into selftest-config-stats in file:///home/vila/src/bzr/experimental/config/
Vincent Ladeuil
v.ladeuil+lp at free.fr
Tue Jun 14 09:10:14 UTC 2011
At file:///home/vila/src/bzr/experimental/config/
------------------------------------------------------------
revno: 5801 [merge]
revision-id: v.ladeuil+lp at free.fr-20110614091014-dnogx7ukn00j3lcl
parent: v.ladeuil+lp at free.fr-20110613153907-xkkpjyc5ieohba0b
parent: v.ladeuil+lp at free.fr-20110614090336-mqx0p4bbhpmtwohl
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: selftest-config-stats
timestamp: Tue 2011-06-14 11:10:14 +0200
message:
Merge config-hooks into selftest-config-stats
modified:
bzrlib/hooks.py hooks.py-20070325015548-ix4np2q0kd8452au-1
bzrlib/remote.py remote.py-20060720103555-yeeg2x51vn0rbtdp-1
bzrlib/tests/test_config.py testconfig.py-20051011041908-742d0c15d8d8c8eb
-------------- next part --------------
=== modified file 'bzrlib/hooks.py'
--- a/bzrlib/hooks.py 2011-06-10 13:14:34 +0000
+++ b/bzrlib/hooks.py 2011-06-14 08:59:12 +0000
@@ -257,8 +257,7 @@
try:
uninstall = getattr(hook, "uninstall")
except AttributeError:
- raise errors.UnsupportedOperation(self.install_named_hook_lazy,
- self)
+ raise errors.UnsupportedOperation(self.uninstall_named_hook, self)
else:
uninstall(label)
=== modified file 'bzrlib/remote.py'
--- a/bzrlib/remote.py 2011-05-20 13:28:35 +0000
+++ b/bzrlib/remote.py 2011-06-14 08:59:12 +0000
@@ -3101,22 +3101,32 @@
"""
try:
configobj = self._get_configobj()
+ section_obj = None
if section is None:
section_obj = configobj
else:
try:
section_obj = configobj[section]
except KeyError:
- return default
- return section_obj.get(name, default)
+ pass
+ if section_obj is None:
+ value = default
+ else:
+ value = section_obj.get(name, default)
except errors.UnknownSmartMethod:
- return self._vfs_get_option(name, section, default)
+ value = self._vfs_get_option(name, section, default)
+ for hook in config.ConfigHooks['old_get']:
+ hook(self, name, value)
+ return value
def _response_to_configobj(self, response):
if len(response[0]) and response[0][0] != 'ok':
raise errors.UnexpectedSmartServerResponse(response)
lines = response[1].read_body_bytes().splitlines()
- return config.ConfigObj(lines, encoding='utf-8')
+ conf = config.ConfigObj(lines, encoding='utf-8')
+ for hook in config.ConfigHooks['old_load']:
+ hook(self)
+ return conf
class RemoteBranchConfig(RemoteConfig):
=== modified file 'bzrlib/tests/test_config.py'
--- a/bzrlib/tests/test_config.py 2011-06-13 15:38:54 +0000
+++ b/bzrlib/tests/test_config.py 2011-06-14 09:03:36 +0000
@@ -37,6 +37,7 @@
ui,
urlutils,
registry,
+ remote,
tests,
trace,
transport,
@@ -45,11 +46,11 @@
deprecated_in,
deprecated_method,
)
-from bzrlib.transport import remote
+from bzrlib.transport import remote as transport_remote
from bzrlib.tests import (
features,
- TestSkipped,
scenarios,
+ test_server,
)
from bzrlib.util.configobj import configobj
@@ -118,7 +119,8 @@
def build_remote_branch_store(test):
# There is only one permutation (but we won't be able to handle more with
# this design anyway)
- (transport_class, server_class) = remote.get_test_permutations()[0]
+ (transport_class,
+ server_class) = transport_remote.get_test_permutations()[0]
build_backing_branch(test, 'branch', transport_class, server_class)
b = branch.Branch.open(test.get_url('branch'))
return config.BranchStore(b)
@@ -142,7 +144,8 @@
def build_remote_branch_stack(test):
# There is only one permutation (but we won't be able to handle more with
# this design anyway)
- (transport_class, server_class) = remote.get_test_permutations()[0]
+ (transport_class,
+ server_class) = transport_remote.get_test_permutations()[0]
build_backing_branch(test, 'branch', transport_class, server_class)
b = branch.Branch.open(test.get_url('branch'))
return config.BranchStack(b)
@@ -2022,6 +2025,121 @@
self.assertSaveHook(self.branch_config)
+class TestOldConfigHooksForRemote(tests.TestCaseWithTransport):
+ """Tests config hooks for remote configs.
+
+ No tests for the remove hook as this is not implemented there.
+ """
+
+ def setUp(self):
+ super(TestOldConfigHooksForRemote, self).setUp()
+ self.transport_server = test_server.SmartTCPServer_for_testing
+ create_configs_with_file_option(self)
+
+ def assertGetHook(self, conf, name, value):
+ calls = []
+ def hook(*args):
+ calls.append(args)
+ config.ConfigHooks.install_named_hook('old_get', hook, None)
+ self.addCleanup(
+ config.ConfigHooks.uninstall_named_hook, 'old_get', None)
+ self.assertLength(0, calls)
+ actual_value = conf.get_option(name)
+ self.assertEquals(value, actual_value)
+ self.assertLength(1, calls)
+ self.assertEquals((conf, name, value), calls[0])
+
+ def test_get_hook_remote_branch(self):
+ remote_branch = branch.Branch.open(self.get_url('tree'))
+ self.assertGetHook(remote_branch._get_config(), 'file', 'branch')
+
+ def test_get_hook_remote_bzrdir(self):
+ remote_bzrdir = bzrdir.BzrDir.open(self.get_url('tree'))
+ conf = remote_bzrdir._get_config()
+ conf.set_option('remotedir', 'file')
+ self.assertGetHook(conf, 'file', 'remotedir')
+
+ def assertSetHook(self, conf, name, value):
+ calls = []
+ def hook(*args):
+ calls.append(args)
+ config.ConfigHooks.install_named_hook('old_set', hook, None)
+ self.addCleanup(
+ config.ConfigHooks.uninstall_named_hook, 'old_set', None)
+ self.assertLength(0, calls)
+ conf.set_option(value, name)
+ self.assertLength(1, calls)
+ # We can't assert the conf object below as different configs use
+ # different means to implement set_user_option and we care only about
+ # coverage here.
+ self.assertEquals((name, value), calls[0][1:])
+
+ def test_set_hook_remote_branch(self):
+ remote_branch = branch.Branch.open(self.get_url('tree'))
+ self.addCleanup(remote_branch.lock_write().unlock)
+ self.assertSetHook(remote_branch._get_config(), 'file', 'remote')
+
+ def test_set_hook_remote_bzrdir(self):
+ remote_branch = branch.Branch.open(self.get_url('tree'))
+ self.addCleanup(remote_branch.lock_write().unlock)
+ remote_bzrdir = bzrdir.BzrDir.open(self.get_url('tree'))
+ self.assertSetHook(remote_bzrdir._get_config(), 'file', 'remotedir')
+
+ def assertLoadHook(self, expected_nb_calls, name, conf_class, *conf_args):
+ calls = []
+ def hook(*args):
+ calls.append(args)
+ config.ConfigHooks.install_named_hook('old_load', hook, None)
+ self.addCleanup(
+ config.ConfigHooks.uninstall_named_hook, 'old_load', None)
+ self.assertLength(0, calls)
+ # Build a config
+ conf = conf_class(*conf_args)
+ # Access an option to trigger a load
+ conf.get_option(name)
+ self.assertLength(expected_nb_calls, calls)
+ # Since we can't assert about conf, we just use the number of calls ;-/
+
+ def test_load_hook_remote_branch(self):
+ remote_branch = branch.Branch.open(self.get_url('tree'))
+ self.assertLoadHook(1, 'file', remote.RemoteBranchConfig, remote_branch)
+
+ def test_load_hook_remote_bzrdir(self):
+ remote_bzrdir = bzrdir.BzrDir.open(self.get_url('tree'))
+ # The config file doesn't exist, set an option to force its creation
+ conf = remote_bzrdir._get_config()
+ conf.set_option('remotedir', 'file')
+ # We get one call for the server and one call for the client, this is
+ # caused by the differences in implementations betwen
+ # SmartServerBzrDirRequestConfigFile (in smart/bzrdir.py) and
+ # SmartServerBranchGetConfigFile (in smart/branch.py)
+ self.assertLoadHook(2 ,'file', remote.RemoteBzrDirConfig, remote_bzrdir)
+
+ def assertSaveHook(self, conf):
+ calls = []
+ def hook(*args):
+ calls.append(args)
+ config.ConfigHooks.install_named_hook('old_save', hook, None)
+ self.addCleanup(
+ config.ConfigHooks.uninstall_named_hook, 'old_save', None)
+ self.assertLength(0, calls)
+ # Setting an option triggers a save
+ conf.set_option('foo', 'bar')
+ self.assertLength(1, calls)
+ # Since we can't assert about conf, we just use the number of calls ;-/
+
+ def test_save_hook_remote_branch(self):
+ remote_branch = branch.Branch.open(self.get_url('tree'))
+ self.addCleanup(remote_branch.lock_write().unlock)
+ self.assertSaveHook(remote_branch._get_config())
+
+ def test_save_hook_remote_bzrdir(self):
+ remote_branch = branch.Branch.open(self.get_url('tree'))
+ self.addCleanup(remote_branch.lock_write().unlock)
+ remote_bzrdir = bzrdir.BzrDir.open(self.get_url('tree'))
+ self.assertSaveHook(remote_bzrdir._get_config())
+
+
class TestOption(tests.TestCase):
def test_default_value(self):
@@ -3401,7 +3519,8 @@
to be able to choose a user name with no configuration.
"""
if sys.platform == 'win32':
- raise TestSkipped("User name inference not implemented on win32")
+ raise tests.TestSkipped(
+ "User name inference not implemented on win32")
realname, address = config._auto_user_id()
if os.path.exists('/etc/mailname'):
self.assertIsNot(None, realname)
More information about the bazaar-commits
mailing list