Преглед изворни кода

using `org-babel-temporary-directory' to collect and remove temporary files

We had stopped using this because users noticed that temporary
directories were accumulating in their /tmp directory.  I believe this
was due to repeatedly evaluating the ob.el emacs-lisp file, which
repeatedly re-defined the `org-babel-temporary-directory' variable
creating multiple directories.  This problem should be fixed by
wrapping the defvar holding this form in (unless (boundp org...)).

* lisp/ob.el (boundp): uncommenting defvar form for
  org-babel-temporary-directory
  (org-babel-temp-file): now using the org-babel-temporary-directory
  for holding new babel temporary files
  (org-babel-remove-temporary-directory): removes the babel temp dir
  when Emacs shutsdown
  (kill-emacs-hook): now removing the babel temp dir on Emacs shutdown
Eric Schulte пре 14 година
родитељ
комит
a37072786c
1 измењених фајлова са 32 додато и 30 уклоњено
  1. 32 30
      lisp/ob.el

+ 32 - 30
lisp/ob.el

@@ -1765,13 +1765,15 @@ the file name is additionally processed by
   ((lambda (f) (if no-quote-p f (shell-quote-argument f)))
    (expand-file-name (org-babel-local-file-name name))))
 
-;; (defvar org-babel-temporary-directory
-;;   (or (and (boundp 'org-babel-temporary-directory)
-;; 	   org-babel-temporary-directory)
-;;       (make-temp-file "babel-" t))
-;;   "Directory to hold temporary files created to execute code blocks.
-;; Used by `org-babel-temp-file'.  This directory will be removed on
-;; Emacs shutdown.")
+(unless (boundp 'org-babel-temporary-directory)
+  (defvar org-babel-temporary-directory
+    (or (and (boundp 'org-babel-temporary-directory)
+	     (file-exists-p org-babel-temporary-directory)
+	     org-babel-temporary-directory)
+	(make-temp-file "babel-" t))
+    "Directory to hold temporary files created to execute code blocks.
+Used by `org-babel-temp-file'.  This directory will be removed on
+Emacs shutdown."))
 
 (defun org-babel-temp-file (prefix &optional suffix)
   "Create a temporary file in the `org-babel-temporary-directory'.
@@ -1784,29 +1786,29 @@ of `org-babel-temporary-directory'."
 	       (expand-file-name 
 		prefix temporary-file-directory)
 	       nil suffix))
-    ;; (let ((temporary-file-directory (expand-file-name
-    ;; 				     org-babel-temporary-directory
-    ;; 				     temporary-file-directory)))
-    ;;   (make-temp-file prefix nil suffix))
-    (make-temp-file prefix nil suffix)))
-
-;; (defun org-babel-remove-temporary-directory ()
-;;   "Remove `org-babel-temporary-directory' on Emacs shutdown."
-;;   (when (boundp 'org-babel-temporary-directory)
-;;     ;; taken from `delete-directory' in files.el
-;;     (mapc (lambda (file)
-;; 	    ;; This test is equivalent to
-;; 	    ;; (and (file-directory-p fn) (not (file-symlink-p fn)))
-;; 	    ;; but more efficient
-;; 	    (if (eq t (car (file-attributes file)))
-;; 		(delete-directory file)
-;; 	      (delete-file file)))
-;; 	  ;; We do not want to delete "." and "..".
-;; 	  (directory-files org-babel-temporary-directory 'full
-;; 			   "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*"))
-;;     (delete-directory org-babel-temporary-directory)))
-
-;; (add-hook 'kill-emacs-hook 'org-babel-remove-temporary-directory)
+    (let ((temporary-file-directory
+	   (or (and (file-exists-p org-babel-temporary-directory)
+		    org-babel-temporary-directory)
+	       temporary-file-directory)))
+      (make-temp-file prefix nil suffix))))
+
+(defun org-babel-remove-temporary-directory ()
+  "Remove `org-babel-temporary-directory' on Emacs shutdown."
+  (when (boundp 'org-babel-temporary-directory)
+    ;; taken from `delete-directory' in files.el
+    (mapc (lambda (file)
+	    ;; This test is equivalent to
+	    ;; (and (file-directory-p fn) (not (file-symlink-p fn)))
+	    ;; but more efficient
+	    (if (eq t (car (file-attributes file)))
+		(delete-directory file)
+	      (delete-file file)))
+	  ;; We do not want to delete "." and "..".
+	  (directory-files org-babel-temporary-directory 'full
+			   "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*"))
+    (delete-directory org-babel-temporary-directory)))
+
+(add-hook 'kill-emacs-hook 'org-babel-remove-temporary-directory)
 
 (provide 'ob)