diff mercurial/hook.py @ 7416:196b05a548d0

hooks: restore io correctly on exception
author Jesse Long <jesse@virtualpostman.co.za>
date Tue, 25 Nov 2008 16:40:54 -0600
parents 810ca383da9c
children 182b7114d35a
line wrap: on
line diff
--- 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