pull: Preserve channel ordering when using '--commit', '--url', etc.

Previously using '--url', '--commit', or '--branch' would move the
'guix' channel to the front.  This is okay in itself but it gratuitously
leads to a different cache key in 'cached-channel-instance'--IOW, 'guix
time-machine --commit=X' where X is already in cache would gratuitously
recompute the channel derivations.

* guix/scripts/pull.scm (channel-list): Use 'map' instead of 'find' +
'remove' + 'cons'.
This commit is contained in:
Ludovic Courtès 2023-06-15 10:34:31 +02:00
parent 6e1215fb9c
commit a3beb8d741
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -769,22 +769,21 @@ (define (environment-variable)
(url (or (assoc-ref opts 'repository-url)
(environment-variable))))
(if (or ref url)
(match (find guix-channel? channels)
((? channel? guix)
;; Apply '--url', '--commit', and '--branch' to the 'guix' channel.
(let ((url (or url (channel-url guix))))
(cons (match ref
(('commit . commit)
(channel (inherit guix)
(url url) (commit commit) (branch #f)))
(('branch . branch)
(channel (inherit guix)
(url url) (commit #f) (branch branch)))
(#f
(channel (inherit guix) (url url))))
(remove guix-channel? channels))))
(#f ;no 'guix' channel, failure will ensue
channels))
;; Apply '--url', '--commit', and '--branch' to the 'guix' channel.
(map (lambda (c)
(if (guix-channel? c)
(let ((url (or url (channel-url c))))
(match ref
(('commit . commit)
(channel (inherit c)
(url url) (commit commit) (branch #f)))
(('branch . branch)
(channel (inherit c)
(url url) (commit #f) (branch branch)))
(#f
(channel (inherit c) (url url)))))
c))
channels)
channels)))
(define (validate-cache-directory-ownership)