all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Ludovic Courtès" <ludo@gnu.org>
To: 40770@debbugs.gnu.org
Cc: "Ludovic Courtès" <ludo@gnu.org>
Subject: [bug#40770] [PATCH 1/5] profiles: Add lowerable <profile> record type.
Date: Wed, 22 Apr 2020 17:08:45 +0200	[thread overview]
Message-ID: <20200422150849.5432-1-ludo@gnu.org> (raw)
In-Reply-To: <20200422150641.5267-1-ludo@gnu.org>

* guix/profiles.scm (<profile>): New record type.
* tests/profiles.scm ("<profile>"): New test.
---
 guix/profiles.scm  | 36 ++++++++++++++++++++++++++++++++++++
 tests/profiles.scm | 13 ++++++++++++-
 2 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/guix/profiles.scm b/guix/profiles.scm
index 88606fa4ce..ab265cce62 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -125,6 +125,15 @@
             profile-derivation
             profile-search-paths
 
+            profile
+            profile?
+            profile-name
+            profile-content
+            profile-hooks
+            profile-locales?
+            profile-allow-collisions?
+            profile-relative-symlinks?
+
             generation-number
             generation-profile
             generation-numbers
@@ -1656,6 +1665,33 @@ are cross-built for TARGET."
                                        . ,(length
                                            (manifest-entries manifest))))))))
 
+;; Declarative profile.
+(define-record-type* <profile> profile make-profile
+  profile?
+  (name               profile-name (default "profile")) ;string
+  (content            profile-content)                  ;<manifest>
+  (hooks              profile-hooks                     ;list of procedures
+                      (default %default-profile-hooks))
+  (locales?           profile-locales?            ;Boolean
+                      (default #t))
+  (allow-collisions?  profile-allow-collisions?   ;Boolean
+                      (default #f))
+  (relative-symlinks? profile-relative-symlinks?  ;Boolean
+                      (default #f)))
+
+(define-gexp-compiler (profile-compiler (profile <profile>) system target)
+  "Compile PROFILE to a derivation."
+  (match profile
+    (($ <profile> name manifest hooks
+                  locales? allow-collisions? relative-symlinks?)
+     (profile-derivation manifest
+                         #:name name
+                         #:hooks hooks
+                         #:locales? locales?
+                         #:allow-collisions? allow-collisions?
+                         #:relative-symlinks? relative-symlinks?
+                         #:system system #:target target))))
+
 (define* (profile-search-paths profile
                                #:optional (manifest (profile-manifest profile))
                                #:key (getenv (const #f)))
diff --git a/tests/profiles.scm b/tests/profiles.scm
index 21c912a532..055924ba3e 100644
--- a/tests/profiles.scm
+++ b/tests/profiles.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -223,6 +223,17 @@
                  (string=? (dirname (readlink bindir))
                            (derivation->output-path guile))))))
 
+(test-assertm "<profile>"
+  (mlet* %store-monad
+      ((entry ->   (package->manifest-entry %bootstrap-guile))
+       (profile -> (profile (hooks '()) (locales? #f)
+                            (content (manifest (list entry)))))
+       (drv        (lower-object profile))
+       (profile -> (derivation->output-path drv))
+       (bindir ->  (string-append profile "/bin"))
+       (_          (built-derivations (list drv))))
+    (return (file-exists? (string-append bindir "/guile")))))
+
 (test-assertm "profile-derivation relative symlinks, one entry"
   (mlet* %store-monad
       ((entry ->   (package->manifest-entry %bootstrap-guile))
-- 
2.26.0

  reply	other threads:[~2020-04-22 15:10 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-22 15:06 [bug#40770] [PATCH 0/5] Add declarative profiles Ludovic Courtès
2020-04-22 15:08 ` Ludovic Courtès [this message]
2020-04-22 15:08   ` [bug#40770] [PATCH 2/5] system: 'operating-system-directory-base-entries' uses 'profile' Ludovic Courtès
2020-04-22 15:08   ` [bug#40770] [PATCH 3/5] services: profile: Use a declarative profile Ludovic Courtès
2020-04-22 15:08   ` [bug#40770] [PATCH 4/5] pack: " Ludovic Courtès
2020-04-22 15:08   ` [bug#40770] [PATCH 5/5] services: system: Initial entries are non-monadic Ludovic Courtès
2020-04-22 17:12 ` [bug#40770] [PATCH 0/5] Add declarative profiles Mathieu Othacehe
2020-04-22 19:46   ` Ludovic Courtès
2020-04-26 20:51   ` bug#40770: " Ludovic Courtès
2020-04-22 19:46 ` [bug#40770] " Christopher Baines

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200422150849.5432-1-ludo@gnu.org \
    --to=ludo@gnu.org \
    --cc=40770@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.