Only use 'package-vc-repository-store' if necessary

* lisp/emacs-lisp/package-vc.el (package-vc-unpack): Check if the
upstream data indicates a custom lisp directory.
* lisp/emacs-lisp/package.el (package--delete-directory): Adapt
accordingly.
This commit is contained in:
Philip Kaludercic 2022-10-12 14:49:23 +02:00
parent 8e6e6e6de5
commit 4a25205ec1
No known key found for this signature in database
GPG key ID: F2C3CC513DB89F66
2 changed files with 28 additions and 24 deletions

View file

@ -155,8 +155,6 @@ The output is written out into PKG-FILE."
(defun package-vc-unpack (pkg-desc)
"Install the package described by PKG-DESC."
(unless (file-exists-p package-vc-repository-store)
(make-directory package-vc-repository-store t))
(let* ((name (package-desc-name pkg-desc))
(dirname (package-desc-full-name pkg-desc))
(pkg-dir (expand-file-name dirname package-user-dir)))
@ -169,12 +167,17 @@ The output is written out into PKG-FILE."
(`(,backend ,repo ,dir ,branch)
(or (alist-get :upstream attr)
(error "Source package has no repository")))
(repo-dir (file-name-concat
package-vc-repository-store
;; FIXME: We aren't sure this directory
;; will be unique, but we can try other
;; names to avoid an unnecessary error.
(file-name-base repo))))
(repo-dir
(if (null dir)
pkg-dir
(unless (file-exists-p package-vc-repository-store)
(make-directory package-vc-repository-store t))
(file-name-concat
package-vc-repository-store
;; FIXME: We aren't sure this directory
;; will be unique, but we can try other
;; names to avoid an unnecessary error.
(file-name-base repo)))))
;; Clone the repository into `repo-dir'.
(make-directory (file-name-directory repo-dir) t)
@ -182,9 +185,10 @@ The output is written out into PKG-FILE."
(vc-clone backend repo repo-dir))
(error "Failed to clone %s from %s" name repo))
;; Link from the right position in `repo-dir' to the package
;; directory in the ELPA store.
(make-symbolic-link (file-name-concat repo-dir dir) pkg-dir)
(unless (eq pkg-dir repo-dir)
;; Link from the right position in `repo-dir' to the package
;; directory in the ELPA store.
(make-symbolic-link (file-name-concat repo-dir dir) pkg-dir))
(when-let ((default-directory repo-dir)
(rev (or (alist-get :rev attr) branch)))
(vc-retrieve-tag pkg-dir rev))

View file

@ -2416,19 +2416,19 @@ compiled."
(cl-loop
for file in (directory-files-recursively dir "\\.el\\'")
do (comp-clean-up-stale-eln (comp-el-to-eln-filename file))))
(cond
((not (package-vc-p pkg-desc))
(delete-directory dir t))
((progn
(require 'package-vc) ;load `package-vc-repository-store'
(file-in-directory-p dir package-vc-repository-store))
(delete-directory
(expand-file-name
(car (file-name-split
(file-relative-name dir package-vc-repository-store)))
package-vc-repository-store)
t)
(delete-file (directory-file-name dir)))))
(if (and (package-vc-p pkg-desc)
(require 'package-vc) ;load `package-vc-repository-store'
(file-in-directory-p dir package-vc-repository-store))
(progn
(delete-directory
(expand-file-name
(car (file-name-split
(file-relative-name dir package-vc-repository-store)))
package-vc-repository-store)
t)
(delete-file (directory-file-name dir)))
(delete-directory dir t)))
(defun package-delete (pkg-desc &optional force nosave)
"Delete package PKG-DESC.