fix(cli): nativecomp error writing to read-only fs

Occurs when a site-file fails to be natively compiled, and Doom attempts
to write an error file in the same directory. On some systems, the
site-lisp directory is in a read-only tree/mount (like nix and guix).
This should suppress those attempts.
This commit is contained in:
Henrik Lissner 2022-09-10 12:05:41 +02:00
parent f3e85afc7e
commit 96ae3f1b04
No known key found for this signature in database
GPG key ID: B60957CA074D39A3

View file

@ -211,9 +211,12 @@ list remains lean."
(error-file (doom-packages--eln-error-file eln-name))) (error-file (doom-packages--eln-error-file eln-name)))
(if (file-exists-p eln-file) (if (file-exists-p eln-file)
(doom-log "Compiled %s" eln-file) (doom-log "Compiled %s" eln-file)
(make-directory (file-name-directory error-file) 'parents) (let ((error-dir (file-name-directory error-file)))
(write-region "" nil error-file) (if (not (file-writable-p error-dir))
(doom-log "Wrote %s" error-file))))) (doom-log "Can't write %s" error-file)
(make-directory error-dir 'parents)
(write-region "" nil error-file)
(doom-log "Wrote %s" error-file)))))))
(defun doom-packages--wait-for-native-compile-jobs () (defun doom-packages--wait-for-native-compile-jobs ()
"Wait for all pending async native compilation jobs." "Wait for all pending async native compilation jobs."
@ -245,9 +248,11 @@ list remains lean."
for eln-name = (doom-packages--eln-file-name file) for eln-name = (doom-packages--eln-file-name file)
for eln-file = (doom-packages--eln-output-file eln-name) for eln-file = (doom-packages--eln-output-file eln-name)
for error-file = (doom-packages--eln-error-file eln-name) for error-file = (doom-packages--eln-error-file eln-name)
for error-dir = (file-name-directory error-file)
unless (or (file-exists-p eln-file) unless (or (file-exists-p eln-file)
(file-newer-than-file-p error-file file)) (file-newer-than-file-p error-file file)
do (make-directory (file-name-directory error-file) 'parents) (not (file-writable-p error-dir)))
do (make-directory error-dir 'parents)
(write-region "" nil error-file) (write-region "" nil error-file)
(doom-log "Wrote %s" error-file)) (doom-log "Wrote %s" error-file))
(setq doom-packages--eln-output-expected nil))) (setq doom-packages--eln-output-expected nil)))