~ruther/guix-local

22572d56cb3da5b176b5b5697d4e8e71067eab74 — Ludovic Courtès 10 years ago acb01e3
store: 'path-info-deriver' is #f when there is no deriver.

* guix/store.scm (read-path-info): Use #f when we get the empty string
for DERIVER.
* guix/scripts/publish.scm (narinfo-string): Adjust accordingly.
* tests/store.scm ("path-info-deriver"): New test.
3 files changed, 20 insertions(+), 3 deletions(-)

M guix/scripts/publish.scm
M guix/store.scm
M tests/store.scm
M guix/scripts/publish.scm => guix/scripts/publish.scm +1 -1
@@ 164,7 164,7 @@ References: ~a~%"
                             store-path url hash size references))
         ;; Do not render a "Deriver" or "System" line if we are rendering
         ;; info for a derivation.
         (info       (if (string-null? deriver)
         (info       (if (not deriver)
                         base-info
                         (catch 'system-error
                           (lambda ()

M guix/store.scm => guix/store.scm +4 -2
@@ 242,14 242,16 @@
(define-record-type <path-info>
  (path-info deriver hash references registration-time nar-size)
  path-info?
  (deriver path-info-deriver)
  (deriver path-info-deriver)                     ;string | #f
  (hash path-info-hash)
  (references path-info-references)
  (registration-time path-info-registration-time)
  (nar-size path-info-nar-size))

(define (read-path-info p)
  (let ((deriver  (read-store-path p))
  (let ((deriver  (match (read-store-path p)
                    ("" #f)
                    (x  x)))
        (hash     (base16-string->bytevector (read-string p)))
        (refs     (read-store-path-list p))
        (registration-time (read-int p))

M tests/store.scm => tests/store.scm +15 -0
@@ 856,6 856,21 @@
                  (string->utf8
                   (call-with-output-string (cut write-file item <>))))))))

(test-assert "path-info-deriver"
  (let* ((b (add-text-to-store %store "build" "echo $foo > $out" '()))
         (s (add-to-store %store "bash" #t "sha256"
                          (search-bootstrap-binary "bash"
                                                   (%current-system))))
         (d (derivation %store "the-thing"
                        s `("-e" ,b)
                        #:env-vars `(("foo" . ,(random-text)))
                        #:inputs `((,b) (,s))))
         (o (derivation->output-path d)))
    (and (build-derivations %store (list d))
         (not (path-info-deriver (query-path-info %store b)))
         (string=? (derivation-file-name d)
                   (path-info-deriver (query-path-info %store o))))))

(test-end "store")