]> git.eshelyaron.com Git - emacs.git/commitdiff
Only use 'package-vc-repository-store' if necessary
authorPhilip Kaludercic <philipk@posteo.net>
Wed, 12 Oct 2022 12:49:23 +0000 (14:49 +0200)
committerPhilip Kaludercic <philipk@posteo.net>
Wed, 12 Oct 2022 12:49:35 +0000 (14:49 +0200)
* 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.

lisp/emacs-lisp/package-vc.el
lisp/emacs-lisp/package.el

index f5cf90963fabced2904ad043d3c86439d4d004df..fd8639e4c5419003d287df8dc8f4aaf8c9437755 100644 (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))
index 2748adddfb6e109a5efb08f06ff3e26ed5793d49..106b7d5a8de4392da8d94473b822ad33f87191a9 100644 (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.