org-babel: Refactor temporary directory usage

* lisp/ob-core.el (org-babel-temp-directory): Fix return value for
remote directory.
(org-babel-temp-file): Simplify using `org-babel-temp-directory'.  Fix
incorrect file location when PREFIX is "".
(org-babel-temp-stable-directory): New macro returning suitable
temporary stable directory.
(org-babel-temp-stable-file): Simplify using
`org-babel-temp-stable-directory'.  Fix incorrect file location when
PREFIX is "".
* lisp/ob-java.el (org-babel-execute:java): Use
`org-babel-temp-directory'.

Reported-by: Ferdinand Pieper <fer@pie.tf>
Link: https://orgmode.org/list/87r0yz7u9q.fsf_-_@pie.tf
This commit is contained in:
Ihor Radchenko 2022-10-23 11:49:00 +08:00
parent 2f5e7103e5
commit 69e3a4db3d
No known key found for this signature in database
GPG Key ID: 6470762A7DA11D8B
2 changed files with 26 additions and 39 deletions

View File

@ -3276,7 +3276,8 @@ Emacs shutdown.")
(defmacro org-babel-temp-directory () (defmacro org-babel-temp-directory ()
"Return temporary directory suitable for `default-directory'." "Return temporary directory suitable for `default-directory'."
`(if (file-remote-p default-directory) `(if (file-remote-p default-directory)
org-babel-remote-temporary-directory (concat (file-remote-p default-directory)
org-babel-remote-temporary-directory)
(or (and org-babel-temporary-directory (or (and org-babel-temporary-directory
(file-exists-p org-babel-temporary-directory) (file-exists-p org-babel-temporary-directory)
org-babel-temporary-directory) org-babel-temporary-directory)
@ -3287,42 +3288,31 @@ Emacs shutdown.")
Passes PREFIX and SUFFIX directly to `make-temp-file' with the Passes PREFIX and SUFFIX directly to `make-temp-file' with the
value of `temporary-file-directory' temporarily set to the value value of `temporary-file-directory' temporarily set to the value
of `org-babel-temporary-directory'." of `org-babel-temporary-directory'."
(if (file-remote-p default-directory) (make-temp-file
(let ((prefix (concat (file-name-as-directory (org-babel-temp-directory)) prefix)
(concat (file-remote-p default-directory) nil
(expand-file-name suffix))
prefix org-babel-remote-temporary-directory))))
(make-temp-file prefix nil suffix)) (defmacro org-babel-temp-stable-directory ()
(let ((temporary-file-directory "Return temporary stable directory."
(or (and org-babel-temporary-directory `(let ((org-babel-temporary-directory org-babel-temporary-stable-directory))
(file-exists-p org-babel-temporary-directory) (org-babel-temp-directory)))
org-babel-temporary-directory)
temporary-file-directory)))
(make-temp-file prefix nil suffix))))
(defun org-babel-temp-stable-file (data prefix &optional suffix) (defun org-babel-temp-stable-file (data prefix &optional suffix)
"Create a temporary file in the `org-babel-remove-temporary-stable-directory'. "Create a temporary file in the `org-babel-remove-temporary-stable-directory'.
The file name is stable with respect to DATA. The file name is The file name is stable with respect to DATA. The file name is
constructed like the following: PREFIXDATAhashSUFFIX." constructed like the following: PREFIXDATAhashSUFFIX."
(if (file-remote-p default-directory) (let ((path
(let* ((prefix (format
(concat (file-remote-p default-directory) "%s%s%s%s"
(expand-file-name (file-name-as-directory (org-babel-temp-stable-directory))
prefix org-babel-temporary-stable-directory))) prefix
(path (concat prefix (format "%s" (sxhash data)) (or suffix "")))) (sxhash data)
(with-temp-file path) (or suffix ""))))
path) ;; Create file.
(let* ((temporary-file-directory (with-temp-file path)
(or (and org-babel-temporary-stable-directory ;; Return it.
(file-exists-p org-babel-temporary-stable-directory) path))
org-babel-temporary-stable-directory)
temporary-file-directory))
(path (concat
(expand-file-name
prefix org-babel-temporary-stable-directory)
(format "%s" (sxhash data)) (or suffix ""))))
(with-temp-file path)
path)))
(defun org-babel-remove-temporary-directory () (defun org-babel-remove-temporary-directory ()
"Remove `org-babel-temporary-directory' on Emacs shutdown." "Remove `org-babel-temporary-directory' on Emacs shutdown."

View File

@ -194,13 +194,10 @@ replaced in this string.")
(packagename (if (string-match-p "\\." fullclassname) (packagename (if (string-match-p "\\." fullclassname)
(file-name-base fullclassname))) (file-name-base fullclassname)))
;; the base dir that contains the top level package dir ;; the base dir that contains the top level package dir
(basedir (file-name-as-directory (if run-from-temp (basedir (file-name-as-directory
(if (file-remote-p default-directory) (if run-from-temp
(concat (org-babel-temp-directory)
(file-remote-p default-directory) default-directory)))
org-babel-remote-temporary-directory)
(org-babel-temp-directory))
default-directory)))
;; the dir to write the source file ;; the dir to write the source file
(packagedir (if (and (not run-from-temp) packagename) (packagedir (if (and (not run-from-temp) packagename)
(file-name-as-directory (file-name-as-directory