]> git.eshelyaron.com Git - emacs.git/commitdiff
Check if package-archives are valid when pinning
authorPeter Hoeg <peter@speartail.com>
Wed, 17 Dec 2014 20:34:49 +0000 (04:34 +0800)
committerPeter Hoeg <peter@speartail.com>
Wed, 17 Dec 2014 20:34:49 +0000 (04:34 +0800)
lisp/use-package/use-package.el

index 83b5bd3f08d61e06aec60ccf97cad0940ad4d2c5..950d0bf0ec2f9912cad70c01c318fd423f5db140 100644 (file)
@@ -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))