summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/package.el
diff options
context:
space:
mode:
authorArtur Malabarba <bruce.connor.am@gmail.com>2015-04-07 18:59:40 +0100
committerArtur Malabarba <bruce.connor.am@gmail.com>2015-04-08 19:18:30 +0100
commit0465c9dd42a969aec375e6828ea70c3ad4c72c1c (patch)
tree5d51ac167d2bd14aba4947ab748873849e919974 /lisp/emacs-lisp/package.el
parentbf87b4d5a83cff934b469a95c14d782f68ea963a (diff)
downloademacs-0465c9dd42a969aec375e6828ea70c3ad4c72c1c.tar.gz
emacs-0465c9dd42a969aec375e6828ea70c3ad4c72c1c.tar.bz2
emacs-0465c9dd42a969aec375e6828ea70c3ad4c72c1c.zip
* lisp/emacs-lisp/package.el: More conservative `ensure-init-file'
(package--ensure-init-file): Check file contents before visiting. (package-initialize): Call it. (package-install-from-buffer, package-install): Don't call it.
Diffstat (limited to 'lisp/emacs-lisp/package.el')
-rw-r--r--lisp/emacs-lisp/package.el35
1 files changed, 22 insertions, 13 deletions
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 3188da5f439..10003c42085 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -1315,9 +1315,12 @@ If successful, set `package-archive-contents'."
(defun package-initialize (&optional no-activate)
"Load Emacs Lisp packages, and activate them.
The variable `package-load-list' controls which packages to load.
-If optional arg NO-ACTIVATE is non-nil, don't activate packages."
+If optional arg NO-ACTIVATE is non-nil, don't activate packages.
+If `user-init-file' does not mention `(package-initialize)', add
+it to the file."
(interactive)
(setq package-alist nil)
+ (package--ensure-init-file)
(package-load-all-descriptors)
(package-read-all-archive-contents)
(unless no-activate
@@ -1752,25 +1755,33 @@ using `package-compute-transaction'."
"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)
+ (let* ((buffer (find-buffer-visiting user-init-file))
+ (contains-init
+ (if buffer
+ (with-current-buffer buffer
+ (search-forward "(package-initialize)" nil 'noerror))
+ (with-temp-buffer
+ (insert-file-contents user-init-file)
+ (goto-char (point-min))
+ (search-forward "(package-initialize)" nil 'noerror)))))
+ (unless contains-init
+ (with-current-buffer (or buffer (find-file-noselect user-init-file))
+ (save-excursion
+ (save-restriction
+ (widen)
(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"
+ ";; You may delete these explanatory comments.\n"
"(package-initialize)\n")
(unless (looking-at-p "$")
(insert "\n"))
(let ((file-precious-flag t))
- (save-buffer)))
- (unless buffer
- (kill-buffer (current-buffer)))))))))
+ (save-buffer))
+ (unless buffer
+ (kill-buffer (current-buffer))))))))))
;;;###autoload
(defun package-install (pkg &optional dont-select async callback)
@@ -1803,7 +1814,6 @@ 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)))
@@ -1846,7 +1856,6 @@ 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)