diff --git a/core/src/nix/drv.sld b/core/src/nix/drv.sld index 5234f60..20c54cc 100644 --- a/core/src/nix/drv.sld +++ b/core/src/nix/drv.sld @@ -19,7 +19,9 @@ derivation-name derivation-outputs derivation-input-drvs derivation-input-src derivation-system derivation-builder derivation-args derivation-env derivation-equal? - + + derivation-meta set-derivation-meta! + derivation-serialize derivation-path-references derivation-path derivation-read read-drv-path make-fixed-output-derivation make-input-addressed-derivation make-impure-derivation make-ca-derivation modulo-hash-drv-contents) @@ -46,43 +48,50 @@ (hash derivation-output-hash) (algo derivation-output-algo) (recursive derivation-output-recursive)) - + (define-record-printer ( drvout out) (fprintf out "#" (derivation-output-path drvout) (derivation-output-hash drvout) (derivation-output-algo drvout) (derivation-output-recursive drvout))) - + (define (derivation-output-placeholder? drvout) (member (derivation-output-hash drvout) '(floating impure))) - + (define (derivation-output-path-length drv output-name) ; /nix/store/a0a3n97c93ckfg3a920aqnycxdznbbmi-module-output (+ (string-length (%store-dir)) 34 (string-length (derivation-name drv)) (if (string=? output-name "out") 0 (+ 1 (string-length output-name))))) ;; Internal use; stores the precalculated .drv path and modulo hash. - (define-record-type - (make-derivation-cached-data path modulo-hash is-deferred serialized) + (define-record-type + (make-derivation-metadata path modulo-hash is-deferred serialized meta) derivation-cached-data? - (path derivation-cached-data-path set-derivation-cached-data-path!) - (modulo-hash derivation-cached-data-modulo-hash set-derivation-cached-data-modulo-hash!) - (is-deferred derivation-cached-data-is-deferred set-derivation-cached-data-is-deferred!) - (serialized derivation-cached-data-serialized set-derivation-cached-data-serialized!)) + (path derivation-metadata-path set-derivation-metadata-path!) + (modulo-hash derivation-metadata-modulo-hash set-derivation-metadata-modulo-hash!) + (is-deferred derivation-metadata-is-deferred set-derivation-metadata-is-deferred!) + (serialized derivation-metadata-serialized set-derivation-metadata-serialized!) + (meta derivation-metadata-meta set-derivation-metadata-meta!)) + + + (define (derivation-meta drv) + (derivation-metadata-meta (derivation-metadata drv))) + (define (set-derivation-meta! drv meta) + (set-derivation-metadata-meta! (derivation-metadata drv) meta)) + + (define-record-printer ( drv out) + (fprintf out "#" + (derivation-metadata-path drv) + (derivation-metadata-modulo-hash drv) + (derivation-metadata-is-deferred drv) + (not (not (derivation-metadata-serialized drv))))) - (define-record-printer ( drv out) - (fprintf out "#" - (derivation-cached-data-path drv) - (derivation-cached-data-modulo-hash drv) - (derivation-cached-data-is-deferred drv) - (not (not (derivation-cached-data-serialized drv))))) - ;; An entire derivation. ;; `outputs` is stored as an alist of output name to `` object. ;; `input-drvs` is stored as an alist of `` to a (sorted) list of its outputs that are used. ;; The `outputs`, `input-drvs`, `input-src`, and `env` are expected to be sorted. (define-record-type - (make-derivation name outputs input-drvs input-src system builder args env cached-data) + (make-derivation name outputs input-drvs input-src system builder args env metadata) derivation? (name derivation-name) @@ -99,13 +108,13 @@ (args derivation-args) (env derivation-env) - (cached-data derivation-cached-data)) + (metadata derivation-metadata)) (define is-printing-drv (make-parameter #f)) (define-record-printer ( drv out) (define was-printing-drv (is-printing-drv)) (parameterize ((is-printing-drv #t)) - (fprintf out "#" + (fprintf out "#" (derivation-name drv) (derivation-outputs drv) (if was-printing-drv (map derivation-name (derivation-input-drvs drv)) (derivation-input-drvs drv)) @@ -114,7 +123,7 @@ (derivation-builder drv) (derivation-args drv) (derivation-env drv) - (derivation-cached-data drv)))) + (derivation-metadata drv)))) (define (write-delim-list start end fn val port) (write-char start port) @@ -147,7 +156,7 @@ (cons (car l) "") l)) env)) - + ;; Return a copy of the received ``, but with the outputs masked out. (define (mask-derivation drv) (make-derivation @@ -159,7 +168,7 @@ (derivation-builder drv) (derivation-args drv) (mask-env (derivation-env drv) (derivation-outputs drv)) - (make-derivation-cached-data #f #f #f #f))) + (make-derivation-metadata #f #f #f #f #f))) ;; Returns whether this `` is considered fixed-output by Nix or not. (define (drv-is-fod drv) @@ -174,7 +183,7 @@ (define (env-pair< left right) (string