summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guix/store.scm7
-rw-r--r--tests/store.scm7
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"