summaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2022-08-08 23:06:11 +0200
committerLudovic Courtès <ludo@gnu.org>2022-08-09 15:16:06 +0200
commitcf60a0a906440ccb007bae1243c3e0397c3a0aba (patch)
tree929340ac8a8c8effeb4b2350647c4049ccbd4ca2 /guix
parent5bce4c82422de6beb3ce6120ba1592be898c2b72 (diff)
downloadguix-patches-cf60a0a906440ccb007bae1243c3e0397c3a0aba.tar
guix-patches-cf60a0a906440ccb007bae1243c3e0397c3a0aba.tar.gz
build-system/channel: Accept a channel or instance as the source.
* guix/build-system/channel.scm (latest-channel-instances*): New variable. (build-channels): New procedure, with code formerly in 'channel-build-system', augmented with clauses for when SOURCE is a channel instance or a channel. * doc/guix.texi (Build Systems): Adjust accordingly.
Diffstat (limited to 'guix')
-rw-r--r--guix/build-system/channel.scm53
1 files changed, 33 insertions, 20 deletions
diff --git a/guix/build-system/channel.scm b/guix/build-system/channel.scm
index 227eb08373..b6ef3bfacf 100644
--- a/guix/build-system/channel.scm
+++ b/guix/build-system/channel.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019-2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2019-2022 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -17,7 +17,7 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (guix build-system channel)
- #:use-module ((guix store) #:select (%store-monad))
+ #:use-module ((guix store) #:select (%store-monad store-lift))
#:use-module ((guix gexp) #:select (lower-object))
#:use-module (guix monads)
#:use-module (guix channels)
@@ -32,26 +32,39 @@
;;;
;;; Code:
+(define latest-channel-instances*
+ (store-lift latest-channel-instances))
+
+(define* (build-channels name inputs
+ #:key source system commit
+ (authenticate? #t)
+ #:allow-other-keys)
+ (mlet* %store-monad ((instances
+ (cond ((channel-instance? source)
+ (return (list source)))
+ ((channel? source)
+ (latest-channel-instances*
+ (list source)
+ #:authenticate? authenticate?))
+ (else
+ (mlet %store-monad ((source
+ (lower-object source)))
+ (return
+ (list (checkout->channel-instance
+ source #:commit commit))))))))
+ (channel-instances->derivation instances)))
+
(define channel-build-system
;; Build system used to "convert" a channel instance to a package.
- (let* ((build (lambda* (name inputs
- #:key source commit system
- #:allow-other-keys)
- (mlet* %store-monad ((source (if (string? source)
- (return source)
- (lower-object source)))
- (instance
- -> (checkout->channel-instance
- source #:commit commit)))
- (channel-instances->derivation (list instance)))))
- (lower (lambda* (name #:key system source commit
- #:allow-other-keys)
- (bag
- (name name)
- (system system)
- (build build)
- (arguments `(#:source ,source
- #:commit ,commit))))))
+ (let ((lower (lambda* (name #:key system source commit (authenticate? #t)
+ #:allow-other-keys)
+ (bag
+ (name name)
+ (system system)
+ (build build-channels)
+ (arguments `(#:source ,source
+ #:authenticate? ,authenticate?
+ #:commit ,commit))))))
(build-system (name 'channel)
(description "Turn a channel instance into a package.")
(lower lower))))