Rev 4321: (Jelmer) Add 'repository' hook to the info command. in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Fri May 1 16:38:00 BST 2009


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 4321
revision-id: pqm at pqm.ubuntu.com-20090501153755-qk0x5oeclb231390
parent: pqm at pqm.ubuntu.com-20090501085103-kq2uocvhxzjex06k
parent: jelmer at samba.org-20090501142906-7zj8hcpp9igzuyi4
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Fri 2009-05-01 16:37:55 +0100
message:
  (Jelmer) Add 'repository' hook to the info command.
modified:
  bzrlib/hooks.py                hooks.py-20070325015548-ix4np2q0kd8452au-1
  bzrlib/info.py                 info.py-20050323235939-6bbfe7d9700b0b9b
  bzrlib/tests/blackbox/test_info.py test_info.py-20060215045507-bbdd2d34efab9e0a
    ------------------------------------------------------------
    revno: 4307.3.3
    revision-id: jelmer at samba.org-20090501142906-7zj8hcpp9igzuyi4
    parent: jelmer at samba.org-20090429150140-4xgjet168wi97sg2
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: info-repository-extend
    timestamp: Fri 2009-05-01 16:29:06 +0200
    message:
      Add repository argument to 'repository' info hook, per Roberts review.
    modified:
      bzrlib/info.py                 info.py-20050323235939-6bbfe7d9700b0b9b
      bzrlib/tests/blackbox/test_info.py test_info.py-20060215045507-bbdd2d34efab9e0a
    ------------------------------------------------------------
    revno: 4307.3.2
    revision-id: jelmer at samba.org-20090429150140-4xgjet168wi97sg2
    parent: jelmer at samba.org-20090429145150-xmqfoqbocgnoum04
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: info-repository-extend
    timestamp: Wed 2009-04-29 17:01:40 +0200
    message:
      Add tests for the repository info hook.
    modified:
      bzrlib/hooks.py                hooks.py-20070325015548-ix4np2q0kd8452au-1
      bzrlib/tests/blackbox/test_info.py test_info.py-20060215045507-bbdd2d34efab9e0a
    ------------------------------------------------------------
    revno: 4307.3.1
    revision-id: jelmer at samba.org-20090429145150-xmqfoqbocgnoum04
    parent: pqm at pqm.ubuntu.com-20090428004234-6j7ndsmvsx3hsrqo
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: info-repository-extend
    timestamp: Wed 2009-04-29 16:51:50 +0200
    message:
      Allow registering hooks that extend the Repository section in 'bzr info -v'.
    modified:
      bzrlib/info.py                 info.py-20050323235939-6bbfe7d9700b0b9b
=== modified file 'bzrlib/hooks.py'
--- a/bzrlib/hooks.py	2009-04-07 10:41:30 +0000
+++ b/bzrlib/hooks.py	2009-04-29 15:01:40 +0000
@@ -41,6 +41,8 @@
     'BzrDirHooks')
 known_hooks.register_lazy(('bzrlib.commands', 'Command.hooks'),
     'bzrlib.commands', 'CommandHooks')
+known_hooks.register_lazy(('bzrlib.info', 'hooks'),
+    'bzrlib.info', 'InfoHooks')
 known_hooks.register_lazy(('bzrlib.lock', 'Lock.hooks'), 'bzrlib.lock',
     'LockHooks')
 known_hooks.register_lazy(('bzrlib.msgeditor', 'hooks'), 'bzrlib.msgeditor',

=== modified file 'bzrlib/info.py'
--- a/bzrlib/info.py	2009-03-23 14:59:43 +0000
+++ b/bzrlib/info.py	2009-05-01 14:29:06 +0000
@@ -16,6 +16,7 @@
 
 __all__ = ['show_bzrdir_info']
 
+from cStringIO import StringIO
 import os
 import time
 import sys
@@ -24,6 +25,7 @@
     bzrdir,
     diff,
     errors,
+    hooks as _mod_hooks,
     osutils,
     urlutils,
     )
@@ -299,16 +301,20 @@
             'the repository.\n')
 
 
-def _show_repository_stats(stats, outfile):
+def _show_repository_stats(repository, stats, outfile):
     """Show statistics about a repository."""
-    if 'revisions' in stats or 'size' in stats:
-        outfile.write('\n')
-        outfile.write('Repository:\n')
+    f = StringIO()
     if 'revisions' in stats:
         revisions = stats['revisions']
-        outfile.write('  %8d revision%s\n' % (revisions, plural(revisions)))
+        f.write('  %8d revision%s\n' % (revisions, plural(revisions)))
     if 'size' in stats:
-        outfile.write('  %8d KiB\n' % (stats['size']/1024))
+        f.write('  %8d KiB\n' % (stats['size']/1024))
+    for hook in hooks['repository']:
+        hook(repository, stats, f)
+    if f.getvalue() != "":
+        outfile.write('\n')
+        outfile.write('Repository:\n')
+        outfile.write(f.getvalue())
 
 
 def show_bzrdir_info(a_bzrdir, verbose=False, outfile=None):
@@ -382,7 +388,7 @@
         stats = repository.gather_stats()
     if branch is None and working is None:
         _show_repository_info(repository, outfile)
-    _show_repository_stats(stats, outfile)
+    _show_repository_stats(repository, stats, outfile)
 
 
 def describe_layout(repository=None, branch=None, tree=None):
@@ -472,3 +478,17 @@
         # do.
         candidates = new_candidates
     return ' or '.join(candidates)
+
+
+class InfoHooks(_mod_hooks.Hooks):
+    """Hooks for the info command."""
+
+    def __init__(self):
+        self.create_hook(_mod_hooks.HookPoint('repository',
+            "Invoked when displaying the statistics for a repository. "
+            "repository is called with a statistics dictionary as returned "
+            "by the repository and a file-like object to write to.", (1, 15), 
+            None))
+
+
+hooks = InfoHooks()

=== modified file 'bzrlib/tests/blackbox/test_info.py'
--- a/bzrlib/tests/blackbox/test_info.py	2009-03-23 14:59:43 +0000
+++ b/bzrlib/tests/blackbox/test_info.py	2009-05-01 14:29:06 +0000
@@ -1054,6 +1054,32 @@
        ), out)
         self.assertEqual('', err)
 
+    def test_info_repository_hook(self):
+        format = bzrdir.format_registry.make_bzrdir('knit')
+        def repo_info(repo, stats, outf):
+            outf.write("more info\n")
+        info.hooks.install_named_hook('repository', repo_info, None)
+        # Create shared repository with working trees
+        repo = self.make_repository('repo', shared=True, format=format)
+        out, err = self.run_bzr('info -v repo')
+        self.assertEqualDiff(
+"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
+Location:
+  shared repository: repo
+
+Format:
+       control: Meta directory format 1
+    repository: %s
+
+Create working tree for new branches inside the repository.
+
+Repository:
+         0 revisions
+more info
+""" % (format.repository_format.get_format_description(),
+       ), out)
+        self.assertEqual('', err)
+
     def assertCheckoutStatusOutput(self,
         command_string, lco_tree, shared_repo=None,
         repo_branch=None,




More information about the bazaar-commits mailing list