channels: Add 'latest-channel-instance'.

* guix/channels.scm (latest-channel-instance): New procedure.
(latest-channel-instances): Use it.
This commit is contained in:
Ludovic Courtès 2020-05-06 22:18:52 +02:00
parent c263cfdcde
commit 4ba425060a
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -199,6 +199,14 @@ (define (channel-instance-dependencies instance)
channel INSTANCE." channel INSTANCE."
(channel-metadata-dependencies (channel-instance-metadata instance))) (channel-metadata-dependencies (channel-instance-metadata instance)))
(define (latest-channel-instance store channel)
"Return the latest channel instance for CHANNEL."
(let-values (((checkout commit)
(latest-repository-commit store (channel-url channel)
#:ref (channel-reference
channel))))
(channel-instance channel commit checkout)))
(define* (latest-channel-instances store channels #:optional (previous-channels '())) (define* (latest-channel-instances store channels #:optional (previous-channels '()))
"Return a list of channel instances corresponding to the latest checkouts of "Return a list of channel instances corresponding to the latest checkouts of
CHANNELS and the channels on which they depend. PREVIOUS-CHANNELS is a list CHANNELS and the channels on which they depend. PREVIOUS-CHANNELS is a list
@ -224,20 +232,16 @@ (define-values (resulting-channels instances)
(G_ "Updating channel '~a' from Git repository at '~a'...~%") (G_ "Updating channel '~a' from Git repository at '~a'...~%")
(channel-name channel) (channel-name channel)
(channel-url channel)) (channel-url channel))
(let-values (((checkout commit) (let ((instance (latest-channel-instance store channel)))
(latest-repository-commit store (channel-url channel) (let-values (((new-instances new-channels)
#:ref (channel-reference (latest-channel-instances
channel)))) store
(let ((instance (channel-instance channel commit checkout))) (channel-instance-dependencies instance)
(let-values (((new-instances new-channels) previous-channels)))
(latest-channel-instances (values (append (cons channel new-channels)
store previous-channels)
(channel-instance-dependencies instance) (append (cons instance new-instances)
previous-channels))) instances)))))))
(values (append (cons channel new-channels)
previous-channels)
(append (cons instance new-instances)
instances))))))))
previous-channels previous-channels
'() ;instances '() ;instances
channels)) channels))