daemon: Read unsigned nar size and download size from substituter.
Fixes <https://issues.guix.gnu.org/51983>. Reported by Tobias Geerinckx-Rice <me@tobias.gr>. * nix/libstore/local-store.cc (LocalStore::querySubstitutablePathInfos): Expect 'unsigned long long' for 'downloadSize' and 'narSize'. * tests/store.scm ("substitute query and large size"): New test.master
parent
a4cbd31c5c
commit
1eb40a6dc4
|
@ -907,8 +907,8 @@ void LocalStore::querySubstitutablePathInfos(PathSet & paths, SubstitutablePathI
|
||||||
assertStorePath(p);
|
assertStorePath(p);
|
||||||
info.references.insert(p);
|
info.references.insert(p);
|
||||||
}
|
}
|
||||||
info.downloadSize = getIntLineFromSubstituter<long long>(run);
|
info.downloadSize = getIntLineFromSubstituter<unsigned long long>(run);
|
||||||
info.narSize = getIntLineFromSubstituter<long long>(run);
|
info.narSize = getIntLineFromSubstituter<unsigned long long>(run);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -942,6 +942,40 @@
|
||||||
(build-derivations s (list d))
|
(build-derivations s (list d))
|
||||||
#f))))))
|
#f))))))
|
||||||
|
|
||||||
|
(test-equal "substitute query and large size"
|
||||||
|
(+ 100 (expt 2 63)) ;<https://issues.guix.gnu.org/51983>
|
||||||
|
(with-store s
|
||||||
|
(let* ((size (+ 100 (expt 2 63))) ;does not fit in signed 'long long'
|
||||||
|
(item (string-append (%store-prefix)
|
||||||
|
"/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-bad-size")))
|
||||||
|
;; Create fake substituter data, to be read by 'guix substitute'.
|
||||||
|
(call-with-output-file (string-append (%substitute-directory)
|
||||||
|
"/" (store-path-hash-part item)
|
||||||
|
".narinfo")
|
||||||
|
(lambda (port)
|
||||||
|
(format port "StorePath: ~a
|
||||||
|
URL: http://example.org
|
||||||
|
Compression: none
|
||||||
|
NarSize: ~a
|
||||||
|
NarHash: sha256:0fj9vhblff2997pi7qjj7lhmy7wzhnjwmkm2hmq6gr4fzmg10s0w
|
||||||
|
References:
|
||||||
|
System: x86_64-linux~%"
|
||||||
|
item size)))
|
||||||
|
|
||||||
|
;; Remove entry from the local cache.
|
||||||
|
(false-if-exception
|
||||||
|
(delete-file-recursively (string-append (getenv "XDG_CACHE_HOME")
|
||||||
|
"/guix/substitute")))
|
||||||
|
|
||||||
|
;; Make sure 'guix substitute' correctly communicates the above
|
||||||
|
;; data.
|
||||||
|
(set-build-options s #:use-substitutes? #t
|
||||||
|
#:substitute-urls (%test-substitute-urls))
|
||||||
|
(match (pk 'spi (substitutable-path-info s (list item)))
|
||||||
|
(((? substitutable? s))
|
||||||
|
(and (equal? (substitutable-path s) item)
|
||||||
|
(substitutable-nar-size s)))))))
|
||||||
|
|
||||||
(test-assert "export/import several paths"
|
(test-assert "export/import several paths"
|
||||||
(let* ((texts (unfold (cut >= <> 10)
|
(let* ((texts (unfold (cut >= <> 10)
|
||||||
(lambda _ (random-text))
|
(lambda _ (random-text))
|
||||||
|
|
Reference in New Issue