Improved ui.edit():
- Use descriptive name for temporary file: hg-editor-*.txt
- Don't import tempfile in the method, but use demandload()
- Remove tempfile file even if editor aborts.
--- a/mercurial/ui.py Tue Mar 21 12:45:27 2006 +0100
+++ b/mercurial/ui.py Tue Mar 21 12:54:32 2006 +0100
@@ -8,7 +8,7 @@
import ConfigParser
from i18n import gettext as _
from demandload import *
-demandload(globals(), "os re socket sys util")
+demandload(globals(), "os re socket sys util tempfile")
class ui(object):
def __init__(self, verbose=False, debug=False, quiet=False,
@@ -195,23 +195,25 @@
def debug(self, *msg):
if self.debugflag: self.write(*msg)
def edit(self, text, user):
- import tempfile
- (fd, name) = tempfile.mkstemp("hg")
- f = os.fdopen(fd, "w")
- f.write(text)
- f.close()
+ (fd, name) = tempfile.mkstemp(prefix="hg-editor-", suffix=".txt")
+ try:
+ f = os.fdopen(fd, "w")
+ f.write(text)
+ f.close()
+
+ editor = (os.environ.get("HGEDITOR") or
+ self.config("ui", "editor") or
+ os.environ.get("EDITOR", "vi"))
- editor = (os.environ.get("HGEDITOR") or
- self.config("ui", "editor") or
- os.environ.get("EDITOR", "vi"))
+ util.system("%s \"%s\"" % (editor, name),
+ environ={'HGUSER': user},
+ onerr=util.Abort, errprefix=_("edit failed"))
- util.system("%s \"%s\"" % (editor, name),
- environ={'HGUSER': user},
- onerr=util.Abort, errprefix=_("edit failed"))
-
- t = open(name).read()
- t = re.sub("(?m)^HG:.*\n", "", t)
-
- os.unlink(name)
+ f = open(name)
+ t = f.read()
+ f.close()
+ t = re.sub("(?m)^HG:.*\n", "", t)
+ finally:
+ os.unlink(name)
return t