diff --git a/guix/channels.scm b/guix/channels.scm index 65a0d849ec..6449221c3f 100644 --- a/guix/channels.scm +++ b/guix/channels.scm @@ -812,6 +812,7 @@ (define (channel-instance->sexp instance) (url ,(channel-url channel)) (branch ,(channel-branch channel)) (commit ,commit) + (name ,(channel-name channel)) ,@(if intro `((introduction (channel-introduction @@ -907,16 +908,22 @@ (define* (latest-channel-derivation #:optional (channels %default-channels) (channel-instances->derivation instances))) (define* (sexp->channel sexp #:optional (name 'channel)) - "Read SEXP, a provenance sexp as created by 'channel-instance->sexp', -and return a channel called NAME. Return #f if the sexp does not have the -expected structure." + "Read SEXP, a provenance sexp as created by 'channel-instance->sexp'; use +NAME as the channel name if SEXP does not specify it. Return #f if the sexp +does not have the expected structure." (match sexp (('repository ('version 0) ('url url) ('branch branch) ('commit commit) rest ...) - (channel (name name) + ;; Historically channel sexps did not include the channel name. It's OK + ;; for channels created by 'channel-instances->manifest' because the + ;; entry name is the channel name, but it was missing for entries created + ;; by 'manifest-entry-with-provenance'. + (channel (name (match (assq 'name rest) + (#f name) + (('name name) name))) (url url) (commit commit) (introduction