summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/package.el
diff options
context:
space:
mode:
authorPhilip Kaludercic <philipk@posteo.net>2022-08-11 13:23:51 +0200
committerPhilip Kaludercic <philipk@posteo.net>2022-08-11 13:23:51 +0200
commitf5bb6b01318fe3a21493992e94908cf685e9b26b (patch)
treeeeeebdc4ca8b94fcdb322bdbcbd6aa85600ef5ca /lisp/emacs-lisp/package.el
parent9ddc23cd3438cba85b8a41e78d335c0d5071a212 (diff)
downloademacs-f5bb6b01318fe3a21493992e94908cf685e9b26b.tar.gz
emacs-f5bb6b01318fe3a21493992e94908cf685e9b26b.tar.bz2
emacs-f5bb6b01318fe3a21493992e94908cf685e9b26b.zip
Allow updating source packages
* lisp/emacs-lisp/package-vc.el (package-vc-update): Add new function. * lisp/emacs-lisp/package.el (package-update): Use 'package-vc-update'.
Diffstat (limited to 'lisp/emacs-lisp/package.el')
-rw-r--r--lisp/emacs-lisp/package.el15
1 files changed, 10 insertions, 5 deletions
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 1321c3728e8..1ee39f87529 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -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