summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/autoload.el
diff options
context:
space:
mode:
authorGlenn Morris <rgm@gnu.org>2017-05-06 17:58:20 -0700
committerGlenn Morris <rgm@gnu.org>2017-05-06 17:58:20 -0700
commit7f3d63908cd05fb34347d942e435c2964cd8b249 (patch)
tree3754fe9bb3be3da23196601a2908b112e0434122 /lisp/emacs-lisp/autoload.el
parent03d941982fbdf96260fc47d1cafbdda78c1d128e (diff)
downloademacs-7f3d63908cd05fb34347d942e435c2964cd8b249.tar.gz
Write autoloads file atomically
* lisp/emacs-lisp/autoload.el (autoload--save-buffer): New function, to save buffer atomically. (autoload-save-buffers, update-directory-autoloads): Use autoload--save-buffer. * lisp/Makefile.in ($(lisp)/loaddefs.el): No longer write to a temp file by hand.
Diffstat (limited to 'lisp/emacs-lisp/autoload.el')
-rw-r--r--lisp/emacs-lisp/autoload.el22
1 files changed, 18 insertions, 4 deletions
diff --git a/lisp/emacs-lisp/autoload.el b/lisp/emacs-lisp/autoload.el
index 9865b3198b2..8ad5e6b823d 100644
--- a/lisp/emacs-lisp/autoload.el
+++ b/lisp/emacs-lisp/autoload.el
@@ -866,11 +866,26 @@ FILE's modification time."
(error "%s:0:0: error: %s: %s" file (car err) (cdr err)))
))
+;; For parallel builds, to stop another process reading a half-written file.
+(defun autoload--save-buffer ()
+ "Save current buffer to its file, atomically."
+ ;; Copied from byte-compile-file.
+ (let* ((version-control 'never)
+ (tempfile (make-temp-name buffer-file-name))
+ (kill-emacs-hook
+ (cons (lambda () (ignore-errors (delete-file tempfile)))
+ kill-emacs-hook)))
+ (write-region (point-min) (point-max) tempfile nil 1)
+ (backup-buffer)
+ (rename-file tempfile buffer-file-name t)
+ (set-buffer-modified-p nil)
+ (set-visited-file-modtime)
+ (or noninteractive (message "Wrote %s" buffer-file-name))))
+
(defun autoload-save-buffers ()
(while autoload-modified-buffers
(with-current-buffer (pop autoload-modified-buffers)
- (let ((version-control 'never))
- (save-buffer)))))
+ (autoload--save-buffer))))
;; FIXME This command should be deprecated.
;; See http://debbugs.gnu.org/22213#41
@@ -1110,8 +1125,7 @@ write its autoloads into the specified file instead."
;; dependencies don't trigger unnecessarily.
(if (not changed)
(set-buffer-modified-p nil)
- (let ((version-control 'never))
- (save-buffer)))
+ (autoload--save-buffer))
;; In case autoload entries were added to other files because of
;; file-local autoload-generated-file settings.