Improved ui.edit():
authorThomas Arendsen Hein <thomas@intevation.de>
Tue, 21 Mar 2006 12:54:32 +0100
changeset 1984 df7436f439a0
parent 1983 ae12a81549a7
child 1985 c577689006fa
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.
mercurial/ui.py
--- 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