bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 2370.4.1
by Robert Collins New SmartServer hooks facility. There are two initial hooks documented | 1 | # Copyright (C) 2007 Canonical Ltd
 | 
| 2 | #
 | |
| 3 | # This program is free software; you can redistribute it and/or modify
 | |
| 4 | # it under the terms of the GNU General Public License as published by
 | |
| 5 | # the Free Software Foundation; either version 2 of the License, or
 | |
| 6 | # (at your option) any later version.
 | |
| 7 | #
 | |
| 8 | # This program is distributed in the hope that it will be useful,
 | |
| 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| 11 | # GNU General Public License for more details.
 | |
| 12 | #
 | |
| 13 | # You should have received a copy of the GNU General Public License
 | |
| 14 | # along with this program; if not, write to the Free Software
 | |
| 15 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | |
| 16 | ||
| 17 | ||
| 18 | """Support for plugin hooking logic."""
 | |
| 19 | from bzrlib.lazy_import import lazy_import | |
| 20 | lazy_import(globals(), """ | |
| 21 | from bzrlib import (
 | |
| 22 |         errors,
 | |
| 23 |         )
 | |
| 24 | """) | |
| 25 | ||
| 26 | ||
| 27 | class Hooks(dict): | |
| 28 | """A dictionary mapping hook name to a list of callables. | |
| 29 |     
 | |
| 30 |     e.g. ['FOO'] Is the list of items to be called when the
 | |
| 31 |     FOO hook is triggered.
 | |
| 32 |     """
 | |
| 33 | ||
| 2553.1.1
by Robert Collins Give Hooks names. | 34 | def __init__(self): | 
| 35 | dict.__init__(self) | |
| 36 | self._callable_names = {} | |
| 37 | ||
| 38 | def get_hook_name(self, a_callable): | |
| 39 | """Get the name for a_callable for UI display. | |
| 40 | ||
| 41 |         If no name has been registered, the string 'No hook name' is returned.
 | |
| 2553.1.3
by Robert Collins Increase docs in response to review feedback. | 42 |         We use a fixed string rather than repr or the callables module because
 | 
| 43 |         the code names are rarely meaningful for end users and this is not 
 | |
| 44 |         intended for debugging.
 | |
| 2553.1.1
by Robert Collins Give Hooks names. | 45 |         """
 | 
| 46 | return self._callable_names.get(a_callable, "No hook name") | |
| 47 | ||
| 2370.4.1
by Robert Collins New SmartServer hooks facility. There are two initial hooks documented | 48 | def install_hook(self, hook_name, a_callable): | 
| 49 | """Install a_callable in to the hook hook_name. | |
| 50 | ||
| 51 |         :param hook_name: A hook name. See the __init__ method of BranchHooks
 | |
| 52 |             for the complete list of hooks.
 | |
| 53 |         :param a_callable: The callable to be invoked when the hook triggers.
 | |
| 54 |             The exact signature will depend on the hook - see the __init__ 
 | |
| 55 |             method of BranchHooks for details on each hook.
 | |
| 56 |         """
 | |
| 57 | try: | |
| 58 | self[hook_name].append(a_callable) | |
| 59 | except KeyError: | |
| 60 | raise errors.UnknownHook(self.__class__.__name__, hook_name) | |
| 2553.1.1
by Robert Collins Give Hooks names. | 61 | |
| 62 | def name_hook(self, a_callable, name): | |
| 63 | """Associate name with a_callable to show users what is running.""" | |
| 64 | self._callable_names[a_callable] = name |