Subject: bug#48313: [1.3.0rc2] ‘guix describe’ prints nothing and exits with 0

From: Ludovic Courtès <[email-masked]>
Date: Sun, 09 May 2021 16:47:59 +0200

Ludovic Courtès <[email-masked]> skribis:

> In the 1.3.0rc2 VM image, ‘guix describe’ prints nothing and exits with
> 0 (success).  This is with /run/current-system/profile/bin/guix.
> ‘strace’ shows that it parses /run/current-system/profile/manifest,
> which does not contain provenance information.

In RC1, ‘current-profile’ from (guix describe) returns #f.
Thus, ‘current-channels’ returns channel metadata from (guix config).

In RC2, ‘current-profile’ returns /run/current-system/profile.
Thus, ‘current-channels’ returns metadata from profile entries, but
there’s none.

The different ‘current-profile’ behavior stems from this condition:

--8<---------------cut here---------------start------------->8---
(define current-profile
  (mlambda ()
    "Return the profile (created by 'guix pull') the calling process lives in,
or #f if this is not applicable."
    (match initial-program-arguments
      ((program . _)
       (and (string-suffix? "/bin/guix" program)  ;<------ HERE!
            ;; Note: We want to do _lexical dot-dot resolution_.  Using ".."
            ;; for real would instead take us into the /gnu/store directory
            ;; that ~/.config/guix/current/bin points to, whereas we want to
            ;; obtain ~/.config/guix/current.
            (let ((candidate (dirname (dirname program))))
              (and (file-exists? (string-append candidate "/manifest"))
                   candidate)))))))
--8<---------------cut here---------------end--------------->8---

Prior to c47f3fc13562d82edfd2d47342574154c452843a, PROGRAM was
“.guix-real” (hence the #f return value), but now it’s “guix”.

Ludo’.