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