From 5b4bb8cd8af4af8e8da9adeefe0351c2e628678a Mon Sep 17 00:00:00 2001 From: Puck Meerburg Date: Thu, 1 May 2025 13:20:05 +0000 Subject: [PATCH] (zilch nix drv): fix serialized derivation format caching This was broken at some point, and I'm not sure if this is a load-bearing bug. Let's find out. --- core/src/nix/drv.sld | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/core/src/nix/drv.sld b/core/src/nix/drv.sld index c5da1cf..195fb45 100644 --- a/core/src/nix/drv.sld +++ b/core/src/nix/drv.sld @@ -71,10 +71,11 @@ (serialized derivation-cached-data-serialized set-derivation-cached-data-serialized!)) (define-record-printer ( drv out) - (fprintf out "#" + (fprintf out "#" (derivation-cached-data-path drv) (derivation-cached-data-modulo-hash drv) - (derivation-cached-data-is-deferred 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. @@ -498,14 +499,14 @@ (define derivation-serialize (case-lambda ((drv) (derivation-serialize drv (current-output-port))) - ((drv port) (derivation-serialize drv port (derivation-input-drvs drv))) + ((drv port) + (if (derivation-cached-data-serialized (derivation-cached-data drv)) + (write-bytevector (derivation-cached-data-serialized (derivation-cached-data drv)) port) + (call-with-port (open-output-bytevector) + (lambda (nport) + (derivation-serialize-internal drv nport (derivation-input-drvs drv)) + (set-derivation-cached-data-serialized! (derivation-cached-data drv) (get-output-bytevector nport)) + (write-bytevector (get-output-bytevector nport) port))))) ((drv port masked) - (if masked (derivation-serialize-internal drv port masked) - (if (derivation-cached-data-serialized (derivation-cached-data drv)) - (write-bytevector (derivation-cached-data-serialized (derivation-cached-data drv)) port) - (call-with-port (open-output-bytevector) - (lambda (nport) - (derivation-serialize-internal drv nport #f) - (set-derivation-cached-data-serialized! (derivation-cached-data drv) (get-output-bytevector nport)) - (write-bytevector (get-output-bytevector nport) port)))))))))) + (derivation-serialize-internal drv port masked))))))