]> git.eshelyaron.com Git - emacs.git/commitdiff
Move :pin out of macro expansion phase
authorIvan Goncharov <kovrik0@gmail.com>
Tue, 5 Jan 2016 22:15:22 +0000 (11:15 +1300)
committerIvan Goncharov <kovrik0@gmail.com>
Tue, 5 Jan 2016 22:15:22 +0000 (11:15 +1300)
lisp/use-package/use-package.el

index b88749d357be379f69cef3dafd79854c1a8acaaf..d5226e3a9d3babd2cb33c134cd75a6c60d60aadb 100644 (file)
@@ -419,23 +419,23 @@ manually updated package."
   (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)
-        (push (cons package archive-name) package-pinned-packages)
+        (add-to-list 'package-pinned-packages (cons package archive-name) t)
       (error "Archive '%s' requested for package '%s' is not available."
              archive-name package))
     (package-initialize t)))
 
 (defun use-package-handler/:pin (name keyword archive-name rest state)
-  (let ((body (use-package-process-keywords name rest state)))
-    ;; This happens at macro expansion time, not when the expanded code is
-    ;; compiled or evaluated.
-    (if (null archive-name)
-        body
-      (use-package-pin-package name archive-name)
-      (use-package-concat
-       body
-       `((push '(,(use-package-as-symbol name) . ,archive-name)
-               package-pinned-packages)
-         t)))))
+  (let ((body (use-package-process-keywords name rest state))
+        (pin-form (if archive-name
+                      `(use-package-pin-package ',name ,archive-name))))
+    ;; We want to avoid pinning packages when the `use-package'
+    ;; macro is being macro-expanded by elisp completion (see
+    ;; `lisp--local-variables'), but still do pin packages when
+    ;; byte-compiling to avoid requiring `package' at runtime.
+    (if (bound-and-true-p byte-compile-current-file)
+        (eval pin-form)              ; Eval when byte-compiling,
+      (push pin-form body))          ; or else wait until runtime.
+    body))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;