* [PATCH] processes: Store packages as manifest.
@ 2022-08-04 7:43 Liliana Marie Prikler
2022-08-25 12:13 ` Ricardo Wurmus
0 siblings, 1 reply; 3+ messages in thread
From: Liliana Marie Prikler @ 2022-08-04 7:43 UTC (permalink / raw)
To: gwl-devel; +Cc: Olivier Dion
This makes handling of package outputs nondestructive. It also fixes
an unrelated issue in the ordering of process packages – the implicit
bash-minimal is now ordered *last*.
* gwl/packages.scm (lookup-package): Return multiple values.
(package-output): Deleted variable.
* gwl/workflows/utils.scm (activate-workflow-environment!): Adjust accordingly.
* gwl/processes.scm (<process>)[packages]: Use manifest as init-form.
Use manifest? as validator. Return a manifest in transformer.
* gwl/processes.scm (process->script): Adjust accordingly.
* gwl/workflows/graph.scm (workflow-dot-prettify-node): Likewise.
---
gwl/packages.scm | 6 +---
gwl/processes.scm | 64 ++++++++++++++++++++++-------------------
gwl/workflows/graph.scm | 3 +-
gwl/workflows/utils.scm | 2 +-
4 files changed, 39 insertions(+), 36 deletions(-)
diff --git a/gwl/packages.scm b/gwl/packages.scm
index 6a598ba..37107f6 100644
--- a/gwl/packages.scm
+++ b/gwl/packages.scm
@@ -46,7 +46,6 @@
lookup-package
valid-package?
package-name
- package-output
bash-minimal
build-time-guix
@@ -86,8 +85,7 @@
(_ (raise (condition
(&gwl-package-error
(package-spec specification))))))))
- (set! (package-output package) output)
- package))
+ (values package output)))
(define (valid-package? val)
(or (package? val)
@@ -110,8 +108,6 @@ the version. By default, DELIMITER is \"@\"."
((? inferior-package? pkg)
(inferior-package-full-name pkg))))
-(define package-output (make-object-property))
-
(define bash-minimal
(mlambda ()
(lookup-package "bash-minimal")))
diff --git a/gwl/processes.scm b/gwl/processes.scm
index 2452d1f..07b376a 100644
--- a/gwl/processes.scm
+++ b/gwl/processes.scm
@@ -24,8 +24,10 @@
#:use-module ((guix profiles)
#:select
(profile
+ manifest manifest?
manifest-search-paths
- packages->manifest))
+ packages->manifest
+ concatenate-manifests))
#:use-module ((guix search-paths)
#:select
(search-path-specification->sexp))
@@ -38,6 +40,7 @@
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-35)
+ #:use-module (srfi srfi-71)
#:use-module (ice-9 threads)
#:use-module (ice-9 rdelim)
#:export (make-process
@@ -184,27 +187,33 @@
(packages
#:accessor process-packages
#:init-keyword #:packages
- #:init-value '()
+ #:init-form (manifest '())
#:implicit-list? #t
- #:validator (lambda (value)
- (every valid-package? value))
+ #:validator manifest?
#:transformer
;; TODO: the instance name is not be available at this point, so we
;; can't report the process name here. We should move the
;; transformers and validators to a point after initialization.
- (lambda (instance value)
- (map (match-lambda
- ((and (? string?) spec)
- (lookup-package spec))
- ((and (? valid-package?) pkg)
- pkg)
- (x
- (raise
- (condition
- (&gwl-type-error
- (expected-type (list "<package>" "<inferior-package>" "<string>"))
- (actual-value x))))))
- value)))
+ (match-lambda*
+ ((_ (? manifest? value)) value)
+ ((_ packages)
+ (packages->manifest
+ (map
+ (match-lambda
+ ((? string? spec)
+ (let ((pkg out (lookup-package spec)))
+ (list pkg out)))
+ ((? valid-package? pkg)
+ pkg)
+ (((? valid-package? pkg) (? string? out))
+ (list pkg out))
+ (x
+ (raise
+ (condition
+ (&gwl-type-error
+ (expected-type (list "<package>" "<inferior-package>" "<string>"))
+ (actual-value x))))))
+ packages)))))
(inputs
#:accessor process-raw-inputs
#:init-keyword #:inputs
@@ -686,12 +695,11 @@ tags if WITH-TAGS? is #FALSE or missing."
"Return a lowerable object for the script that will execute the
PROCESS."
(let* ((name (process-full-name process))
- (packages (cons (bash-minimal)
- (process-packages process)))
- (manifest (packages->manifest (map
- (lambda (pkg)
- (list pkg (package-output pkg)))
- packages)))
+ (manifest (concatenate-manifests
+ ;; Put process packages before bash-minimal, so that
+ ;; they're not shadowed.
+ (list (process-packages process)
+ (packages->manifest (list (bash-minimal))))))
(profile (profile (content manifest)))
(search-paths (delete-duplicates
(map search-path-specification->sexp
@@ -700,12 +708,10 @@ PROCESS."
(exp
(with-imported-modules (source-module-closure (script-modules))
#~(begin
- #$@(if (null? packages) '()
- `((use-modules (guix search-paths))
- (set-search-paths (map sexp->search-path-specification
- ',search-paths)
- (cons ,profile
- ',packages))))
+ (use-modules (guix search-paths))
+ (set-search-paths (map sexp->search-path-specification
+ '#$search-paths)
+ (list #$profile))
#$(if out `(setenv "out" ,out) "")
(setenv "_GWL_PROFILE" #$profile)
(use-modules (ice-9 match))
diff --git a/gwl/workflows/graph.scm b/gwl/workflows/graph.scm
index ea3fec9..7ea2fca 100644
--- a/gwl/workflows/graph.scm
+++ b/gwl/workflows/graph.scm
@@ -17,6 +17,7 @@
(define-module (gwl workflows graph)
#:use-module (ice-9 format)
#:use-module (ice-9 match)
+ #:use-module (guix profiles)
#:use-module (gwl packages)
#:use-module (gwl processes)
#:use-module (gwl workflows)
@@ -46,7 +47,7 @@ label=<<FONT POINT-SIZE=\"14\">~a</FONT><BR/>\
(match (process-packages process)
(() "")
(inputs (format #f "<BR/>Uses: ~{~a~^, ~}."
- (map package-name inputs)))))))
+ (map manifest-entry-name inputs)))))))
(define (workflow-restriction->dot process . restrictions)
"Write the dependency relationships of a restriction in dot format."
diff --git a/gwl/workflows/utils.scm b/gwl/workflows/utils.scm
index 666d5f0..22e6ced 100644
--- a/gwl/workflows/utils.scm
+++ b/gwl/workflows/utils.scm
@@ -180,7 +180,7 @@ modify the load path of the current process."
((package-names (required-packages file-name))
(_assert (not (null? package-names)))
(manifest (packages->manifest
- (map lookup-package package-names)))
+ (map (compose list lookup-package) package-names)))
(profile (profile (content manifest)))
(profile-directory
(parameterize ((%guile-for-build (default-guile-derivation)))
--
2.37.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] processes: Store packages as manifest.
2022-08-04 7:43 [PATCH] processes: Store packages as manifest Liliana Marie Prikler
@ 2022-08-25 12:13 ` Ricardo Wurmus
2022-10-06 14:34 ` Olivier Dion via
0 siblings, 1 reply; 3+ messages in thread
From: Ricardo Wurmus @ 2022-08-25 12:13 UTC (permalink / raw)
To: Liliana Marie Prikler; +Cc: Olivier Dion, gwl-devel
Hi Liliana,
> This makes handling of package outputs nondestructive. It also fixes
> an unrelated issue in the ordering of process packages – the implicit
> bash-minimal is now ordered *last*.
Thank you for the patch, and my apologies for the long delay in
responding!
I haven’t looked over it yet; since this essentially replaces Olivier’s
previous implementation I’d like to ask:
@Olivier, does this patch address your use-case satisfactorily?
--
Ricardo
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] processes: Store packages as manifest.
2022-08-25 12:13 ` Ricardo Wurmus
@ 2022-10-06 14:34 ` Olivier Dion via
0 siblings, 0 replies; 3+ messages in thread
From: Olivier Dion via @ 2022-10-06 14:34 UTC (permalink / raw)
To: Ricardo Wurmus, Liliana Marie Prikler; +Cc: gwl-devel
On Thu, 25 Aug 2022, Ricardo Wurmus <rekado@elephly.net> wrote:
> Hi Liliana,
>
>> This makes handling of package outputs nondestructive. It also fixes
>> an unrelated issue in the ordering of process packages – the implicit
>> bash-minimal is now ordered *last*.
>
> Thank you for the patch, and my apologies for the long delay in
> responding!
>
> I haven’t looked over it yet; since this essentially replaces Olivier’s
> previous implementation I’d like to ask:
>
> @Olivier, does this patch address your use-case satisfactorily?
Tested-by: Olivier Dion <olivier-dion@proton.me>
--
Olivier Dion
oldiob.dev
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-10-06 14:40 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-04 7:43 [PATCH] processes: Store packages as manifest Liliana Marie Prikler
2022-08-25 12:13 ` Ricardo Wurmus
2022-10-06 14:34 ` Olivier Dion via
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).