histedit: do not close stdin
authorJun Wu <quark@fb.com>
Tue, 15 Mar 2016 00:42:33 +0000
changeset 28550 e2b9145e35d8
parent 28549 e01bd7385f4f
child 28551 8e5312f8df30
histedit: do not close stdin Closing stdin is unexpected by chgserver and is not a good idea generally. This patch refactors related code a bit and make sure stdin is not closed. It will make chg much happier on test-histedit*.t.
hgext/histedit.py
--- a/hgext/histedit.py	Tue Mar 15 09:51:54 2016 +0000
+++ b/hgext/histedit.py	Tue Mar 15 00:42:33 2016 +0000
@@ -998,6 +998,13 @@
         return goaleditplan
     return goalnew
 
+def _readfile(path):
+    if path == '-':
+        return sys.stdin.read()
+    else:
+        with open(path, 'rb') as f:
+            return f.read()
+
 def _validateargs(ui, repo, state, freeargs, opts, goal, rules, revs):
     # TODO only abort if we try to histedit mq patches, not just
     # blanket if mq patches are applied somewhere
@@ -1190,12 +1197,7 @@
                                  node.short(state.topmost))
         rules = ruleeditor(repo, ui, state.actions, comment)
     else:
-        if rules == '-':
-            f = sys.stdin
-        else:
-            f = open(rules)
-        rules = f.read()
-        f.close()
+        rules = _readfile(rules)
     actions = parserules(rules, state)
     ctxs = [repo[act.nodetoverify()] \
             for act in state.actions if act.nodetoverify()]
@@ -1236,12 +1238,7 @@
         actions = [pick(state, r) for r in revs]
         rules = ruleeditor(repo, ui, actions, comment)
     else:
-        if rules == '-':
-            f = sys.stdin
-        else:
-            f = open(rules)
-        rules = f.read()
-        f.close()
+        rules = _readfile(rules)
     actions = parserules(rules, state)
     warnverifyactions(ui, repo, actions, state, ctxs)