diff options
author | Arun Isaac | 2025-06-27 13:14:52 +0100 |
---|---|---|
committer | Arun Isaac | 2025-06-27 13:14:52 +0100 |
commit | 9c6b58d6a045c32116db9e01b5c76f40252ee4b0 (patch) | |
tree | afdac4df41c74f49334fb54a8367041c5d4eb244 | |
parent | 753805cb8e1bb35397c97315f3edf7981b2e73eb (diff) | |
download | ravanan-9c6b58d6a045c32116db9e01b5c76f40252ee4b0.tar.gz ravanan-9c6b58d6a045c32116db9e01b5c76f40252ee4b0.tar.lz ravanan-9c6b58d6a045c32116db9e01b5c76f40252ee4b0.zip |
* ravanan/store.scm (step-store-basename): Canonicalize inputs JSON.
* tests/store.scm: New file.
-rw-r--r-- | ravanan/store.scm | 3 | ||||
-rw-r--r-- | tests/store.scm | 80 |
2 files changed, 82 insertions, 1 deletions
diff --git a/ravanan/store.scm b/ravanan/store.scm index 9bd5bcc..ba66076 100644 --- a/ravanan/store.scm +++ b/ravanan/store.scm @@ -26,6 +26,7 @@ #:use-module (guix build utils) #:use-module (ravanan work command-line-tool) #:use-module (ravanan work monads) + #:use-module (ravanan work utils) #:use-module (ravanan work vectors) #:export (%store-files-directory %store-data-directory @@ -75,7 +76,7 @@ already exists, do nothing." (define (step-store-basename script inputs) "Return the basename in the store for files of CWL step with @var{script} and @var{inputs}." - (string-append (sha1-hash-sexp (cons script inputs)) + (string-append (sha1-hash-sexp (cons script (canonicalize-json inputs))) "-" (strip-store-file-name script))) diff --git a/tests/store.scm b/tests/store.scm new file mode 100644 index 0000000..f209583 --- /dev/null +++ b/tests/store.scm @@ -0,0 +1,80 @@ +;;; ravanan --- High-reproducibility CWL runner powered by Guix +;;; Copyright © 2025 Arun Isaac <arunisaac@systemreboot.net> +;;; +;;; This file is part of ravanan. +;;; +;;; ravanan is free software: you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation, either version 3 of the License, or +;;; (at your option) any later version. +;;; +;;; ravanan is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with ravanan. If not, see <https://www.gnu.org/licenses/>. + +(use-modules (srfi srfi-64) + (ravanan store)) + +(test-begin "store") + +(test-equal "step-store-files-directory must be insensitive to order of inputs" + (step-store-files-directory "/gnu/store/hl96c0xd19ngvl8rf4cyw452rpgqsi1b-foo" + '(("foo" . 1) + ("foobar" . 3) + ("bar" . (("aal" . 1) + ("vel" . 2)))) + "store") + (step-store-files-directory "/gnu/store/hl96c0xd19ngvl8rf4cyw452rpgqsi1b-foo" + '(("foo" . 1) + ("bar" . (("vel" . 2) + ("aal" . 1))) + ("foobar" . 3)) + "store")) + +(test-equal "step-store-data-file must be insensitive to order of inputs" + (step-store-data-file "/gnu/store/hl96c0xd19ngvl8rf4cyw452rpgqsi1b-foo" + '(("foo" . 1) + ("foobar" . 3) + ("bar" . (("aal" . 1) + ("vel" . 2)))) + "store") + (step-store-data-file "/gnu/store/hl96c0xd19ngvl8rf4cyw452rpgqsi1b-foo" + '(("foo" . 1) + ("bar" . (("vel" . 2) + ("aal" . 1))) + ("foobar" . 3)) + "store")) + +(test-equal "step-store-stdout-file must be insensitive to order of inputs" + (step-store-stdout-file "/gnu/store/hl96c0xd19ngvl8rf4cyw452rpgqsi1b-foo" + '(("foo" . 1) + ("foobar" . 3) + ("bar" . (("aal" . 1) + ("vel" . 2)))) + "store") + (step-store-stdout-file "/gnu/store/hl96c0xd19ngvl8rf4cyw452rpgqsi1b-foo" + '(("foo" . 1) + ("bar" . (("vel" . 2) + ("aal" . 1))) + ("foobar" . 3)) + "store")) + +(test-equal "step-store-stderr-file must be insensitive to order of inputs" + (step-store-stderr-file "/gnu/store/hl96c0xd19ngvl8rf4cyw452rpgqsi1b-foo" + '(("foo" . 1) + ("foobar" . 3) + ("bar" . (("aal" . 1) + ("vel" . 2)))) + "store") + (step-store-stderr-file "/gnu/store/hl96c0xd19ngvl8rf4cyw452rpgqsi1b-foo" + '(("foo" . 1) + ("bar" . (("vel" . 2) + ("aal" . 1))) + ("foobar" . 3)) + "store")) + +(test-end "store") |