]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow updating source packages
authorPhilip Kaludercic <philipk@posteo.net>
Thu, 11 Aug 2022 11:23:51 +0000 (13:23 +0200)
committerPhilip Kaludercic <philipk@posteo.net>
Thu, 11 Aug 2022 11:23:51 +0000 (13:23 +0200)
* lisp/emacs-lisp/package-vc.el (package-vc-update): Add new function.
* lisp/emacs-lisp/package.el (package-update): Use 'package-vc-update'.

lisp/emacs-lisp/package-vc.el
lisp/emacs-lisp/package.el

index 0f5ee4305a8fdd76d450da721948b64694886810..04821d43c4a1edbbe051b45872292cdcfe560989 100644 (file)
@@ -227,6 +227,12 @@ The output is written out into PKG-FILE."
              t))))
    package-archive-contents))
 
+(defun package-vc-update (pkg-desc)
+  "Attempt to update the packager PKG-DESC."
+  (let ((default-directory (package-desc-dir pkg-desc)))
+    (with-demoted-errors "Error during package update: %S"
+      (vc-pull))))
+
 (defun package-vc-fetch (name-or-url &optional name rev)
   "Fetch the source of NAME-OR-URL.
 If NAME-OR-URL is a URL, then the package will be downloaded from
index 1321c3728e857767440eff1e3fd8dc9479739338..1ee39f875296b095b4776d811fe34d3ba8e47287 100644 (file)
@@ -2194,17 +2194,22 @@ to install it but still mark it as selected."
           (message  "Package `%s' installed." name))
       (message "`%s' is already installed" name))))
 
+(declare-function package-vc-update "package-vc" (pkg))
+
 ;;;###autoload
 (defun package-update (name)
   "Update package NAME if a newer version exists."
   (interactive
    (list (completing-read
           "Update package: " (package--updateable-packages) nil t)))
-  (let ((package (if (symbolp name)
-                     name
-                   (intern name))))
-    (package-delete (cadr (assq package package-alist)) 'force)
-    (package-install package 'dont-select)))
+  (let* ((package (if (symbolp name)
+                      name
+                    (intern name)))
+         (pkg-desc (cadr (assq package package-alist))))
+    (if (eq (package-desc-kind pkg-desc) 'vc)
+        (package-vc-update pkg-desc)
+      (package-delete pkg-desc 'force)
+      (package-install package 'dont-select))))
 
 (defun package--updateable-packages ()
   ;; Initialize the package system to get the list of package