mercurial/hook.py
branchstable
changeset 14889 a59058fd074a
parent 14711 ac70f8d5987c
child 14916 58f97dcbd550
equal deleted inserted replaced
14884:c0ccd70df52c 14889:a59058fd074a
    63         if not hasattr(obj, '__call__'):
    63         if not hasattr(obj, '__call__'):
    64             raise util.Abort(_('%s hook is invalid '
    64             raise util.Abort(_('%s hook is invalid '
    65                                '("%s" is not callable)') %
    65                                '("%s" is not callable)') %
    66                              (hname, funcname))
    66                              (hname, funcname))
    67     try:
    67     try:
       
    68         # redirect IO descriptors the the ui descriptors so hooks that write
       
    69         # directly to these don't mess the command protocol when running through
       
    70         # the command server
       
    71         old = sys.stdout, sys.stderr, sys.stdin
       
    72         sys.stdout, sys.stderr, sys.stdin = ui.fout, ui.ferr, ui.fin
       
    73 
    68         r = obj(ui=ui, repo=repo, hooktype=name, **args)
    74         r = obj(ui=ui, repo=repo, hooktype=name, **args)
    69     except KeyboardInterrupt:
    75     except KeyboardInterrupt:
    70         raise
    76         raise
    71     except Exception, exc:
    77     except Exception, exc:
    72         if isinstance(exc, util.Abort):
    78         if isinstance(exc, util.Abort):
    77                            '%s\n') % (hname, exc))
    83                            '%s\n') % (hname, exc))
    78         if throw:
    84         if throw:
    79             raise
    85             raise
    80         ui.traceback()
    86         ui.traceback()
    81         return True
    87         return True
       
    88     finally:
       
    89         sys.stdout, sys.stderr, sys.stdin = old
    82     if r:
    90     if r:
    83         if throw:
    91         if throw:
    84             raise util.Abort(_('%s hook failed') % hname)
    92             raise util.Abort(_('%s hook failed') % hname)
    85         ui.warn(_('warning: %s hook failed\n') % hname)
    93         ui.warn(_('warning: %s hook failed\n') % hname)
    86     return r
    94     return r