]> git.eshelyaron.com Git - emacs.git/commitdiff
Attempt to recognise if a VC package has no Elisp files
authorPhilip Kaludercic <philipk@posteo.net>
Thu, 16 Feb 2023 10:11:23 +0000 (11:11 +0100)
committerPhilip Kaludercic <philipk@posteo.net>
Thu, 16 Feb 2023 10:11:23 +0000 (11:11 +0100)
* lisp/emacs-lisp/package-vc.el (package-vc-non-code-file-names): Add
new variable used to avoid false-positives.
(package-vc--unpack): Recursively search for .el files excluding the
ones listed in 'package-vc-non-code-file-names', offering to abort the
installation if none are found.

lisp/emacs-lisp/package-vc.el

index bad59aa6c0f3995808cfbfe626e7ec758069cec7..05df89d264e49b014db10c23e502f8689c915293 100644 (file)
@@ -602,6 +602,13 @@ attribute in PKG-SPEC."
           (vc-retrieve-tag dir release-rev)
         (message "No release revision was found, continuing...")))))
 
+(defvar package-vc-non-code-file-names
+  '(".dir-locals.el" ".dir-locals-2.el")
+  "List of file names that do not contain Emacs Lisp code.
+This list is used by `package-vc--unpack' to better check if the
+user is fetching code from a repository that does not contain any
+Emacs Lisp files.")
+
 (defun package-vc--unpack (pkg-desc pkg-spec &optional rev)
   "Install the package described by PKG-DESC.
 PKG-SPEC is a package specification, a property list describing
@@ -623,6 +630,14 @@ checkout.  This overrides the `:branch' attribute in PKG-SPEC."
     (when (directory-empty-p pkg-dir)
       (delete-directory pkg-dir)
       (error "Empty checkout for %s" name))
+    (unless (seq-remove
+             (lambda (file)
+               (member (file-name-nondirectory file) package-vc-non-code-file-names))
+             (directory-files-recursively pkg-dir "\\.el\\'" nil))
+      (when (yes-or-no-p (format "No Emacs Lisp files found when fetching \"%s\", \
+abort installation?" name))
+        (delete-directory pkg-dir t)
+        (user-error "Installation aborted")))
 
     ;; When nothing is specified about a `lisp-dir', then should
     ;; heuristically check if there is a sub-directory with lisp