diff options
author | Ludovic Courtès <ludo@gnu.org> | 2014-03-07 00:18:28 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2014-03-07 00:19:03 +0100 |
commit | cafb92d853c66b677111594727c586b87bbdd58f (patch) | |
tree | 277d0b271f5fee9faa572527f0729f15cb13df6c | |
parent | 4d01bd3c1ce8a986ebcf50c65a73cc87657f2360 (diff) | |
download | guix-cafb92d853c66b677111594727c586b87bbdd58f.tar guix-cafb92d853c66b677111594727c586b87bbdd58f.tar.gz |
store: 'export-paths' doesn't export references of the given files.
This fixes a regression introduced in
99fbddf9a623757e39d88bfb431f8f7d6f24b75b ("store: Change 'export-paths'
to always export in topological order.")
* guix/store.scm (export-paths): Define 'ordered' variable. Iterate
over it.
* tests/store.scm ("export/import paths, ensure topological order"): Add
'file0'. Adjust accordingly.
-rw-r--r-- | guix/store.scm | 7 | ||||
-rw-r--r-- | tests/store.scm | 7 |
2 files changed, 11 insertions, 3 deletions
diff --git a/guix/store.scm b/guix/store.scm index 54ed31cbbc..e92e159ff4 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -734,8 +734,13 @@ is raised if the set of paths read from PORT is not signed (as per (define* (export-paths server paths port #:key (sign? #t)) "Export the store paths listed in PATHS to PORT, in topological order, signing them if SIGN? is true." + (define ordered + ;; Sort PATHS, but don't include their references. + (filter (cut member <> paths) + (topologically-sorted server paths))) + (let ((s (nix-server-socket server))) - (let loop ((paths (topologically-sorted server paths))) + (let loop ((paths ordered)) (match paths (() (write-int 0 port)) diff --git a/tests/store.scm b/tests/store.scm index 7b0f3249d2..cc76ea5500 100644 --- a/tests/store.scm +++ b/tests/store.scm @@ -399,7 +399,9 @@ Deriver: ~a~%" files))))))) (test-assert "export/import paths, ensure topological order" - (let* ((file1 (add-text-to-store %store "foo" (random-text))) + (let* ((file0 (add-text-to-store %store "baz" (random-text))) + (file1 (add-text-to-store %store "foo" (random-text) + (list file0))) (file2 (add-text-to-store %store "bar" (random-text) (list file1))) (files (list file1 file2)) @@ -412,9 +414,10 @@ Deriver: ~a~%" (bytevector=? dump1 dump2) (let* ((source (open-bytevector-input-port dump1)) (imported (import-paths %store source))) + ;; DUMP1 should contain exactly FILE1 and FILE2, not FILE0. (and (equal? imported (list file1 file2)) (every file-exists? files) - (null? (references %store file1)) + (equal? (list file0) (references %store file1)) (equal? (list file1) (references %store file2))))))) (test-assert "import corrupt path" |