]> git.eshelyaron.com Git - emacs.git/commitdiff
Document 'package-vc-selected-packages'
authorPhilip Kaludercic <philipk@posteo.net>
Fri, 4 Nov 2022 17:04:35 +0000 (18:04 +0100)
committerPhilip Kaludercic <philipk@posteo.net>
Fri, 4 Nov 2022 17:05:41 +0000 (18:05 +0100)
* doc/emacs/package.texi: Expand documentation and give example.
* etc/NEWS: Mention 'package-vc-selected-packages'.
* lisp/emacs-lisp/package-vc.el (package-vc--select-packages): Remove
function.
(package-vc-ensure-packages): Add function based on
'package-vc--select-packages'.
(package-vc-selected-packages): Call 'package-vc-ensure-packages' from
custom setter.

doc/emacs/package.texi
etc/NEWS
lisp/emacs-lisp/package-vc.el

index bd6d91a785d3cf5ebf3ebea8344b8ea7fddab0ee..51b86bb1471155560762db86962434e48da7a934 100644 (file)
@@ -558,6 +558,29 @@ regular package listing.  If you just wish to clone the source of a
 package, without adding it to the package list, use
 @code{package-vc-checkout}.
 
+@vindex package-vc-selected-packages
+@findex package-vc-ensure-packages
+  An alternative way to use @code{package-vc-install} is via the
+@code{package-vc-selected-packages} user option.  This is an alist of
+packages to install, where each key is a package name and the value is
+@code{nil}, indicating that any revision is to install, a string,
+indicating a specific revision or a package specification plist.  The
+side effect of setting the user option is to install the package, but
+the process can also be manually triggered using the function
+@code{package-vc-ensure-packages}.  Here is an example of how the user
+option:
+
+@example
+@group
+(setopt package-vc-selected-packages
+        '((modus-themes . "0f39eb3fd9") ;specific revision
+          (auctex . nil)                ;any revision
+          (foo                          ;a package specification
+           :url "https://git.sv.gnu.org/r/foo-mode.git"
+           :branch "trunk")))
+@end group
+@end example
+
 @findex package-report-bug
 @findex package-vc-prepare-patch
   With the source checkout, you might want to reproduce a bug against
index d808e7ab90b91f90e4fe7dd7d3718d1c8c78702e..7550310935ed8882658be600285d867b7cac6645 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1573,6 +1573,11 @@ packages checked out using 'package-vc-install'.
 This command helps you compose an email for sending bug reports to
 package maintainers.
 
++++
+*** New user option 'package-vc-selected-packages'
+By customising this user option you can specify specific packages to
+install.
+
 ** Emacs Sessions (Desktop)
 
 +++
index 3eac55ba5443079859e455d273dd2070fa3eb830..b18b5b1e483791eec80688a4f0dc6faa38003d99 100644 (file)
@@ -103,13 +103,13 @@ symbol is used.  The value must be a member of
                            vc-handled-backends))
   :version "29.1")
 
-(defun package-vc--select-packages (sym val)
-  "Custom setter for `package-vc-selected-packages'.
-It will ensure that all the packages are installed as source
-packages.  Finally SYM is set to VAL."
-  (pcase-dolist (`(,(and (pred symbolp) name) . ,spec) val)
+(defun package-vc-ensure-packages ()
+  "Ensure source packages specified in `package-vc-selected-packages'."
+  (pcase-dolist (`(,(and (pred symbolp) name) . ,spec)
+                 package-vc-selected-packages)
     (let ((pkg-desc (cadr (assoc name package-alist #'string=))))
-      (unless (and name (package-installed-p name) (package-vc-p pkg-desc))
+      (unless (and name (package-installed-p name)
+                   (package-vc-p pkg-desc))
         (cond
          ((null spec)
           (package-vc-install name))
@@ -117,8 +117,7 @@ packages.  Finally SYM is set to VAL."
           (package-vc-install name nil spec))
          ((listp spec)
           (package-vc--archives-initialize)
-          (package-vc--unpack pkg-desc spec))))))
-  (custom-set-default sym val))
+          (package-vc--unpack pkg-desc spec)))))))
 
 ;;;###autoload
 (defcustom package-vc-selected-packages '()
@@ -134,7 +133,8 @@ is a symbol designating the package and SPEC is one of:
   specification.
 
 This user option differs from `package-selected-packages' in that
-it is meant to be specified manually."
+it is meant to be specified manually.  You can also use the
+function `package-vc-selected-packages' to apply the changes."
   :type '(alist :tag "List of ensured packages"
                 :key-type (symbol :tag "Package")
                 :value-type
@@ -145,7 +145,9 @@ it is meant to be specified manually."
                                          (:lisp-dir string)
                                          (:main-file string)
                                          (:vc-backend symbol)))))
-  :set #'package-vc--select-packages
+  :set (lambda (sym val)
+         (custom-set-default sym val)
+         (package-vc-ensure-packages))
   :version "29.1")
 
 (defvar package-vc--archive-spec-alist nil