]> git.eshelyaron.com Git - emacs.git/commitdiff
python.el: Cleanup temp files even with eval errors.
authorFabián Ezequiel Gallina <fgallina@gnu.org>
Sat, 27 Dec 2014 06:38:32 +0000 (03:38 -0300)
committerFabián Ezequiel Gallina <fgallina@gnu.org>
Sat, 27 Dec 2014 06:38:32 +0000 (03:38 -0300)
* lisp/progmodes/python.el (python-shell-send-file): Make file-name
mandatory.  Fix temp file removal in the majority of cases.

lisp/ChangeLog
lisp/progmodes/python.el

index b73732a1a7ef164a36e243cb79dee974f24b66ce..5c5dae15e4dccb168185ef22f87c6e088711a22b 100644 (file)
@@ -1,3 +1,10 @@
+2014-12-27  Fabián Ezequiel Gallina  <fgallina@gnu.org>
+
+       python.el: Cleanup temp files even with eval errors.
+
+       * progmodes/python.el (python-shell-send-file): Make file-name
+       mandatory.  Fix temp file removal in the majority of cases.
+
 2014-12-27  Fabián Ezequiel Gallina  <fgallina@gnu.org>
 
        python.el: Handle file encoding for shell.
index 8bbbd69095c7e59a7b462b1c731826f19c9269db..d9422e5b6c0932dae5abd00989ae5a8906159e35 100644 (file)
@@ -2620,35 +2620,33 @@ When argument ARG is non-nil do not include decorators."
                                          delete)
   "Send FILE-NAME to inferior Python PROCESS.
 If TEMP-FILE-NAME is passed then that file is used for processing
-instead, while internally the shell will continue to use FILE-NAME.
-If DELETE is non-nil, delete the file afterwards."
+instead, while internally the shell will continue to use
+FILE-NAME.  If TEMP-FILE-NAME and DELETE are non-nil, then
+TEMP-FILE-NAME is deleted after evaluation is performed."
   (interactive "fFile to send: ")
   (let* ((process (or process (python-shell-get-or-create-process)))
          (encoding (with-temp-buffer
                      (insert-file-contents
                       (or temp-file-name file-name))
                      (python-info-encoding)))
+         (file-name (expand-file-name
+                     (or (file-remote-p file-name 'localname)
+                         file-name)))
          (temp-file-name (when temp-file-name
                            (expand-file-name
                             (or (file-remote-p temp-file-name 'localname)
-                                temp-file-name))))
-         (file-name (or (when file-name
-                          (expand-file-name
-                           (or (file-remote-p file-name 'localname)
-                               file-name)))
-                        temp-file-name)))
-    (when (not file-name)
-      (error "If FILE-NAME is nil then TEMP-FILE-NAME must be non-nil"))
+                                temp-file-name)))))
     (python-shell-send-string
      (format
       (concat
-       "import codecs; __pyfile = codecs.open('''%s''', encoding='''%s''');"
-       "exec(compile(__pyfile.read().encode('''%s'''), '''%s''', 'exec'));"
-       "__pyfile.close()%s")
-      (or temp-file-name file-name) encoding encoding file-name
-      (if delete (format "; import os; os.remove('''%s''')"
-                         (or temp-file-name file-name))
-        ""))
+       "import codecs, os;"
+       "__pyfile = codecs.open('''%s''', encoding='''%s''');"
+       "__code = __pyfile.read().encode('''%s''');"
+       "__pyfile.close();"
+       (when (and delete temp-file-name)
+         (format "os.remove('''%s''');" temp-file-name))
+       "exec(compile(__code, '''%s''', 'exec'));")
+      (or temp-file-name file-name) encoding encoding file-name)
      process)))
 
 (defun python-shell-switch-to-shell ()