Rev 3648: Make log revision filtering pluggable. in http://people.ubuntu.com/~robertc/baz2.0/log
Robert Collins
robertc at robertcollins.net
Thu Aug 21 05:27:43 BST 2008
At http://people.ubuntu.com/~robertc/baz2.0/log
------------------------------------------------------------
revno: 3648
revision-id: robertc at robertcollins.net-20080821042736-742hdcpes9e8p5b5
parent: robertc at robertcollins.net-20080821041202-typ3c7u8e67xlgst
committer: Robert Collins <robertc at robertcollins.net>
branch nick: log
timestamp: Thu 2008-08-21 14:27:36 +1000
message:
Make log revision filtering pluggable.
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/log.py log.py-20050505065812-c40ce11702fe5fb1
=== modified file 'NEWS'
--- a/NEWS 2008-08-20 16:14:09 +0000
+++ b/NEWS 2008-08-21 04:27:36 +0000
@@ -60,6 +60,10 @@
INTERNALS:
+ * A new plugin interface, ``bzrlib.log.log_adapters``, has been added.
+ This allows dynamic log output filtering by plugins.
+ (Robert Collins)
+
* ``bzrlib.diff.DiffTree.show_diff`` now skips changes where the kind
is unknown in both source and target.
(Robert Collins, Aaron Bentley)
=== modified file 'bzrlib/log.py'
--- a/bzrlib/log.py 2008-08-21 04:12:02 +0000
+++ b/bzrlib/log.py 2008-08-21 04:27:36 +0000
@@ -308,18 +308,9 @@
for view in view_revisions:
yield (view, None, None)
log_rev_iterator = iter([_convert()])
- # core log logic
- log_rev_iterator = make_batch_filter(branch, generate_delta, search,
- log_rev_iterator)
- # read revision objects
- log_rev_iterator = make_revision_objects(branch, generate_delta, search,
- log_rev_iterator)
- # filter on log messages
- log_rev_iterator = make_search_filter(branch, generate_delta, search,
- log_rev_iterator)
- # generate deltas for things we will show
- log_rev_iterator = make_delta_filter(branch, generate_delta, search,
- log_rev_iterator)
+ for adapter in log_adapters:
+ log_rev_iterator = adapter(branch, generate_delta, search,
+ log_rev_iterator)
return log_rev_iterator
@@ -996,3 +987,20 @@
properties_handler_registry = registry.Registry()
+
+# adapters which revision ids to log are filtered. When log is called, the
+# log_rev_iterator is adapted through each of these factory methods.
+# Plugins are welcome to mutate this list in any way they like - as long
+# as the overall behaviour is preserved. At this point there is no extensible
+# mechanism for getting parameters to each factory method, and until there is
+# this won't be considered a stable api.
+log_adapters = [
+ # core log logic
+ make_batch_filter,
+ # read revision objects
+ make_revision_objects,
+ # filter on log messages
+ make_search_filter,
+ # generate deltas for things we will show
+ make_delta_filter
+ ]
More information about the bazaar-commits
mailing list