diff options
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/package.el | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 32a3e015f0b..18802701a0a 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1397,8 +1397,12 @@ similar to an entry in `package-alist'. Save the cached copy to ;; If we care, check it (perhaps async) and *then* write the file. (package--check-signature location file content async + ;; This function will be called after signature checking. (lambda (&optional good-sigs) (unless (or good-sigs (eq package-check-signature 'allow-unsigned)) + ;; Even if the sig fails, this download is done, so + ;; remove it from the in-progress list. + (package--update-downloads-in-progress archive) (error "Unsigned archive `%s'" name)) ;; Write out the archives file. (write-region content nil local-file nil 'silent) @@ -1419,7 +1423,11 @@ perform the downloads asynchronously." package--downloads-in-progress)) (dolist (archive package-archives) (condition-case-unless-debug nil - (package--download-one-archive archive "archive-contents" async) + (package--download-one-archive + archive "archive-contents" + ;; Called if the async download fails + (when async + (lambda () (package--update-downloads-in-progress archive)))) (error (message "Failed to download `%s' archive." (car archive)))))) @@ -1715,6 +1723,30 @@ PACKAGES are satisfied, i.e. that PACKAGES is computed using `package-compute-transaction'." (mapc #'package-install-from-archive packages)) +(defun package--ensure-init-file () + "Ensure that the user's init file calls `package-initialize'." + ;; Don't mess with the init-file from "emacs -Q". + (when user-init-file + (let ((buffer (find-buffer-visiting user-init-file))) + (with-current-buffer (or buffer (find-file-noselect user-init-file)) + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (unless (search-forward "(package-initialize)" nil 'noerror) + (goto-char (point-min)) + (insert + ";; Added by Package.el. This must come before configurations of\n" + ";; installed packages. Don't delete this line. If you don't want it,\n" + ";; just comment it out by adding a semicolon to the start of the line.\n" + "(package-initialize)\n") + (unless (looking-at-p "$") + (insert "\n")) + (let ((file-precious-flag t)) + (save-buffer))) + (unless buffer + (kill-buffer (current-buffer))))))))) + ;;;###autoload (defun package-install (pkg &optional dont-select) "Install the package PKG. @@ -1743,6 +1775,7 @@ to install it but still mark it as selected." package-archive-contents)) nil t)) nil))) + (package--ensure-init-file) (let ((name (if (package-desc-p pkg) (package-desc-name pkg) pkg))) @@ -1786,6 +1819,7 @@ is derived from the main .el file in the directory. Downloads and installs required packages as needed." (interactive) + (package--ensure-init-file) (let* ((pkg-desc (cond ((derived-mode-p 'dired-mode) |