1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-27 07:37:33 +00:00

Move :pin out of macro expansion phase

This commit is contained in:
Ivan Goncharov 2016-01-06 11:15:22 +13:00
parent ed2e85e4a7
commit 308e4e3f2c

View 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))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;