From: Philip Kaludercic Date: Wed, 12 Oct 2022 12:49:23 +0000 (+0200) Subject: Only use 'package-vc-repository-store' if necessary X-Git-Tag: emacs-29.0.90~1616^2~307^2~66 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4a25205ec121926ffdbe2beee64dc10241b4cc6c;p=emacs.git 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. --- diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el index f5cf90963fa..fd8639e4c54 100644 --- a/lisp/emacs-lisp/package-vc.el +++ b/lisp/emacs-lisp/package-vc.el @@ -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)) diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 2748adddfb6..106b7d5a8de 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -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.