Archived
1
0
Fork 0

store: Add 'build-things'.

* guix/store.scm (operation-id): Rename 'build-derivations' to
  'build-things', as per Nix commit 1aba0bf0.
  (build-derivations): Rename to...
  (build-things): ... this.  Keep 'build-derivations' as an alias.
  (build): New procedure.
* tests/store.scm ("build-things with output path",
  "substitute + build-things with output path"): New tests.
This commit is contained in:
Ludovic Courtès 2015-02-02 12:25:34 +01:00
parent e6c8839c18
commit abac874b22
2 changed files with 51 additions and 3 deletions

View file

@ -62,6 +62,8 @@
hash-part->path hash-part->path
add-text-to-store add-text-to-store
add-to-store add-to-store
build-things
build
build-derivations build-derivations
add-temp-root add-temp-root
add-indirect-root add-indirect-root
@ -140,7 +142,7 @@
(query-referrers 6) (query-referrers 6)
(add-to-store 7) (add-to-store 7)
(add-text-to-store 8) (add-text-to-store 8)
(build-derivations 9) (build-things 9)
(ensure-path 10) (ensure-path 10)
(add-temp-root 11) (add-temp-root 11)
(add-indirect-root 12) (add-indirect-root 12)
@ -573,11 +575,16 @@ kept. HASH-ALGO must be a string such as \"sha256\"."
(hash-set! cache args path) (hash-set! cache args path)
path)))))) path))))))
(define-operation (build-derivations (string-list derivations)) (define-operation (build-things (string-list things))
"Build DERIVATIONS, and return when the worker is done building them. "Build THINGS, a list of store items which may be either '.drv' files or
outputs, and return when the worker is done building them. Elements of THINGS
that are not derivations can only be substituted and not built locally.
Return #t on success." Return #t on success."
boolean) boolean)
;; Deprecated name for 'build-things'.
(define build-derivations build-things)
(define-operation (add-temp-root (store-path path)) (define-operation (add-temp-root (store-path path))
"Make PATH a temporary root for the duration of the current session. "Make PATH a temporary root for the duration of the current session.
Return #t." Return #t."
@ -907,6 +914,10 @@ permission bits are kept."
recursive? "sha256" file) recursive? "sha256" file)
store))) store)))
(define build
;; Monadic variant of 'build-things'.
(store-lift build-things))
(define %guile-for-build (define %guile-for-build
;; The derivation of the Guile to be used within the build environment, ;; The derivation of the Guile to be used within the build environment,
;; when using 'gexp->derivation' and co. ;; when using 'gexp->derivation' and co.

View file

@ -306,6 +306,24 @@
(null? (substitutable-paths s o)) (null? (substitutable-paths s o))
(null? (substitutable-path-info s o)))))) (null? (substitutable-path-info s o))))))
(test-assert "build-things with output path"
(with-store s
(let* ((c (random-text)) ;contents of the output
(d (build-expression->derivation
s "substitute-me"
`(call-with-output-file %output
(lambda (p)
(display ,c p)))
#:guile-for-build
(package-derivation s %bootstrap-guile (%current-system))))
(o (derivation->output-path d)))
(set-build-options s #:use-substitutes? #f)
;; Pass 'build-things' the output file name, O. However, since there
;; are no substitutes for O, it will just do nothing.
(build-things s (list o))
(not (valid-path? s o)))))
(test-skip (if (getenv "GUIX_BINARY_SUBSTITUTE_URL") 0 1)) (test-skip (if (getenv "GUIX_BINARY_SUBSTITUTE_URL") 0 1))
(test-assert "substitute query" (test-assert "substitute query"
@ -350,6 +368,25 @@
(build-derivations s (list d)) (build-derivations s (list d))
(equal? c (call-with-input-file o get-string-all))))))) (equal? c (call-with-input-file o get-string-all)))))))
(test-assert "substitute + build-things with output path"
(with-store s
(let* ((c (random-text)) ;contents of the output
(d (build-expression->derivation
s "substitute-me"
`(call-with-output-file %output
(lambda (p)
(exit 1) ;would actually fail
(display ,c p)))
#:guile-for-build
(package-derivation s %bootstrap-guile (%current-system))))
(o (derivation->output-path d)))
(with-derivation-substitute d c
(set-build-options s #:use-substitutes? #t)
(and (has-substitutes? s o)
(build-things s (list o)) ;give the output path
(valid-path? s o)
(equal? c (call-with-input-file o get-string-all)))))))
(test-assert "substitute, corrupt output hash" (test-assert "substitute, corrupt output hash"
;; Tweak the substituter into installing a substitute whose hash doesn't ;; Tweak the substituter into installing a substitute whose hash doesn't
;; match the one announced in the narinfo. The daemon must notice this and ;; match the one announced in the narinfo. The daemon must notice this and