~ruther/guix-local

fc93e309196ee8009a975b4c0acf712f54581a93 — Ludovic Courtès 11 years ago 31a123f
derivations: Add 'offloadable-derivation?' and 'substitutable-derivation?'.

* guix/derivations.scm (offloadable-derivation?,
  substitutable-derivation?): New procedures.
* tests/derivations.scm ("offloadable-derivation?"): New test.
2 files changed, 20 insertions(+), 0 deletions(-)

M guix/derivations.scm
M tests/derivations.scm
M guix/derivations.scm => guix/derivations.scm +14 -0
@@ 57,6 57,8 @@
            derivation-input-output-paths

            fixed-output-derivation?
            offloadable-derivation?
            substitutable-derivation?
            derivation-hash

            read-derivation


@@ 156,6 158,18 @@ download with a fixed hash (aka. `fetchurl')."
                     read-derivation))
                 inputs)))))

(define (offloadable-derivation? drv)
  "Return true if DRV can be offloaded, false otherwise."
  (match (assoc "preferLocalBuild"
                (derivation-builder-environment-vars drv))
    (("preferLocalBuild" . "1") #f)
    (_ #t)))

(define substitutable-derivation?
  ;; Return #t if the derivation can be substituted.  Currently the two are
  ;; synonymous, see <http://bugs.gnu.org/18747>.
  offloadable-derivation?)

(define* (derivation-prerequisites-to-build store drv
                                            #:key
                                            (outputs

M tests/derivations.scm => tests/derivations.scm +6 -0
@@ 173,6 173,12 @@
                (= (stat:ino (lstat file1))
                   (stat:ino (lstat file2))))))))

(test-assert "offloadable-derivation?"
  (and (offloadable-derivation? (derivation %store "foo" %bash '()))
       (not (offloadable-derivation?
             (derivation %store "foo" %bash '()
                         #:local-build? #t)))))

(test-assert "fixed-output-derivation?"
  (let* ((builder    (add-text-to-store %store "my-fixed-builder.sh"
                                        "echo -n hello > $out" '()))