Racket uses checksums to test if it needs to recompile its source files to bytecode. If Racket is updated by grafting, the source and bytecode files get updated, but the checksum stays the same. Since the checksum no longer matches the source file, Racket tries to regenerate the bytecode and write it to the store, causing errors because the store is immutable. This patch makes Racket ignore checksums for files in the store. See for details. --- collects/compiler/private/cm-minimal.rkt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/collects/compiler/private/cm-minimal.rkt b/collects/compiler/private/cm-minimal.rkt index a5a5407..15af6b8 100644 --- a/collects/compiler/private/cm-minimal.rkt +++ b/collects/compiler/private/cm-minimal.rkt @@ -7,6 +7,7 @@ racket/list racket/path racket/promise + racket/string openssl/sha1 setup/collects compiler/compilation-path @@ -543,6 +544,10 @@ #f (list src-hash recorded-hash))) +(define (store-reference? path) + (let ([store-prefix (or (getenv "NIX_STORE") "/gnu/store")]) + (string-prefix? (path->string path) store-prefix))) + (define (rkt->ss p) (if (path-has-extension? p #".rkt") (path-replace-extension p #".ss") @@ -595,7 +600,8 @@ (trace-printf "newer src... ~a > ~a" path-time path-zo-time) ;; If `sha1-only?', then `maybe-compile-zo' returns a #f or thunk: (maybe-compile-zo sha1-only? deps path->mode roots path orig-path read-src-syntax up-to-date collection-cache new-seen)] - [(different-source-sha1-and-dep-recorded path deps) + [(and (not (store-reference? path)) + (different-source-sha1-and-dep-recorded path deps)) => (lambda (difference) (trace-printf "different src hash... ~a" difference) ;; If `sha1-only?', then `maybe-compile-zo' returns a #f or thunk: -- 2.18.0 ?id=1dc4c043beb479e06a95a54a2475025890f51cfc'>root/nix/libstore/globals.hh
AgeCommit message (Expand)Author
2019-02-04daemon: Remove unused 'NIX_DATA_DIR' environment variable....Ludovic Courtès
2018-10-15daemon: Support multiplexed build output....Ludovic Courtès
2018-10-02daemon: Remove unused 'Settings' fields....Ludovic Courtès
2018-03-30daemon: Remove dead code....Ludovic Courtès
2018-01-07daemon: Make libbz2 an optional dependency....Ludovic Courtès
2018-01-07daemon: Add gzip log compression....Ludovic Courtès
2016-12-09daemon: Set ownership of kept build directories to the calling user....Hartmut Goebel
2015-12-08daemon: Allow builds to be repeated....Eelco Dolstra