mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2025-02-01 07:16:39 +01:00
channels: Save and interpret 'introduction' field in provenance data.
With this change, profiles created by 'guix pull' & co. include channel introductions as part of the channel metadata of each manifest entry. * guix/channels.scm (channel-instances->manifest)[instance->entry]: Add 'introduction' field when CHANNEL has an introduction. (profile-channels)[sexp->channel-introduction]: New procedure. Use it to initialize the 'introduction' field.
This commit is contained in:
parent
22a9699257
commit
471550c28c
1 changed files with 31 additions and 5 deletions
|
@ -851,8 +851,9 @@ (define (channel-instances->manifest instances)
|
|||
"Return a profile manifest with entries for all of INSTANCES, a list of
|
||||
channel instances."
|
||||
(define (instance->entry instance drv)
|
||||
(let ((commit (channel-instance-commit instance))
|
||||
(channel (channel-instance-channel instance)))
|
||||
(let* ((commit (channel-instance-commit instance))
|
||||
(channel (channel-instance-channel instance))
|
||||
(intro (channel-introduction channel)))
|
||||
(manifest-entry
|
||||
(name (symbol->string (channel-name channel)))
|
||||
(version (string-take commit 7))
|
||||
|
@ -867,7 +868,19 @@ (define (instance->entry instance drv)
|
|||
(version 0)
|
||||
(url ,(channel-url channel))
|
||||
(branch ,(channel-branch channel))
|
||||
(commit ,commit))))))))
|
||||
(commit ,commit)
|
||||
,@(if intro
|
||||
`((introduction
|
||||
(channel-introduction
|
||||
(version 0)
|
||||
(commit
|
||||
,(channel-introduction-first-signed-commit
|
||||
intro))
|
||||
(signer
|
||||
,(openpgp-format-fingerprint
|
||||
(channel-introduction-first-commit-signer
|
||||
intro))))))
|
||||
'()))))))))
|
||||
|
||||
(mlet* %store-monad ((derivations (channel-instance-derivations instances))
|
||||
(entries -> (map instance->entry instances derivations)))
|
||||
|
@ -935,17 +948,30 @@ (define* (latest-channel-derivation #:optional (channels %default-channels)
|
|||
(define (profile-channels profile)
|
||||
"Return the list of channels corresponding to entries in PROFILE. If
|
||||
PROFILE is not a profile created by 'guix pull', return the empty list."
|
||||
(define sexp->channel-introduction
|
||||
(match-lambda
|
||||
(('channel-introduction ('version 0)
|
||||
('commit commit) ('signer signer)
|
||||
_ ...)
|
||||
(make-channel-introduction commit (openpgp-fingerprint signer)))
|
||||
(x #f)))
|
||||
|
||||
(filter-map (lambda (entry)
|
||||
(match (assq 'source (manifest-entry-properties entry))
|
||||
(('source ('repository ('version 0)
|
||||
('url url)
|
||||
('branch branch)
|
||||
('commit commit)
|
||||
_ ...))
|
||||
rest ...))
|
||||
(channel (name (string->symbol
|
||||
(manifest-entry-name entry)))
|
||||
(url url)
|
||||
(commit commit)))
|
||||
(commit commit)
|
||||
(introduction
|
||||
(match (assq 'introduction rest)
|
||||
(#f #f)
|
||||
(('introduction intro)
|
||||
(sexp->channel-introduction intro))))))
|
||||
|
||||
;; No channel information for this manifest entry.
|
||||
;; XXX: Pre-0.15.0 Guix did not provide that information,
|
||||
|
|
Loading…
Reference in a new issue