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. --- --- 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 file/sha1 setup/collects setup/cross-system @@ -940,6 +941,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") @@ -1015,6 +1020,7 @@ (trace-printf "newer src... ~a > ~a" path-time path-zo-time) (maybe-compile-zo deps path->mode roots path orig-path read-src-syntax up-to-date collection-cache new-seen #:trying-sha1? sha1-only?)] - [(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 for ~a..." difference path) (maybe-compile-zo deps path->mode roots path orig-path read-src-syntax up-to-date collection-cache new-seen
path: root/gnu/installer.scm
AgeCommit message (Expand)Author
2023-12-25gnu: Adjust to removing ed.scm and nano.scm...Efraim Flashner
2023-12-02gnu: Use ‘libc-utf8-locales-for-target’....Janneke Nieuwenhuizen