From: Peter Hoeg Date: Wed, 17 Dec 2014 20:34:49 +0000 (+0800) Subject: Check if package-archives are valid when pinning X-Git-Tag: emacs-29.0.90~1306^2~15^2~404^2~6^2 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=b3bf1b2587;p=emacs.git Check if package-archives are valid when pinning --- diff --git a/lisp/use-package/use-package.el b/lisp/use-package/use-package.el index 83b5bd3f08d..950d0bf0ec2 100644 --- a/lisp/use-package/use-package.el +++ b/lisp/use-package/use-package.el @@ -142,9 +142,25 @@ Return nil when the queue is empty." (defun use-package-pin-package (package archive) "Pin PACKAGE to ARCHIVE." (unless (boundp 'package-pinned-packages) - (setq package-pinned-packages '())) - (add-to-list 'package-pinned-packages (cons package archive)) - (package-initialize t)) + (setq package-pinned-packages ())) + (let ((archive-symbol (if (symbolp archive) archive (intern archive))) + (archive-name (if (stringp archive) archive (symbol-name archive)))) + (if (use-package--archive-exists-p archive-symbol) + (add-to-list 'package-pinned-packages (cons package archive-name)) + (error (message "Archive '%s' requested for package '%s' is not available." archive-name package))) + (package-initialize t))) + +(defun use-package--archive-exists-p (archive) + "Check if a given ARCHIVE is enabled. + +ARCHIVE can be a string or a symbol or 'manual to indicate a manually updated package." + (if (member archive '(manual "manual")) + 't + (let ((valid nil)) + (dolist (pa package-archives) + (when (member archive (list (car pa) (intern (car pa)))) + (setq valid 't))) + valid))) (defun use-package-ensure-elpa (package) (when (not (package-installed-p package))