equal
deleted
inserted
replaced
4 # |
4 # |
5 # This software may be used and distributed according to the terms |
5 # This software may be used and distributed according to the terms |
6 # of the GNU General Public License, incorporated herein by reference. |
6 # of the GNU General Public License, incorporated herein by reference. |
7 |
7 |
8 from i18n import _ |
8 from i18n import _ |
9 import util |
9 import util, os, sys |
10 |
10 |
11 def _pythonhook(ui, repo, name, hname, funcname, args, throw): |
11 def _pythonhook(ui, repo, name, hname, funcname, args, throw): |
12 '''call python hook. hook is callable object, looked up as |
12 '''call python hook. hook is callable object, looked up as |
13 name in python module. if callable returns "true", hook |
13 name in python module. if callable returns "true", hook |
14 fails, else passes. if hook raises exception, treated as |
14 fails, else passes. if hook raises exception, treated as |
77 if throw: |
77 if throw: |
78 raise util.Abort(_('%s hook %s') % (name, desc)) |
78 raise util.Abort(_('%s hook %s') % (name, desc)) |
79 ui.warn(_('warning: %s hook %s\n') % (name, desc)) |
79 ui.warn(_('warning: %s hook %s\n') % (name, desc)) |
80 return r |
80 return r |
81 |
81 |
|
82 _redirect = False |
|
83 def redirect(state): |
|
84 _redirect = state |
|
85 |
82 def hook(ui, repo, name, throw=False, **args): |
86 def hook(ui, repo, name, throw=False, **args): |
83 r = False |
87 r = False |
|
88 |
|
89 if _redirect: |
|
90 # temporarily redirect stdout to stderr |
|
91 oldstdout = os.dup(sys.stdout.fileno()) |
|
92 os.dup2(sys.stderr.fileno(), sys.stdout.fileno()) |
|
93 |
84 hooks = [(hname, cmd) for hname, cmd in ui.configitems("hooks") |
94 hooks = [(hname, cmd) for hname, cmd in ui.configitems("hooks") |
85 if hname.split(".", 1)[0] == name and cmd] |
95 if hname.split(".", 1)[0] == name and cmd] |
86 hooks.sort() |
96 hooks.sort() |
87 for hname, cmd in hooks: |
97 for hname, cmd in hooks: |
88 if callable(cmd): |
98 if callable(cmd): |
92 args, throw) or r |
102 args, throw) or r |
93 else: |
103 else: |
94 r = _exthook(ui, repo, hname, cmd, args, throw) or r |
104 r = _exthook(ui, repo, hname, cmd, args, throw) or r |
95 return r |
105 return r |
96 |
106 |
|
107 if _redirect: |
|
108 os.dup2(oldstdout, sys.stdout.fileno()) |
|
109 os.close(oldstdout) |