]> git.eshelyaron.com Git - emacs.git/commitdiff
Add new command 'package-update'
authorLars Ingebrigtsen <larsi@gnus.org>
Tue, 3 May 2022 16:00:32 +0000 (18:00 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Tue, 3 May 2022 16:00:32 +0000 (18:00 +0200)
* doc/emacs/package.texi (Package Installation): Mention it.
* lisp/emacs-lisp/package.el (package-update): New command
(bug#18790).

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

index caa65bf33b66a1a2fbb635b82e0c21bdf060db0a..bd3ae2aa6ad51744e7ec911879e7651527663c84 100644 (file)
@@ -320,10 +320,13 @@ version of the package, a newer version is also installed.
 @section Package Installation
 
 @findex package-install
+@findex package-update
   Packages are most conveniently installed using the package menu
 (@pxref{Package Menu}), but you can also use the command @kbd{M-x
 package-install}.  This prompts for the name of a package with the
-@samp{available} status, then downloads and installs it.
+@samp{available} status, then downloads and installs it.  Similarly,
+if you want to update a package, you can use the @kbd{M-x
+package-update} command.
 
 @cindex package requirements
   A package may @dfn{require} certain other packages to be installed,
index f897158afd07a5ae1306c8fe4e2c6e3e7b31e19c..b6a473263300bd255d130a9da6bf2fce6fb4f35f 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -707,6 +707,13 @@ script that was used in ancient South Asia.  A new input method,
 \f
 * Changes in Specialized Modes and Packages in Emacs 29.1
 
+** Package
+
++++
+*** New command 'package-update'.
+This command allows you to upgrade packages without using 'M-x
+list-packages'.
+
 ** Miscellaneous
 
 +++
index 7f2c427c2ee8b9f9b32e25012e06586ca5af231d..58c1349e1c2944dfb886bba5cff51b7b0e27bae8 100644 (file)
@@ -2136,6 +2136,31 @@ to install it but still mark it as selected."
           (message  "Package `%s' installed." name))
       (message "`%s' is already installed" name))))
 
+;;;###autoload
+(defun package-update (name)
+  "Update package NAME if a newer version exists."
+  (interactive
+   (progn
+     ;; Initialize the package system to get the list of package
+     ;; symbols for completion.
+     (package--archives-initialize)
+     (list (completing-read
+            "Update package: "
+            (mapcar
+             #'car
+             (seq-filter
+              (lambda (elt)
+                (let ((available
+                       (assq (car elt) package-archive-contents)))
+                  (and available
+                       (version-list-<
+                        (package-desc-priority-version (cadr elt))
+                        (package-desc-priority-version (cadr available))))))
+              package-alist))
+            nil t))))
+  (package-delete (cadr (assq (intern name) package-alist)) 'force)
+  (package-install (intern name) 'dont-select))
+
 (defun package-strip-rcs-id (str)
   "Strip RCS version ID from the version string STR.
 If the result looks like a dotted numeric version, return it.