(zilch nix drv): remove impure derivation support

This commit is contained in:
puck 2025-06-23 12:22:20 +00:00
parent c9e48ff1ba
commit c7acae633f

View file

@ -24,7 +24,7 @@
drv-is-fod drv-is-fod
derivation-serialize derivation-path-references derivation-path derivation-read read-drv-path 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 make-fixed-output-derivation make-input-addressed-derivation make-ca-derivation
modulo-hash-drv-contents) modulo-hash-drv-contents)
(begin (begin
@ -58,7 +58,7 @@
(derivation-output-recursive drvout))) (derivation-output-recursive drvout)))
(define (derivation-output-placeholder? drvout) (define (derivation-output-placeholder? drvout)
(member (derivation-output-hash drvout) '(floating impure))) (member (derivation-output-hash drvout) '(floating)))
(define (derivation-output-path-length drv output-name) (define (derivation-output-path-length drv output-name)
; /nix/store/a0a3n97c93ckfg3a920aqnycxdznbbmi-module-output ; /nix/store/a0a3n97c93ckfg3a920aqnycxdznbbmi-module-output
@ -179,9 +179,6 @@
(define first-output-is-hash (bytevector? (derivation-output-hash (cdr first-output)))) (define first-output-is-hash (bytevector? (derivation-output-hash (cdr first-output))))
(and (= (length outs) 1) (string=? first-output-id "out") first-output-is-hash)) (and (= (length outs) 1) (string=? first-output-id "out") first-output-is-hash))
(define (drv-is-impure drv)
(eq? (derivation-output-hash (cdr (car (derivation-outputs drv)))) 'impure))
(define (env-pair< left right) (define (env-pair< left right)
(string<? (car left) (car right))) (string<? (car left) (car right)))
@ -191,8 +188,6 @@
((drv-is-fod drv) ((drv-is-fod drv)
(let ((out (cdar (derivation-outputs drv)))) (let ((out (cdar (derivation-outputs drv))))
(string->utf8 (string-append "fixed:out:" (if (derivation-output-recursive out) "r:" "") (derivation-output-algo out) ":" (hex (derivation-output-hash out)) ":" (derivation-output-path out))))) (string->utf8 (string-append "fixed:out:" (if (derivation-output-recursive out) "r:" "") (derivation-output-algo out) ":" (hex (derivation-output-hash out)) ":" (derivation-output-path out)))))
((drv-is-impure drv)
(string->utf8 "impure"))
(else (else
(let ((remapped-input-drvs '()) (let ((remapped-input-drvs '())
(output-port (open-output-bytevector)) (output-port (open-output-bytevector))
@ -200,7 +195,7 @@
; TODO: this needs to merge output names too (depending on two distinct drvs with the same output hash requires merging their output names.) ; TODO: this needs to merge output names too (depending on two distinct drvs with the same output hash requires merging their output names.)
(for-each (lambda (l) (for-each (lambda (l)
(let* ((new-hash (hex (modulo-hash-drv (car l))))) (let* ((new-hash (hex (modulo-hash-drv (car l)))))
(set! is-deferred (or is-deferred (derivation-metadata-is-deferred (derivation-metadata (car l))) (drv-is-impure (car l)))) (set! is-deferred (or is-deferred (derivation-metadata-is-deferred (derivation-metadata (car l)))))
(unless (assoc new-hash remapped-input-drvs) (set! remapped-input-drvs (cons (cons new-hash (cdr l)) remapped-input-drvs))))) (unless (assoc new-hash remapped-input-drvs) (set! remapped-input-drvs (cons (cons new-hash (cdr l)) remapped-input-drvs)))))
(derivation-input-drvs drv)) (derivation-input-drvs drv))
(set! remapped-input-drvs (list-sort env-pair< remapped-input-drvs)) (set! remapped-input-drvs (list-sort env-pair< remapped-input-drvs))
@ -274,19 +269,6 @@
(sanity-check-drv drv) (sanity-check-drv drv)
drv) drv)
;; Creates an impure addressed derivation with specified parameters.
(define (make-impure-derivation name platform input-drvs input-srcs builder nenv noutputs)
(define compat-env (if (%derivation-compatible) `(("name" . ,name) ("builder" . ,(car builder)) ("system" . ,platform)) '()))
(define outputs (list-sort env-pair< (map (lambda (l) (cons l (make-derivation-output
#f 'impure "sha256" #t))) noutputs)))
(define env (list-sort env-pair< (filter-environment env (append compat-env (map (lambda (l) (cons (car l) (make-placeholder (car l)))) outputs)))))
(define drv (make-derivation name outputs input-drvs input-srcs platform (car builder) (cdr builder) env (make-derivation-metadata #f #f #t #f #f)))
(define pathhash (string-copy (derivation-path drv) (+ 1 (string-length (%store-dir))) (+ 33 (string-length (%store-dir)))))
(for-each (lambda (pair) (set-derivation-output-path! (cdr pair) (make-upstream-output-placeholder pathhash name (car pair)))) (derivation-outputs drv))
drv)
;; Creates a content-addressed derivation with specified parameters. ;; Creates a content-addressed derivation with specified parameters.
(define (make-ca-derivation name platform input-drvs input-srcs builder nenv noutputs) (define (make-ca-derivation name platform input-drvs input-srcs builder nenv noutputs)
(define compat-env (if (%derivation-compatible) `(("name" . ,name) ("builder" . ,(car builder)) ("system" . ,platform)) '())) (define compat-env (if (%derivation-compatible) `(("name" . ,name) ("builder" . ,(car builder)) ("system" . ,platform)) '()))
@ -305,11 +287,10 @@
(define output (cdr pair)) (define output (cdr pair))
(write-paren-list write-quoted-string (write-paren-list write-quoted-string
(list output-name (list output-name
(if (member (derivation-output-hash output) '(impure floating)) "" (or (derivation-output-path output) "")) (if (member (derivation-output-hash output) '(floating)) "" (or (derivation-output-path output) ""))
(string-append (if (derivation-output-recursive output) "r:" "") (or (derivation-output-algo output) "")) (string-append (if (derivation-output-recursive output) "r:" "") (or (derivation-output-algo output) ""))
(cond (cond
((bytevector? (derivation-output-hash output)) (hex (derivation-output-hash output))) ((bytevector? (derivation-output-hash output)) (hex (derivation-output-hash output)))
((eq? (derivation-output-hash output) 'impure) "impure")
((eq? (derivation-output-hash output) 'floating) "") ((eq? (derivation-output-hash output) 'floating) "")
((not (derivation-output-hash output)) "") ((not (derivation-output-hash output)) "")
(else (error "unknown derivation output hash type")))))) (else (error "unknown derivation output hash type"))))))