mirror of
https://github.com/dimitri/el-get.git
synced 2024-09-30 05:29:52 +08:00
76 lines
2.9 KiB
EmacsLisp
76 lines
2.9 KiB
EmacsLisp
;; https://github.com/dimitri/el-get/issues/659
|
|
;;
|
|
;; Updatable properties in cached recipes
|
|
|
|
(require 'cl)
|
|
(require 'pp)
|
|
|
|
(el-get-register-method-alias :test :builtin)
|
|
|
|
(let* ((debug-on-error t)
|
|
(el-get-default-process-sync t)
|
|
(el-get-verbose t)
|
|
(el-get-auto-update-cached-recipes t)
|
|
(initial-source
|
|
`(:name a
|
|
:type test
|
|
:compile "."
|
|
:features a
|
|
:build (("sh" "-c"
|
|
,(format "echo %s > a.el"
|
|
(shell-quote-argument
|
|
(mapconcat
|
|
#'pp-to-string
|
|
'((provide 'a))
|
|
"\n")))))
|
|
:prepare (message "Preparing A")
|
|
:post-init (message "Post-init A")
|
|
:lazy nil))
|
|
(el-get-sources
|
|
(list initial-source))
|
|
(update-source
|
|
(append '(:features nil
|
|
:lazy t
|
|
:before (message "Before A")
|
|
:after (message "After A")
|
|
:load "a.el"
|
|
:library "a"
|
|
;; This should not cause an error because it matches the
|
|
;; cached value.
|
|
:prepare (message "Preparing A"))
|
|
initial-source))
|
|
(update-source-2
|
|
(append '(:lazy nil
|
|
:before (message "Before A2")
|
|
:after (progn (setq second-update-succeeded t)
|
|
(message "After A2")))
|
|
initial-source))
|
|
(invalid-update-source
|
|
(append '(:non-updatable-property value)
|
|
initial-source)))
|
|
;; Install A
|
|
(el-get 'sync 'a)
|
|
(require 'a)
|
|
(assert (featurep 'a) nil
|
|
"Package A should be installed and loaded")
|
|
(el-get-merge-properties-into-status update-source)
|
|
(assert (plist-get (el-get-read-package-status-recipe 'a) :lazy) nil
|
|
"New values should be merged into cached recipe")
|
|
|
|
(condition-case err
|
|
(progn
|
|
(el-get-merge-properties-into-status invalid-update-source)
|
|
(signal 'test-failure "Failed to raise error when trying to update non-updatable property."))
|
|
(error (message "Got error as expected. Error was:\n%S" err)))
|
|
;; Try the no-error option. Obviously, it shouldn't throw an error,
|
|
;; and it also shouldn't update anything.
|
|
(el-get-merge-properties-into-status invalid-update-source nil :noerror t)
|
|
(assert (null (plist-get (el-get-read-package-status-recipe 'a) :features)) nil
|
|
"Cached recipe should not be updated")
|
|
;; Verify that new properties were actually added.
|
|
(let ((el-get-sources (list update-source-2)))
|
|
(el-get-init 'a))
|
|
(assert (bound-and-true-p second-update-succeeded) nil
|
|
"el-get-init should auto-update the recipe")
|
|
)
|