hooks: restore io correctly on exception
authorJesse Long <jesse@virtualpostman.co.za>
Tue, 25 Nov 2008 16:40:54 -0600
changeset 7416 196b05a548d0
parent 7415 6163ef936a00
child 7422 279a883aa1a0
hooks: restore io correctly on exception
mercurial/hook.py
--- a/mercurial/hook.py	Tue Nov 25 23:26:33 2008 +0100
+++ b/mercurial/hook.py	Tue Nov 25 16:40:54 2008 -0600
@@ -96,19 +96,20 @@
         oldstdout = os.dup(sys.__stdout__.fileno())
         os.dup2(sys.__stderr__.fileno(), sys.__stdout__.fileno())
 
-    for hname, cmd in util.sort(ui.configitems('hooks')):
-        if hname.split('.')[0] != name or not cmd:
-            continue
-        if callable(cmd):
-            r = _pythonhook(ui, repo, name, hname, cmd, args, throw) or r
-        elif cmd.startswith('python:'):
-            r = _pythonhook(ui, repo, name, hname, cmd[7:].strip(),
-                            args, throw) or r
-        else:
-            r = _exthook(ui, repo, hname, cmd, args, throw) or r
-
-    if _redirect:
-        os.dup2(oldstdout, sys.__stdout__.fileno())
-        os.close(oldstdout)
+    try:
+        for hname, cmd in util.sort(ui.configitems('hooks')):
+            if hname.split('.')[0] != name or not cmd:
+                continue
+            if callable(cmd):
+                r = _pythonhook(ui, repo, name, hname, cmd, args, throw) or r
+            elif cmd.startswith('python:'):
+                r = _pythonhook(ui, repo, name, hname, cmd[7:].strip(),
+                                args, throw) or r
+            else:
+                r = _exthook(ui, repo, hname, cmd, args, throw) or r
+    finally:
+        if _redirect:
+            os.dup2(oldstdout, sys.__stdout__.fileno())
+            os.close(oldstdout)
 
     return r