describe: Gracefully handle profiles that lack provenance info.

Fixes <https://bugs.gnu.org/48313>.

Previously, 'current-channels' would return the empty list when
'current-profile' is true but the profile lacks provenance info.

* guix/describe.scm (current-channels)[build-time-metadata]: New
procedure.  Call it when 'manifest-entry-channel' returns #f for all of
ENTRIES.
* guix/scripts/describe.scm (guix-describe): When PROFILE is true, pass
third argument to 'display-profile-info'.
This commit is contained in:
Ludovic Courtès 2021-05-09 17:22:24 +02:00
parent 9562a2eb61
commit 8a154c2915
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 21 additions and 5 deletions

View file

@ -122,15 +122,24 @@ (define current-channels
(mlambda ()
"Return the list of channels currently available, including the 'guix'
channel. Return the empty list if this information is missing."
(define (build-time-metadata)
(match (channel-metadata)
(#f '())
(sexp (or (and=> (sexp->channel sexp 'guix) list) '()))))
(match (current-profile-entries)
(()
;; As a fallback, if we're not running from a profile, use 'guix'
;; channel metadata from (guix config).
(match (channel-metadata)
(#f '())
(sexp (or (and=> (sexp->channel sexp 'guix) list) '()))))
(build-time-metadata))
(entries
(filter-map manifest-entry-channel entries)))))
(match (filter-map manifest-entry-channel entries)
(()
;; This profile lacks provenance metadata, so fall back to
;; build-time metadata as returned by 'channel-metadata'.
(build-time-metadata))
(lst
lst))))))
(define (package-path-entries)
"Return two values: the list of package path entries to be added to the

View file

@ -301,4 +301,11 @@ (define-command (guix-describe . args)
(channels
(display-profile-info #f format channels))))
(profile
(display-profile-info (canonicalize-profile profile) format))))))
;; For the current profile, resort to 'current-channels', which has a
;; fallback to metadata from (guix config) in case PROFILE lacks it.
(let ((channels (if (and (current-profile)
(string=? profile (current-profile)))
(current-channels)
(profile-channels profile))))
(display-profile-info (canonicalize-profile profile)
format channels)))))))