~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/hooks.py

  • Committer: Jelmer Vernooij
  • Date: 2012-01-02 14:41:49 UTC
  • mto: This revision was merged to the branch mainline in revision 6441.
  • Revision ID: jelmer@samba.org-20120102144149-66kkvew1kylagrk9
Drop exception suppression support.

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
from bzrlib import (
22
22
    registry,
23
23
    symbol_versioning,
24
 
    trace,
25
24
    )
26
25
from bzrlib.lazy_import import lazy_import
27
26
lazy_import(globals(), """
134
133
        self._module = module
135
134
        self._member_name = member_name
136
135
 
137
 
    def add_hook(self, name, doc, introduced, deprecated=None,
138
 
        suppress_exceptions=False, passed_exceptions=[]):
 
136
    def add_hook(self, name, doc, introduced, deprecated=None):
139
137
        """Add a hook point to this dictionary.
140
138
 
141
139
        :param name: The name of the hook, for clients to use when registering.
143
141
        :param introduced: When the hook was introduced (e.g. (0, 15)).
144
142
        :param deprecated: When the hook was deprecated, None for
145
143
            not-deprecated.
146
 
        :param suppress_exceptions: If True, then exceptions raised
147
 
            when firing the hookpoints are suppressed and a warning message
148
 
            reported on bzr.log.
149
 
        :param passed_exceptions: A list of exception classes to
150
 
            be raised when suppress_exceptions = True.
151
144
        """
152
145
        if name in self:
153
146
            raise errors.DuplicateKey(name)
157
150
        else:
158
151
            callbacks = None
159
152
        hookpoint = HookPoint(name=name, doc=doc, introduced=introduced,
160
 
                              deprecated=deprecated, callbacks=callbacks,
161
 
                              suppress_exceptions=suppress_exceptions,
162
 
                              passed_exceptions=passed_exceptions)
 
153
                              deprecated=deprecated, callbacks=callbacks)
163
154
        self[name] = hookpoint
164
155
 
165
156
    @symbol_versioning.deprecated_method(symbol_versioning.deprecated_in((2, 4)))
306
297
        should describe the recommended replacement hook to register for.
307
298
    """
308
299
 
309
 
    def __init__(self, name, doc, introduced, deprecated=None, callbacks=None,
310
 
        suppress_exceptions=False, passed_exceptions=[]):
 
300
    def __init__(self, name, doc, introduced, deprecated=None, callbacks=None):
311
301
        """Create a HookPoint.
312
302
 
313
303
        :param name: The name of the hook, for clients to use when registering.
315
305
        :param introduced: When the hook was introduced (e.g. (0, 15)).
316
306
        :param deprecated: When the hook was deprecated, None for
317
307
            not-deprecated.
318
 
        :param suppress_exceptions: If True, then exceptions raised
319
 
            when firing the hookpoints are suppressed and a warning message
320
 
            reported on bzr.log.
321
 
        :param passed_exceptions: A list of exception classes to
322
 
            be raised when suppress_exceptions = True.
323
308
        """
324
309
        self.name = name
325
310
        self.__doc__ = doc
329
314
            self._callbacks = []
330
315
        else:
331
316
            self._callbacks = callbacks
332
 
        self.suppress_exceptions = suppress_exceptions
333
 
        self.passed_exceptions = passed_exceptions
334
317
 
335
318
    def docs(self):
336
319
        """Generate the documentation for this HookPoint.
418
401
        strings.append("]>")
419
402
        return ''.join(strings)
420
403
 
421
 
    def fire(self, *args):
422
 
        """Fire this hook.  If suppress_exceptions is True, then catch
423
 
        and report any exceptions that may occur, except for those
424
 
        exceptions in passed_exceptions.
425
 
        
426
 
        :return: True if all hooks passed without an exception
427
 
        """
428
 
 
429
 
        if not self.suppress_exceptions:
430
 
            for (callback, callback_name) in self._callbacks:
431
 
                callback.get_obj()(*args)
432
 
            return True
433
 
 
434
 
        raised = 0
435
 
        for (callback, callback_name) in self._callbacks:
436
 
            try:
437
 
                callback.get_obj()(*args)
438
 
            except Exception, e:
439
 
                for exc in self.passed_exceptions:
440
 
                    if isinstance(e, exc): raise e
441
 
                raised = raised + 1
442
 
                trace.mutter('hook %r in %r failed: %r' % (self.name,
443
 
                    callback_name, e))
444
 
                trace.log_exception_quietly()
445
 
        if raised > 0 and not trace.is_quiet():
446
 
            trace.warning("There were hook failures for %r: see bzr.log"
447
 
                % self.name)
448
 
        return raised == 0
449
404
 
450
405
_help_prefix = \
451
406
"""