channels: Always provide a <channel-metadata> record.

This simplifies the code since one no longer needs to think about
whether '.guix-channel' was present.

* guix/channels.scm (read-channel-metadata): Always pass a string as the
first argument to 'channel-metadata'.
(read-channel-metadata-from-source): Always return a <channel-metadata>
record.
(channel-instance-dependencies): Remove now unneeded 'match'.
(standard-module-derivation): Assume DIRECTORY is never #f and contains
a leading slash.
* tests/channels.scm (channel-metadata-directory)
(channel-metadata-dependencies): New procedures.
("channel-instance-metadata returns #f if .guix-channel does not
exist"): Remove.
("channel-instance-metadata returns default if .guix-channel does not
exist"): New test.
(make-instance): Use 'write' instead of 'display' when creating
'.guix-channel'.
(instance--no-deps): Remove dependencies.
(instance--sub-directory): New variable.
("channel-instance-metadata and default dependencies")
("channel-instance-metadata and directory"): New tests.
("latest-channel-instances excludes duplicate channel dependencies"):
Expect 'channel-commit' to return a string and adjust accordingly.
This commit is contained in:
Ludovic Courtès 2019-07-17 00:41:10 +02:00
parent 5d9daa85b0
commit ce5d9ec875
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 41 additions and 31 deletions

View file

@ -42,9 +42,9 @@
(commit "cafebabe")
(spec #f))
(define instance-dir (mkdtemp! "/tmp/checkout.XXXXXX"))
(and spec
(with-output-to-file (string-append instance-dir "/.guix-channel")
(lambda _ (format #t "~a" spec))))
(when spec
(call-with-output-file (string-append instance-dir "/.guix-channel")
(lambda (port) (write spec port))))
(checkout->channel-instance instance-dir
#:commit commit
#:name name))
@ -55,12 +55,10 @@
'(channel (version 42) (dependencies whatever))))
(define instance--no-deps
(make-instance #:spec
'(channel
(version 0)
(dependencies
(channel
(name test-channel)
(url "https://example.com/test-channel"))))))
'(channel (version 0))))
(define instance--sub-directory
(make-instance #:spec
'(channel (version 0) (directory "modules"))))
(define instance--simple
(make-instance #:spec
'(channel
@ -87,11 +85,26 @@
(define channel-instance-metadata
(@@ (guix channels) channel-instance-metadata))
(define channel-metadata-directory
(@@ (guix channels) channel-metadata-directory))
(define channel-metadata-dependencies
(@@ (guix channels) channel-metadata-dependencies))
(test-equal "channel-instance-metadata returns #f if .guix-channel does not exist"
#f
(channel-instance-metadata instance--boring))
(test-equal "channel-instance-metadata returns default if .guix-channel does not exist"
'("/" ())
(let ((metadata (channel-instance-metadata instance--boring)))
(list (channel-metadata-directory metadata)
(channel-metadata-dependencies metadata))))
(test-equal "channel-instance-metadata and default dependencies"
'()
(channel-metadata-dependencies (channel-instance-metadata instance--no-deps)))
(test-equal "channel-instance-metadata and directory"
"/modules"
(channel-metadata-directory
(channel-instance-metadata instance--sub-directory)))
(test-equal "channel-instance-metadata rejects unsupported version"
1 ;line number in the generated '.guix-channel'
@ -141,7 +154,7 @@
("test" (values test-dir 'whatever))
(_ (values "/not-important" 'not-important)))))
(let ((instances (latest-channel-instances #f (list channel))))
(and (eq? 2 (length instances))
(and (= 2 (length instances))
(lset= eq?
'(test test-channel)
(map (compose channel-name channel-instance-channel)
@ -152,9 +165,9 @@
(and (eq? (channel-name
(channel-instance-channel instance))
'test-channel)
(eq? (channel-commit
(channel-instance-channel instance))
'abc1234)))
(string=? (channel-commit
(channel-instance-channel instance))
"abc1234")))
instances))))))
(test-assert "channel-instances->manifest"