(zilch nix drv): deduplicate input sources

This commit is contained in:
puck 2025-06-23 12:22:20 +00:00
parent 99bb2501e3
commit 32673728f9

View file

@ -230,7 +230,8 @@
("builder" . ,(car builder)) ("builder" . ,(car builder))
("system" . ,platform) ("system" . ,platform)
. ,new-items))) . ,new-items)))
(make-derivation name (list (cons "out" output)) input-drvs input-srcs platform (car builder) (cdr builder) (list-sort env-pair< (append new-items env)) (make-derivation-metadata #f #f #f #f #f))) (define environment (list-sort env-pair< (filter-environment env new-items)))
(make-derivation name (list (cons "out" output)) input-drvs (list-sort string<? (filter-sources input-srcs)) platform (car builder) (cdr builder) environment (make-derivation-metadata #f #f #f #f #f)))
(define (sanity-check-drv orig-drv) (define (sanity-check-drv orig-drv)
(define tmp-drv (mask-derivation orig-drv)) (define tmp-drv (mask-derivation orig-drv))
@ -247,9 +248,15 @@
(for-each (lambda (kv) (unless (assoc (car kv) output string=?) (set! output (cons kv output)))) env-list) (for-each (lambda (kv) (unless (assoc (car kv) output string=?) (set! output (cons kv output)))) env-list)
output) output)
(define (filter-sources inputs)
(define output '())
(for-each (lambda (out) (unless (member out output string=?) (set! output (cons out output)))) inputs)
output)
;; Creates an input-addressed derivation with specified parameters. ;; Creates an input-addressed derivation with specified parameters.
(define (make-input-addressed-derivation name platform input-drvs input-srcs builder env outputs) (define (make-input-addressed-derivation name platform input-drvs input-srcs builder env outputs)
(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)) '()))
(set! input-srcs (list-sort string<? (filter-sources input-srcs)))
(define tmp-outputs (list-sort env-pair< (map (lambda (l) (cons l (make-derivation-output #f #f #f #f))) outputs))) (define tmp-outputs (list-sort env-pair< (map (lambda (l) (cons l (make-derivation-output #f #f #f #f))) outputs)))
(define tmp-env (list-sort env-pair< (filter-environment env (append compat-env (map (lambda (l) (cons l "")) outputs))))) (define tmp-env (list-sort env-pair< (filter-environment env (append compat-env (map (lambda (l) (cons l "")) outputs)))))
@ -287,7 +294,7 @@
#f 'floating "sha256" #t))) noutputs))) #f 'floating "sha256" #t))) noutputs)))
(define env (list-sort env-pair< (filter-environment nenv (append compat-env (map (lambda (l) (cons (car l) (make-placeholder (car l)))) outputs))))) (define env (list-sort env-pair< (filter-environment nenv (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 drv (make-derivation name outputs input-drvs (list-sort string<? (filter-sources 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))))) (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)) (for-each (lambda (pair) (set-derivation-output-path! (cdr pair) (make-upstream-output-placeholder pathhash name (car pair)))) (derivation-outputs drv))
drv) drv)