Mercurial > public > mercurial-scm > hg
comparison mercurial/hook.py @ 9658:852b1f3032d2
hook: only redirect stdout if it and stderr are valid files
When using hgwebdir with WSGI via the IIS ISAPI-WSGI extension, both
stdout and stderr filenos are set to -2, which makes the os.dup call
in hook.py fail.
author | Sune Foldager <cryo@cyanite.org> |
---|---|
date | Wed, 28 Oct 2009 21:35:57 +0100 |
parents | 872d49dd577a |
children | 9e7b2c49d25d |
comparison
equal
deleted
inserted
replaced
9657:96c803e9018f | 9658:852b1f3032d2 |
---|---|
104 _redirect = state | 104 _redirect = state |
105 | 105 |
106 def hook(ui, repo, name, throw=False, **args): | 106 def hook(ui, repo, name, throw=False, **args): |
107 r = False | 107 r = False |
108 | 108 |
109 oldstdout = -1 | |
109 if _redirect: | 110 if _redirect: |
110 # temporarily redirect stdout to stderr | 111 stdoutno = sys.__stdout__.fileno() |
111 oldstdout = os.dup(sys.__stdout__.fileno()) | 112 stderrno = sys.__stderr__.fileno() |
112 os.dup2(sys.__stderr__.fileno(), sys.__stdout__.fileno()) | 113 # temporarily redirect stdout to stderr, if possible |
114 if stdoutno >= 0 and stderrno >= 0: | |
115 oldstdout = os.dup(stdoutno) | |
116 os.dup2(stderrno, stdoutno) | |
113 | 117 |
114 try: | 118 try: |
115 for hname, cmd in ui.configitems('hooks'): | 119 for hname, cmd in ui.configitems('hooks'): |
116 if hname.split('.')[0] != name or not cmd: | 120 if hname.split('.')[0] != name or not cmd: |
117 continue | 121 continue |
126 hookfn = cmd[7:].strip() | 130 hookfn = cmd[7:].strip() |
127 r = _pythonhook(ui, repo, name, hname, hookfn, args, throw) or r | 131 r = _pythonhook(ui, repo, name, hname, hookfn, args, throw) or r |
128 else: | 132 else: |
129 r = _exthook(ui, repo, hname, cmd, args, throw) or r | 133 r = _exthook(ui, repo, hname, cmd, args, throw) or r |
130 finally: | 134 finally: |
131 if _redirect: | 135 if _redirect and oldstdout >= 0: |
132 os.dup2(oldstdout, sys.__stdout__.fileno()) | 136 os.dup2(oldstdout, stdoutno) |
133 os.close(oldstdout) | 137 os.close(oldstdout) |
134 | 138 |
135 return r | 139 return r |