Function: package-vc--generate-description-file

package-vc--generate-description-file is a byte-compiled function defined in package-vc.el.gz.

Signature

(package-vc--generate-description-file PKG-DESC PKG-FILE)

Documentation

Generate a package description file for PKG-DESC and write it to PKG-FILE.

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/package-vc.el.gz
(defun package-vc--generate-description-file (pkg-desc pkg-file)
  "Generate a package description file for PKG-DESC and write it to PKG-FILE."
  (let ((name (package-desc-name pkg-desc))
        (main-file (let ((file (package-vc--main-file pkg-desc)))
                     (and (file-exists-p file) file))))
    (when (equal (package-desc-summary pkg-desc) package--default-summary)
      ;; We unset the package description if it is just the default
      ;; summary, so that the following heuristic can take effect.
      (setf (package-desc-summary pkg-desc) nil))
    ;; Infer the package description if missing.
    (unless (package-desc-summary pkg-desc)
      (setf (package-desc-summary pkg-desc)
            (or (package-desc-summary pkg-desc)
                (and-let* ((pkg (cadr (assq name package-archive-contents))))
                  (package-desc-summary pkg))
                (and main-file
                     (lm-summary main-file))
                package--default-summary)))
    (let ((print-level nil)
          (print-quoted t)
          (print-length nil))
      (write-region
       (concat
        ";;; Generated package description from "
        (replace-regexp-in-string
         "-pkg\\.el\\'" ".el"
         (file-name-nondirectory pkg-file))
        "  -*- no-byte-compile: t; lexical-binding: t -*-\n"
        (prin1-to-string
         (nconc
          (list 'define-package
                (symbol-name name)
                (package-vc--version pkg-desc)
                (package-desc-summary pkg-desc)
                (let ((requires (package-desc-reqs pkg-desc)))
                  (list 'quote
                        ;; Turn version lists into string form.
                        (mapcar
                         (lambda (elt)
                           (list (car elt)
                                 (package-version-join (cadr elt))))
                         requires))))
          (list :kind 'vc)
          (package--alist-to-plist-args
           (let ((extras (copy-alist (package-desc-extras pkg-desc))))
             (setf (alist-get :commit extras)
                   (package-vc-commit pkg-desc))
             (when-let* (((null (alist-get :maintainer extras)))
                         (main-file)
                         (maintainers (lm-maintainers main-file)))
               ;; Like in `package-buffer-info', for backward
               ;; compatibility, use a single cons-cell if there's
               ;; only one maintainer.
               (setf (alist-get :maintainer extras)
                     (if (cdr maintainers)
                         maintainers
                       (car maintainers))))
             extras)
           )))
        "\n")
       nil pkg-file nil 'silent))))