guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/02: describe: Gracefully handle profiles that lack provenance info.


From: guix-commits
Subject: 02/02: describe: Gracefully handle profiles that lack provenance info.
Date: Sun, 9 May 2021 17:47:51 -0400 (EDT)

civodul pushed a commit to branch version-1.3.0
in repository guix.

commit 8a154c29151fc445e8d0364f507f6e200de1e700
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Sun May 9 17:22:24 2021 +0200

    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'.
---
 guix/describe.scm         | 17 +++++++++++++----
 guix/scripts/describe.scm |  9 ++++++++-
 2 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/guix/describe.scm b/guix/describe.scm
index 0683ad8..711b7b4 100644
--- a/guix/describe.scm
+++ b/guix/describe.scm
@@ -122,15 +122,24 @@ lives in, or the empty list if this is not applicable."
   (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
diff --git a/guix/scripts/describe.scm b/guix/scripts/describe.scm
index b5f6249..a3e3338 100644
--- a/guix/scripts/describe.scm
+++ b/guix/scripts/describe.scm
@@ -301,4 +301,11 @@ text.  The hyperlink links to a web view of COMMIT, when 
available."
            (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)))))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]