Rev 6444: (jelmer) Add pre_transform and post_transform hooks. (Jelmer Vernooij) in file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/2.5/
Patch Queue Manager
pqm at pqm.ubuntu.com
Wed Jan 18 11:10:41 UTC 2012
At file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/2.5/
------------------------------------------------------------
revno: 6444 [merge]
revision-id: pqm at pqm.ubuntu.com-20120118111041-ycipd0shpm4kbtsl
parent: pqm at pqm.ubuntu.com-20120117175033-zclyebk4kzynly6v
parent: jelmer at vernstok.nl-20120118104207-yc5fhsaz4mupjcam
committer: Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: 2.5
timestamp: Wed 2012-01-18 11:10:41 +0000
message:
(jelmer) Add pre_transform and post_transform hooks. (Jelmer Vernooij)
modified:
bzrlib/mutabletree.py mutabletree.py-20060906023413-4wlkalbdpsxi2r4y-2
bzrlib/tests/test_transform.py test_transaction.py-20060105172520-b3ffb3946550e6c4
bzrlib/transform.py transform.py-20060105172343-dd99e54394d91687
doc/en/release-notes/bzr-2.5.txt bzr2.5.txt-20110708125756-587p0hpw7oke4h05-1
=== modified file 'bzrlib/mutabletree.py'
--- a/bzrlib/mutabletree.py 2012-01-06 14:09:04 +0000
+++ b/bzrlib/mutabletree.py 2012-01-18 10:42:07 +0000
@@ -520,10 +520,18 @@
"called with a bzrlib.mutabletree.PostCommitHookParams object. "
"The mutable tree the commit was performed on is available via "
"the mutable_tree attribute of that object.", (2, 0))
+ self.add_hook('pre_transform',
+ "Called before a tree transform on this tree. The hook is called "
+ "with the tree that is being transformed and the transform.",
+ (2, 5))
self.add_hook('post_build_tree',
"Called after a completely new tree is built. The hook is "
"called with the tree as its only argument.", (2, 5))
-
+ self.add_hook('post_transform',
+ "Called after a tree transform has been performed on a tree. "
+ "The hook is called with the tree that is being transformed and "
+ "the transform.",
+ (2, 5))
# install the default hooks into the MutableTree class.
MutableTree.hooks = MutableTreeHooks()
=== modified file 'bzrlib/tests/test_transform.py'
--- a/bzrlib/tests/test_transform.py 2011-11-17 13:45:49 +0000
+++ b/bzrlib/tests/test_transform.py 2012-01-06 01:58:27 +0000
@@ -60,6 +60,7 @@
pathjoin,
)
from bzrlib.merge import Merge3Merger, Merger
+from bzrlib.mutabletree import MutableTree
from bzrlib.tests import (
features,
TestCaseInTempDir,
@@ -3717,3 +3718,40 @@
remaining_conflicts.pop())
self.assertLength(1, warnings)
self.assertStartsWith(warnings[0], 'donttouchmypreciouuus')
+
+
+class TestTransformHooks(tests.TestCaseWithTransport):
+
+ def setUp(self):
+ super(TestTransformHooks, self).setUp()
+ self.wt = self.make_branch_and_tree('.')
+ os.chdir('..')
+
+ def get_transform(self):
+ transform = TreeTransform(self.wt)
+ self.addCleanup(transform.finalize)
+ return transform, transform.root
+
+ def test_pre_commit_hooks(self):
+ calls = []
+ def record_pre_transform(tree, tt):
+ calls.append((tree, tt))
+ MutableTree.hooks.install_named_hook('pre_transform',
+ record_pre_transform, "Pre transform")
+ transform, root = self.get_transform()
+ old_root_id = transform.tree_file_id(root)
+ transform.apply()
+ self.assertEqual(old_root_id, self.wt.get_root_id())
+ self.assertEquals([(self.wt, transform)], calls)
+
+ def test_post_commit_hooks(self):
+ calls = []
+ def record_post_transform(tree, tt):
+ calls.append((tree, tt))
+ MutableTree.hooks.install_named_hook('post_transform',
+ record_post_transform, "Post transform")
+ transform, root = self.get_transform()
+ old_root_id = transform.tree_file_id(root)
+ transform.apply()
+ self.assertEqual(old_root_id, self.wt.get_root_id())
+ self.assertEquals([(self.wt, transform)], calls)
=== modified file 'bzrlib/transform.py'
--- a/bzrlib/transform.py 2012-01-17 14:45:27 +0000
+++ b/bzrlib/transform.py 2012-01-18 10:42:07 +0000
@@ -50,6 +50,7 @@
ExistingLimbo, ImmortalLimbo, NoFinalPath,
UnableCreateSymlink)
from bzrlib.filters import filtered_output_bytes, ContentFilterContext
+from bzrlib.mutabletree import MutableTree
from bzrlib.osutils import (
delete_any,
file_kind,
@@ -57,7 +58,6 @@
pathjoin,
sha_file,
splitpath,
- supports_executable,
)
from bzrlib.progress import ProgressPhase
from bzrlib.symbol_versioning import (
@@ -156,6 +156,8 @@
"""
if self._tree is None:
return
+ for hook in MutableTree.hooks['post_transform']:
+ hook(self._tree, self)
self._tree.unlock()
self._tree = None
@@ -1722,6 +1724,8 @@
calculating one.
:param _mover: Supply an alternate FileMover, for testing
"""
+ for hook in MutableTree.hooks['pre_transform']:
+ hook(self._tree, self)
if not no_conflicts:
self._check_malformed()
child_pb = ui.ui_factory.nested_progress_bar()
=== modified file 'doc/en/release-notes/bzr-2.5.txt'
--- a/doc/en/release-notes/bzr-2.5.txt 2012-01-17 16:02:03 +0000
+++ b/doc/en/release-notes/bzr-2.5.txt 2012-01-18 10:42:07 +0000
@@ -52,6 +52,10 @@
.. Major internal changes, unlikely to be visible to users or plugin
developers, but interesting for bzr developers.
+* ``MutableTree`` has two new hooks ``pre_transform`` and
+ ``post_transform`` that are called for tree transform operations.
+ (Jelmer Vernooij, #912084)
+
Testing
*******
More information about the bazaar-commits
mailing list