Commit d2ad4ba4 authored by Yuri D'Elia's avatar Yuri D'Elia Committed by Noam Postavsky

Do not consider external packages to be removable (Bug#27822)

Packages which are not directly user-installed shouldn't be autoremoved,
since they can be setup through a different path (via
`package-directory-list') where we have no authority over.
* lisp/emacs-lisp/package.el (package--user-installed-p): New
(package--removable-packages): Use it.
parent ec0995c4
......@@ -1730,6 +1730,15 @@ if it is still empty."
(indirect indirect-deps)
(t (delete-dups (append direct-deps indirect-deps))))))
(defun package--user-installed-p (package)
"Return non-nil if PACKAGE is a user-installed package.
PACKAGE is the package name, a symbol. Check whether the package
was installed into `package-user-dir' where we assume to have
control over."
(let* ((pkg-desc (cadr (assq package package-alist)))
(dir (package-desc-dir pkg-desc)))
(file-in-directory-p dir package-user-dir)))
(defun package--removable-packages ()
"Return a list of names of packages no longer needed.
These are packages which are neither contained in
......@@ -1739,7 +1748,9 @@ These are packages which are neither contained in
;; `p' and its dependencies are needed.
append (cons p (package--get-deps p)))))
(cl-loop for p in (mapcar #'car package-alist)
unless (memq p needed)
unless (or (memq p needed)
;; Do not auto-remove external packages.
(not (package--user-installed-p p)))
collect p)))
(defun package--used-elsewhere-p (pkg-desc &optional pkg-list all)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment