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.
--- 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)