comparison mercurial/ui.py @ 508:42a660abaf75

[PATCH] Harden os.system -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 [PATCH] Harden os.system From: Bryan O'Sullivan <bos@serpentine.com> Add util.system function. This is similar to os.system, but will either succeed (if the process finishes with a zero exit code) or raise a util.CommandError (if the process exits uncleanly or is killed by a signal). Add util.explain_exit function. This tends to be ubiquitous in code that calls other processes, and must describe what has gone wrong. Change some uses of os.system over to util.system. manifest hash: e3bf4adcac5b915432ec0af00efdbcef86bea4b1 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCwSipywK+sNU5EO8RAr0RAJkBDt8XQ7mYQAWNHNgTOVt1eyWU1QCfe1oO 2OwxyWqpbRNACVJHHfZ3/Xw= =OaRX -----END PGP SIGNATURE-----
author mpm@selenic.com
date Tue, 28 Jun 2005 02:38:33 -0800
parents 1f81ebff98c9
children 03f27b1381f9
comparison
equal deleted inserted replaced
507:dd8b19114fe7 508:42a660abaf75
3 # Copyright 2005 Matt Mackall <mpm@selenic.com> 3 # Copyright 2005 Matt Mackall <mpm@selenic.com>
4 # 4 #
5 # This software may be used and distributed according to the terms 5 # This software may be used and distributed according to the terms
6 # of the GNU General Public License, incorporated herein by reference. 6 # of the GNU General Public License, incorporated herein by reference.
7 7
8 import os, sys, re, ConfigParser 8 import os, sys, re, ConfigParser, util
9 9
10 class ui: 10 class ui:
11 def __init__(self, verbose=False, debug=False, quiet=False, 11 def __init__(self, verbose=False, debug=False, quiet=False,
12 interactive=True): 12 interactive=True):
13 self.cdata = ConfigParser.SafeConfigParser() 13 self.cdata = ConfigParser.SafeConfigParser()
76 f = os.fdopen(fd, "w") 76 f = os.fdopen(fd, "w")
77 f.write(text) 77 f.write(text)
78 f.close() 78 f.close()
79 79
80 editor = os.environ.get("HGEDITOR") or os.environ.get("EDITOR", "vi") 80 editor = os.environ.get("HGEDITOR") or os.environ.get("EDITOR", "vi")
81 r = os.system("%s %s" % (editor, name)) 81 util.system("%s %s" % (editor, name), errprefix = "edit failed")
82
83 if r:
84 raise "Edit failed!"
85 82
86 t = open(name).read() 83 t = open(name).read()
87 t = re.sub("(?m)^HG:.*\n", "", t) 84 t = re.sub("(?m)^HG:.*\n", "", t)
88 85
89 return t 86 return t