From: Philip Kaludercic <philipk@posteo.net>
Date: Sun, 16 Oct 2022 15:18:06 +0000 (+0200)
Subject: Attempt to infer the package subject if missing
X-Git-Tag: emacs-29.0.90~1616^2~307^2~54
X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=b4e833b2f8fa6962b66eddff420b366b07c48cf0;p=emacs.git

Attempt to infer the package subject if missing

* lisp/emacs-lisp/package-vc.el (package-vc-main-file): Add function.
(package-vc-generate-description-file): Infer the subject.
---

diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el
index dfa8094e614..e146d89171a 100644
--- a/lisp/emacs-lisp/package-vc.el
+++ b/lisp/emacs-lisp/package-vc.el
@@ -120,10 +120,32 @@
            return it
            finally return "0"))
 
+(defun package-vc-main-file (pkg-desc)
+  "Return the main file of the package PKG-DESC.
+If no file can be found that appends \".el\" to the end of the
+package name, the file with the closest file name is chosen."
+  (let* ((default-directory (package-desc-dir pkg-desc))
+         (best (format "%s.el" (package-desc-name pkg-desc)))
+         (distance most-positive-fixnum) next-best)
+    (if (file-exists-p best)
+        (expand-file-name best)
+      (dolist (file (directory-files default-directory nil "\\.el\\'"))
+        (let ((distance* (string-distance best file)))
+          (when (< distance* distance)
+            (setq distance distance* next-best file))))
+      next-best)))
+
 (defun package-vc-generate-description-file (pkg-desc pkg-file)
   "Generate a package description file for PKG-DESC.
 The output is written out into PKG-FILE."
-  (let* ((name (package-desc-name pkg-desc)))
+  (let ((name (package-desc-name pkg-desc)))
+    ;; Infer the subject if missing.
+    (unless (package-desc-summary pkg-desc)
+      (setf (package-desc-summary pkg-desc)
+            (or (and-let* ((pkg (cadr (assq name package-archive-contents))))
+                  (package-desc-summary pkg))
+                (lm-summary (package-vc-main-file pkg-desc))
+                package--default-summary)))
     (let ((print-level nil)
           (print-quoted t)
           (print-length nil))