diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el index a18841fb64d..1dc427d13ac 100644 --- a/lisp/emacs-lisp/package-vc.el +++ b/lisp/emacs-lisp/package-vc.el @@ -485,10 +485,21 @@ package-vc--unpack-1 lm--prepare-package-dependencies (nconc deps) (setq deps)))))) - (dolist (dep deps) - (cl-callf version-to-list (cadr dep))) - (setf (package-desc-reqs pkg-desc) deps) - (setf missing (package-vc-install-dependencies (delete-dups deps))) + (setf (package-desc-reqs pkg-desc) + (cl-loop with lessp = (lambda (a b) + (if (eq (car a) (car b)) + (version< (cadr b) (cadr b)) + (value< (car a) (car b)))) + ;; sort the dependency list to have the newest + ;; versions at the end of the list, so that when + ;; iterating through the list we only request to + ;; install the newest necessary dependency: + with deps = (sort deps :lessp lessp) + for rest on (cdr deps) + for (name vers) in deps + unless (assq name deps) + collect (list name (version-to-list vers)))) + (setf missing (package-vc-install-dependencies deps)) (setf missing (delq (assq (package-desc-name pkg-desc) missing) missing)))