50 lines
2.0 KiB
Diff
50 lines
2.0 KiB
Diff
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 <https://debbugs.gnu.org/30680> 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
|
|
|