GNU bug report logs - #45896
Non-pull ‘guix’ should know its channels

Previous Next

Package: guix;

Reported by: Ludovic Courtès <ludo <at> gnu.org>

Date: Fri, 15 Jan 2021 17:52:02 UTC

Severity: important

Tags: patch

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 45896 in the body.
You can then email your comments to 45896 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-guix <at> gnu.org:
bug#45896; Package guix. (Fri, 15 Jan 2021 17:52:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Ludovic Courtès <ludo <at> gnu.org>:
New bug report received and forwarded. Copy sent to bug-guix <at> gnu.org. (Fri, 15 Jan 2021 17:52:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: <bug-guix <at> gnu.org>
Subject: Non-pull ‘guix’ should know its channels
Date: Fri, 15 Jan 2021 18:51:14 +0100
Related to <https://issues.guix.gnu.org/45895>, we have the problem that
the ‘guix’ command coming from the ‘guix’ package doesn’t know its
provenance: ‘guix describe’ errors out.

We should fix it by storing a meta-data file within the ‘guix’ package.

Likewise, on foreign distros, /usr/local/bin/guix may point to a ‘guix
pull’-guix, but because of the symlink, ‘guix describe’ won’t work:

--8<---------------cut here---------------start------------->8---
$ type -P guix
/home/ludo/.config/guix/current/bin/guix
$ guix describe
Generacio 171	Jan 11 2021 11:38:39	(nuna)
  guix 458cb25
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: 458cb25b9e7e7c954f468023abea2bebb5d8c75b
$ ln -s $(type -P guix) /tmp
$ /tmp/guix describe
guix describe: error: failed to determine origin
hint: Perhaps this `guix' command was not obtained with `guix pull'? Its
version string is 458cb25b9e7e7c954f468023abea2bebb5d8c75b.
--8<---------------cut here---------------end--------------->8---

We should probably store proper provenance info directly in the ‘guix’
output, just like we store the commit ID in (guix config).

Ludo’.




Severity set to 'important' from 'normal' Request was from Ludovic Courtès <ludo <at> gnu.org> to control <at> debbugs.gnu.org. (Sat, 16 Jan 2021 11:13:01 GMT) Full text and rfc822 format available.

Added indication that bug 45896 blocks45895 Request was from Ludovic Courtès <ludo <at> gnu.org> to control <at> debbugs.gnu.org. (Sat, 16 Jan 2021 11:13:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-guix <at> gnu.org:
bug#45896; Package guix. (Tue, 26 Jan 2021 13:18:02 GMT) Full text and rfc822 format available.

Message #12 received at 45896 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 45896 <at> debbugs.gnu.org
Subject: Re: bug#45896: Non-pull ‘guix’ should know
 its channels
Date: Tue, 26 Jan 2021 14:16:57 +0100
Ludovic Courtès <ludo <at> gnu.org> skribis:

> Likewise, on foreign distros, /usr/local/bin/guix may point to a ‘guix
> pull’-guix, but because of the symlink, ‘guix describe’ won’t work:
>
> $ type -P guix
> /home/ludo/.config/guix/current/bin/guix
> $ guix describe
> Generacio 171	Jan 11 2021 11:38:39	(nuna)
>   guix 458cb25
>     repository URL: https://git.savannah.gnu.org/git/guix.git
>     branch: master
>     commit: 458cb25b9e7e7c954f468023abea2bebb5d8c75b
> $ ln -s $(type -P guix) /tmp
> $ /tmp/guix describe
> guix describe: error: failed to determine origin
> hint: Perhaps this `guix' command was not obtained with `guix pull'? Its
> version string is 458cb25b9e7e7c954f468023abea2bebb5d8c75b.

This problem extends beyond that: channel modules are not found if the
symlink is dereferenced:

--8<---------------cut here---------------start------------->8---
$ /tmp/guix-science/bin/guix describe 
Generacio 1     Jan 26 2021 14:13:46    (nuna)
  guix-past 829923f
    repository URL: https://gitlab.inria.fr/guix-hpc/guix-past
    branch: master
    commit: 829923f01f894f1e687735627025ada26230832f
  guix-science cf87b05
    repository URL: https://github.com/guix-science/guix-science.git
    branch: master
    commit: cf87b0501c4a38b96edf41025a27bf1cb91f521a
  guix 51418c3
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: 51418c32d95d8188d8877616829f26479f1135c6
$ $(readlink -f /tmp/guix-science/bin/guix) describe 
guix describe: error: failed to determine origin
hint: Perhaps this `guix' command was not obtained with `guix pull'? Its version string is 51418c32d95d8188d8877616829f26479f1135c6.

$ /tmp/guix-science/bin/guix build python2 <at> 2.4 -n
La jenaj derivoj estus konstruataj:
   /gnu/store/xsk3vg48dfbwcc5w8pn08x5x15n5prpz-python2-2.4.6.drv
   /gnu/store/pnxh0lx28iydhw354xgcfbzk9r6zs6dx-Python-2.4.6.tar.xz.drv
   /gnu/store/fi2my0k9lfag52siz1h7xqwqbzwjkirc-Python-2.4.6.tar.bz2.drv
14.2 MB would be downloaded:
   /gnu/store/6wn346cbw1mh6264v426pwj2klgvxr0z-gcc-5.5.0
$ $(readlink -f /tmp/guix-science/bin/guix) build python2 <at> 2.4 -n
guix build: error: python2: pako ne trovita por versio 2.4
--8<---------------cut here---------------end--------------->8---

Ludo’.




Information forwarded to bug-guix <at> gnu.org:
bug#45896; Package guix. (Wed, 27 Jan 2021 21:52:02 GMT) Full text and rfc822 format available.

Message #15 received at 45896 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 45896 <at> debbugs.gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH 1/3] channels: Record 'guix' channel metadata in (guix config).
Date: Wed, 27 Jan 2021 22:51:28 +0100
Partially fixes <https://bugs.gnu.org/45896>.

* guix/config.scm.in (%channel-metadata): New variable.
* guix/describe.scm (channel-metadata): Use it.
(current-channels): New procedure.
(current-profile-entries): Clarify docstring.
* guix/self.scm (compiled-guix): Add #:channel-metadata and pass it to
'make-config.scm'.
(make-config.scm): Add #:channel-metadata and define '%channel-metadata'
in the generated file.
(guix-derivation): Add #:channel-metadata and pass it to 'compiled-guix'.
* guix/channels.scm (build-from-source): Replace 'name', 'source', and
'commit' parameters with 'instance'.  Pass #:channel-metadata to BUILD.
(build-channel-instance): Adjust accordingly.
* build-aux/build-self.scm (build-program): Add #:channel-metadata
and pass it to 'guix-derivation'.
(build): Add #:channel-metadata and pass it to 'build-program'.
* guix/scripts/describe.scm (display-profile-info): Add optional
'channels' parameter.  Pass it to 'display-profile-content'.
(display-profile-content): Add optional 'channels' parameter and honor
it.  Iterate on CHANNELS rather than on the manifest entries of
PROFILE.
(guix-describe): When PROFILE is #f, call 'current-channels' and pass it
to 'display-profile-info', unless it returns the empty list.
---
 build-aux/build-self.scm  | 11 ++++--
 guix/channels.scm         | 30 ++++++++++-------
 guix/config.scm.in        | 11 +++++-
 guix/describe.scm         | 28 ++++++++++++++--
 guix/scripts/describe.scm | 70 +++++++++++++++++++--------------------
 guix/self.scm             | 25 +++++++++++---
 6 files changed, 116 insertions(+), 59 deletions(-)

diff --git a/build-aux/build-self.scm b/build-aux/build-self.scm
index d5bc5fb46e..6a3b9c83d4 100644
--- a/build-aux/build-self.scm
+++ b/build-aux/build-self.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo <at> gnu.org>
+;;; Copyright © 2014, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo <at> gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -241,7 +241,7 @@ interface (FFI) of Guile.")
 
 (define* (build-program source version
                         #:optional (guile-version (effective-version))
-                        #:key (pull-version 0))
+                        #:key (pull-version 0) (channel-metadata #f))
   "Return a program that computes the derivation to build Guix from SOURCE."
   (define select?
     ;; Select every module but (guix config) and non-Guix modules.
@@ -359,6 +359,8 @@ interface (FFI) of Guile.")
                              (run-with-store store
                                (guix-derivation source version
                                                 #$guile-version
+                                                #:channel-metadata
+                                                '#$channel-metadata
                                                 #:pull-version
                                                 #$pull-version)
                                #:system system)
@@ -380,7 +382,9 @@ interface (FFI) of Guile.")
 
 ;; The procedure below is our return value.
 (define* (build source
-                #:key verbose? (version (date-version-string)) system
+                #:key verbose?
+                (version (date-version-string)) channel-metadata
+                system
                 (pull-version 0)
 
                 ;; For the standalone Guix, default to Guile 3.0.  For old
@@ -397,6 +401,7 @@ files."
   ;; Build the build program and then use it as a trampoline to build from
   ;; SOURCE.
   (mlet %store-monad ((build  (build-program source version guile-version
+                                             #:channel-metadata channel-metadata
                                              #:pull-version pull-version))
                       (system (if system (return system) (current-system)))
                       (home -> (getenv "HOME"))
diff --git a/guix/channels.scm b/guix/channels.scm
index e7e1eb6fd0..3cc3b4c438 100644
--- a/guix/channels.scm
+++ b/guix/channels.scm
@@ -626,16 +626,23 @@ that unconditionally resumes the continuation."
       (values (run-with-store store mvalue)
               store))))
 
-(define* (build-from-source name source
-                            #:key core verbose? commit
-                            (dependencies '()))
-  "Return a derivation to build Guix from SOURCE, using the self-build script
-contained therein; use COMMIT as the version string.  When CORE is true, build
-package modules under SOURCE using CORE, an instance of Guix."
+(define* (build-from-source instance
+                            #:key core verbose? (dependencies '()))
+  "Return a derivation to build Guix from INSTANCE, using the self-build
+script contained therein.  When CORE is true, build package modules under
+SOURCE using CORE, an instance of Guix."
+  (define name
+    (symbol->string
+     (channel-name (channel-instance-channel instance))))
+  (define source
+    (channel-instance-checkout instance))
+  (define commit
+    (channel-instance-commit instance))
+
   ;; Running the self-build script makes it easier to update the build
   ;; procedure: the self-build script of the Guix-to-be-installed contains the
   ;; right dependencies, build procedure, etc., which the Guix-in-use may not
-  ;; be know.
+  ;; know.
   (define script
     (string-append source "/" %self-build-file))
 
@@ -661,7 +668,9 @@ package modules under SOURCE using CORE, an instance of Guix."
           ;; cause us to redo half of the BUILD computation several times just
           ;; to realize it gives the same result.
           (with-trivial-build-handler
-           (build source #:verbose? verbose? #:version commit
+           (build source
+                  #:verbose? verbose? #:version commit
+                  #:channel-metadata (channel-instance->sexp instance)
                   #:pull-version %pull-version))))
 
       ;; Build a set of modules that extend Guix using the standard method.
@@ -672,10 +681,7 @@ package modules under SOURCE using CORE, an instance of Guix."
   "Return, as a monadic value, the derivation for INSTANCE, a channel
 instance.  DEPENDENCIES is a list of extensions providing Guile modules that
 INSTANCE depends on."
-  (build-from-source (symbol->string
-                      (channel-name (channel-instance-channel instance)))
-                     (channel-instance-checkout instance)
-                     #:commit (channel-instance-commit instance)
+  (build-from-source instance
                      #:core core
                      #:dependencies dependencies))
 
diff --git a/guix/config.scm.in b/guix/config.scm.in
index b2901735d8..223c9eb418 100644
--- a/guix/config.scm.in
+++ b/guix/config.scm.in
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2018, 2019 Ludovic Courtès <ludo <at> gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2021 Ludovic Courtès <ludo <at> gnu.org>
 ;;; Copyright © 2017 Caleb Ristvedt <caleb.ristvedt <at> cune.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -23,6 +23,8 @@
             %guix-bug-report-address
             %guix-home-page-url
 
+            %channel-metadata
+
             %storedir
             %localstatedir
             %sysconfdir
@@ -56,6 +58,13 @@
 (define %guix-home-page-url
   "@PACKAGE_URL@")
 
+(define %channel-metadata
+  ;; When true, this is an sexp containing metadata for the 'guix' channel
+  ;; this file was built from.  This is used by (guix describe).
+
+  ;; TODO: Implement 'configure.ac' machinery to initialize it.
+  #f)
+
 (define %storedir
   "@storedir@")
 
diff --git a/guix/describe.scm b/guix/describe.scm
index ac89fc0d7c..6a31c707f0 100644
--- a/guix/describe.scm
+++ b/guix/describe.scm
@@ -23,12 +23,13 @@
   #:use-module ((guix utils) #:select (location-file))
   #:use-module ((guix store) #:select (%store-prefix store-path?))
   #:use-module ((guix config) #:select (%state-directory))
-  #:autoload   (guix channels) (sexp->channel)
+  #:autoload   (guix channels) (sexp->channel manifest-entry-channel)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match)
   #:export (current-profile
             current-profile-date
             current-profile-entries
+            current-channels
             package-path-entries
 
             package-provenance
@@ -87,10 +88,19 @@ as a number of seconds since the Epoch, or #f if it could not be determined."
                            (string-append (dirname file) "/" target)))))
              (const #f)))))))
 
+(define (channel-metadata)
+  "Return the 'guix' channel metadata sexp from (guix config) if available;
+otherwise return #f."
+  ;; Older 'build-self.scm' would create a (guix config) file without the
+  ;; '%channel-metadata' variable.  Thus, properly deal with a lack of
+  ;; information.
+  (let ((module (resolve-interface '(guix config))))
+    (and=> (module-variable module '%channel-metadata) variable-ref)))
+
 (define current-profile-entries
   (mlambda ()
     "Return the list of entries in the 'guix pull' profile the calling process
-lives in, or #f if this is not applicable."
+lives in, or the empty list if this is not applicable."
     (match (current-profile)
       (#f '())
       (profile
@@ -105,6 +115,20 @@ lives in, or #f if this is not applicable."
               (string=? (manifest-entry-name entry) "guix"))
             (current-profile-entries))))
 
+(define current-channels
+  (mlambda ()
+    "Return the list of channels currently available, including the 'guix'
+channel.  Return the empty list if this information is missing."
+    (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) '()))))
+      (entries
+       (filter-map manifest-entry-channel entries)))))
+
 (define (package-path-entries)
   "Return two values: the list of package path entries to be added to the
 package search path, and the list to be added to %LOAD-COMPILED-PATH.  These
diff --git a/guix/scripts/describe.scm b/guix/scripts/describe.scm
index e47d207ee0..cd5d3838a8 100644
--- a/guix/scripts/describe.scm
+++ b/guix/scripts/describe.scm
@@ -182,20 +182,18 @@ string is ~a.~%")
                           (current-output-port))))
     (display-package-search-path fmt)))
 
-(define (display-profile-info profile fmt)
+(define* (display-profile-info profile fmt
+                               #:optional
+                               (channels (profile-channels profile)))
   "Display information about PROFILE, a profile as created by (guix channels),
-in the format specified by FMT."
+in the format specified by FMT.  PROFILE can be #f, in which case CHANNELS is
+what matters."
   (define number
-    (generation-number profile))
-
-  (define channels
-    (profile-channels (if (zero? number)
-                          profile
-                          (generation-file-name profile number))))
+    (and profile (generation-number profile)))
 
   (match fmt
     ('human
-     (display-profile-content profile number))
+     (display-profile-content profile number channels))
     ('channels
      (pretty-print `(list ,@(map channel->code channels))))
     ('channels-sans-intro
@@ -213,33 +211,29 @@ in the format specified by FMT."
                   channels))))
   (display-package-search-path fmt))
 
-(define (display-profile-content profile number)
-  "Display the packages in PROFILE, generation NUMBER, in a human-readable
-way and displaying details about the channel's source code."
-  (display-generation profile number)
-  (for-each (lambda (entry)
+(define* (display-profile-content profile number
+                                  #:optional
+                                  (channels (profile-channels profile)))
+  "Display CHANNELS along with PROFILE info, generation NUMBER, in a
+human-readable way and displaying details about the channel's source code.
+PROFILE and NUMBER "
+  (when (and number profile)
+    (display-generation profile number))
+
+  (for-each (lambda (channel)
               (format #t "  ~a ~a~%"
-                      (manifest-entry-name entry)
-                      (manifest-entry-version entry))
-              (match (manifest-entry-channel entry)
-                ((? channel? channel)
-                 (format #t (G_ "    repository URL: ~a~%")
-                         (channel-url channel))
-                 (when (channel-branch channel)
-                   (format #t (G_ "    branch: ~a~%")
-                           (channel-branch channel)))
-                 (format #t (G_ "    commit: ~a~%")
-                         (if (supports-hyperlinks?)
-                             (channel-commit-hyperlink channel)
-                             (channel-commit channel))))
-                (_ #f)))
-
-            ;; Show most recently installed packages last.
-            (reverse
-             (manifest-entries
-              (profile-manifest (if (zero? number)
-                                    profile
-                                    (generation-file-name profile number)))))))
+                      (channel-name channel)
+                      (string-take (channel-commit channel) 7))
+              (format #t (G_ "    repository URL: ~a~%")
+                      (channel-url channel))
+              (when (channel-branch channel)
+                (format #t (G_ "    branch: ~a~%")
+                        (channel-branch channel)))
+              (format #t (G_ "    commit: ~a~%")
+                      (if (supports-hyperlinks?)
+                          (channel-commit-hyperlink channel)
+                          (channel-commit channel))))
+            channels))
 
 (define %vcs-web-views
   ;; Hard-coded list of host names and corresponding web view URL templates.
@@ -295,6 +289,10 @@ text.  The hyperlink links to a web view of COMMIT, when available."
     (with-error-handling
       (match profile
         (#f
-         (display-checkout-info format))
+         (match (current-channels)
+           (()
+            (display-checkout-info format))
+           (channels
+            (display-profile-info #f format channels))))
         (profile
          (display-profile-info (canonicalize-profile profile) format))))))
diff --git a/guix/self.scm b/guix/self.scm
index 15c8ad4eb9..35fba1152d 100644
--- a/guix/self.scm
+++ b/guix/self.scm
@@ -793,7 +793,9 @@ itself."
     (((labels packages _ ...) ...)
      (cons package packages))))
 
-(define* (compiled-guix source #:key (version %guix-version)
+(define* (compiled-guix source #:key
+                        (version %guix-version)
+                        (channel-metadata #f)
                         (pull-version 1)
                         (name (string-append "guix-" version))
                         (guile-version (effective-version))
@@ -977,6 +979,8 @@ itself."
                                          %guix-package-name
                                          #:package-version
                                          version
+                                         #:channel-metadata
+                                         channel-metadata
                                          #:bug-report-address
                                          %guix-bug-report-address
                                          #:home-page-url
@@ -1070,6 +1074,7 @@ itself."
 (define* (make-config.scm #:key gzip xz bzip2
                           (package-name "GNU Guix")
                           (package-version "0")
+                          (channel-metadata #f)
                           (bug-report-address "bug-guix <at> gnu.org")
                           (home-page-url "https://guix.gnu.org"))
 
@@ -1083,6 +1088,7 @@ itself."
                                %guix-version
                                %guix-bug-report-address
                                %guix-home-page-url
+                               %channel-metadata
                                %system
                                %store-directory
                                %state-directory
@@ -1125,6 +1131,11 @@ itself."
                    (define %guix-bug-report-address #$bug-report-address)
                    (define %guix-home-page-url #$home-page-url)
 
+                   (define %channel-metadata
+                     ;; Metadata for the 'guix' channel in use.  This
+                     ;; information is used by (guix describe).
+                     '#$channel-metadata)
+
                    (define %gzip
                      #+(and gzip (file-append gzip "/bin/gzip")))
                    (define %bzip2
@@ -1249,11 +1260,14 @@ containing MODULE-FILES and possibly other files as well."
 
 (define* (guix-derivation source version
                           #:optional (guile-version (effective-version))
-                          #:key (pull-version 0))
+                          #:key (pull-version 0)
+                          channel-metadata)
   "Return, as a monadic value, the derivation to build the Guix from SOURCE
-for GUILE-VERSION.  Use VERSION as the version string.  PULL-VERSION specifies
-the version of the 'guix pull' protocol.  Return #f if this PULL-VERSION value
-is not supported."
+for GUILE-VERSION.  Use VERSION as the version string.  Use CHANNEL-METADATA
+as the channel metadata sexp to include in (guix config).
+
+PULL-VERSION specifies the version of the 'guix pull' protocol.  Return #f if
+this PULL-VERSION value is not supported."
   (define (shorten version)
     (if (and (string-every char-set:hex-digit version)
              (> (string-length version) 9))
@@ -1278,6 +1292,7 @@ is not supported."
     (set-guile-for-build guile)
     (let ((guix (compiled-guix source
                                #:version version
+                               #:channel-metadata channel-metadata
                                #:name (string-append "guix-"
                                                      (shorten version))
                                #:pull-version pull-version
-- 
2.30.0





Information forwarded to bug-guix <at> gnu.org:
bug#45896; Package guix. (Wed, 27 Jan 2021 21:52:02 GMT) Full text and rfc822 format available.

Message #18 received at 45896 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 45896 <at> debbugs.gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH 3/3] gnu: guix: Pass the '--with-channel-commit' configure
 flag.
Date: Wed, 27 Jan 2021 22:51:30 +0100
* gnu/packages/package-management.scm (guix)[arguments]: Add
'--with-channel-commit' to #:configure-flags.
---
 gnu/packages/package-management.scm | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 60d8d4b8c6..dfb4b868ee 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -154,6 +154,13 @@
       (build-system gnu-build-system)
       (arguments
        `(#:configure-flags (list
+
+                            ;; Provide channel metadata for 'guix describe'.
+                            ;; Don't pass '--with-channel-url' and
+                            ;; '--with-channel-introduction' and instead use
+                            ;; the defaults.
+                            ,(string-append "--with-channel-commit=" commit)
+
                             "--localstatedir=/var"
                             "--sysconfdir=/etc"
                             (string-append "--with-bash-completion-dir="
-- 
2.30.0





Information forwarded to bug-guix <at> gnu.org:
bug#45896; Package guix. (Wed, 27 Jan 2021 21:52:02 GMT) Full text and rfc822 format available.

Message #21 received at 45896 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 45896 <at> debbugs.gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH 2/3] build: Add '--with-channel-commit' and related configure
 flags.
Date: Wed, 27 Jan 2021 22:51:29 +0100
Partially fixes <https://bugs.gnu.org/45896>.

* m4/guix.m4 (GUIX_CHANNEL_METADATA): New macro.
* configure.ac: Use it.
* guix/config.scm.in (%channel-metadata): Adjust accordingly.
---
 configure.ac       |  1 +
 guix/config.scm.in | 20 +++++++++++++++++---
 m4/guix.m4         | 30 +++++++++++++++++++++++++++++-
 3 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/configure.ac b/configure.ac
index aa97f67ebe..aa60471143 100644
--- a/configure.ac
+++ b/configure.ac
@@ -25,6 +25,7 @@ AM_GNU_GETTEXT_VERSION([0.18.1])
 
 GUIX_SYSTEM_TYPE
 GUIX_ASSERT_SUPPORTED_SYSTEM
+GUIX_CHANNEL_METADATA
 
 AM_CONDITIONAL([CROSS_COMPILING], [test "x$cross_compiling" = "xyes"])
 
diff --git a/guix/config.scm.in b/guix/config.scm.in
index 223c9eb418..d582d91d74 100644
--- a/guix/config.scm.in
+++ b/guix/config.scm.in
@@ -61,9 +61,23 @@
 (define %channel-metadata
   ;; When true, this is an sexp containing metadata for the 'guix' channel
   ;; this file was built from.  This is used by (guix describe).
-
-  ;; TODO: Implement 'configure.ac' machinery to initialize it.
-  #f)
+  (let ((url    @GUIX_CHANNEL_URL@)
+        (commit @GUIX_CHANNEL_COMMIT@)
+        (intro  @GUIX_CHANNEL_INTRODUCTION@))
+    (and url commit
+         `(repository
+           (version 0)
+           (url ,url)
+           (branch "master")                      ;XXX: doesn't really matter
+           (commit ,commit)
+           (name guix)
+           ,@(if intro
+                 `((introduction
+                    (channel-introduction
+                     (version 0)
+                     (commit ,(car intro))
+                     (signer ,(cdr intro)))))
+                 '())))))
 
 (define %storedir
   "@storedir@")
diff --git a/m4/guix.m4 b/m4/guix.m4
index f8eb5aaf51..c1ce0876fa 100644
--- a/m4/guix.m4
+++ b/m4/guix.m4
@@ -1,5 +1,5 @@
 dnl GNU Guix --- Functional package management for GNU
-dnl Copyright © 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020 Ludovic Courtès <ludo <at> gnu.org>
+dnl Copyright © 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo <at> gnu.org>
 dnl Copyright © 2014 Mark H Weaver <mhw <at> netris.org>
 dnl Copyright © 2017 Efraim Flashner <efraim <at> flashner.co.il>
 dnl
@@ -398,3 +398,31 @@ that of the existing installation '$guix_cv_current_localstatedir'])
       esac
     fi
   fi])
+
+dnl GUIX_CHANNEL_METADATA
+dnl
+dnl Provide the channel metadata for this build.  This allows 'guix describe'
+dnl to return meaningful data, as it would for a 'guix pull'-provided 'guix'.
+dnl The default URL and introduction are taken from (guix channels).
+AC_DEFUN([GUIX_CHANNEL_METADATA], [
+  AC_ARG_WITH([channel-url], [AS_HELP_STRING([--with-channel-url=URL],
+    [assert that this is built from the Git repository at URL])],
+    [guix_channel_url="\"$withval\""],
+    [guix_channel_url="\"https://git.savannah.gnu.org/git/guix.git\""])
+  AC_ARG_WITH([channel-commit], [AS_HELP_STRING([--with-channel-commit=COMMIT],
+    [assert that this is built from COMMIT])],
+    [guix_channel_commit="\"$withval\""],
+    [guix_channel_commit="#f"])
+  AC_ARG_WITH([channel-introduction], [AS_HELP_STRING([--with-channel-introduction=COMMIT:FINGERPRINT],
+    [specify COMMIT and FINGERPRINT as the introduction of this channel])],
+    [guix_channel_introduction="'(\"`echo $withval | cut -f1 -d:`\" \"`echo $withval | cut -f2 -d:`\")"],
+    [guix_channel_introduction="'(\"9edb3f66fd807b096b48283debdcddccfea34bad\" . \"BBB0 2DDF 2CEA F6A8 0D1D  E643 A2A0 6DF2 A33A 54FA\")"])
+
+  GUIX_CHANNEL_URL="$guix_channel_url"
+  GUIX_CHANNEL_COMMIT="$guix_channel_commit"
+  GUIX_CHANNEL_INTRODUCTION="$guix_channel_introduction"
+
+  AC_SUBST([GUIX_CHANNEL_URL])
+  AC_SUBST([GUIX_CHANNEL_COMMIT])
+  AC_SUBST([GUIX_CHANNEL_INTRODUCTION])
+])
-- 
2.30.0





Information forwarded to bug-guix <at> gnu.org:
bug#45896; Package guix. (Wed, 27 Jan 2021 21:54:02 GMT) Full text and rfc822 format available.

Message #24 received at 45896 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 45896 <at> debbugs.gnu.org
Subject: Re: bug#45896: Non-pull ‘guix’ should know
 its channels
Date: Wed, 27 Jan 2021 22:53:05 +0100
Ludovic Courtès <ludo <at> gnu.org> skribis:

> This problem extends beyond that: channel modules are not found if the
> symlink is dereferenced:

In fact, this is “by design”, so nothing particularly worrying, after all.

Ludo’.




Information forwarded to bug-guix <at> gnu.org:
bug#45896; Package guix. (Wed, 27 Jan 2021 21:54:02 GMT) Full text and rfc822 format available.

Message #27 received at 45896 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 45896 <at> debbugs.gnu.org
Subject: Re: bug#45896: Non-pull ‘guix’ should know
 its channels
Date: Wed, 27 Jan 2021 22:53:47 +0100
These patches depend on <https://issues.guix.gnu.org/45919>.




Added tag(s) patch. Request was from Ludovic Courtès <ludo <at> gnu.org> to control <at> debbugs.gnu.org. (Wed, 27 Jan 2021 21:55:02 GMT) Full text and rfc822 format available.

Added blocking bug(s) 45919 Request was from Ludovic Courtès <ludo <at> gnu.org> to control <at> debbugs.gnu.org. (Wed, 27 Jan 2021 21:55:02 GMT) Full text and rfc822 format available.

Reply sent to Ludovic Courtès <ludo <at> gnu.org>:
You have taken responsibility. (Thu, 04 Feb 2021 12:47:01 GMT) Full text and rfc822 format available.

Notification sent to Ludovic Courtès <ludo <at> gnu.org>:
bug acknowledged by developer. (Thu, 04 Feb 2021 12:47:01 GMT) Full text and rfc822 format available.

Message #36 received at 45896-done <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 45896-done <at> debbugs.gnu.org
Subject: Re: bug#45896: Non-pull ‘guix’ should know
 its channels
Date: Thu, 04 Feb 2021 13:46:33 +0100
Patches pushed as 8ecc265c5c6519986758567682726647850d5d03.

Ludo’.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Fri, 05 Mar 2021 12:24:10 GMT) Full text and rfc822 format available.

This bug report was last modified 3 years and 46 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.