[PATCH] import/utils: alist->package: Include properties.

  • Done
  • quality assurance status badge
Details
2 participants
  • itd
  • Ludovic Courtès
Owner
unassigned
Submitted by
itd
Severity
normal
I
(address . guix-patches@gnu.org)
87mtaqilj6.fsf@localhost
* guix/import/utils.scm (alist->package): Process properties field in input
data and include it in the generated package.
* tests/import-utils.scm ("alist->package with properties"): New test.
---
Hi,

this patch enables the JSON importer to include package properties in its
output and a test to check that the modified function's result is consumable by
functions that use these properties.
Please consider applying it. Thanks!

Regards
itd

guix/import/utils.scm | 9 +++++++++
tests/import-utils.scm | 19 +++++++++++++++++++
2 files changed, 28 insertions(+)

Toggle diff (56 lines)
diff --git a/guix/import/utils.scm b/guix/import/utils.scm
index 7e7d116d1d..8ae04e3cfb 100644
--- a/guix/import/utils.scm
+++ b/guix/import/utils.scm
@@ -428,10 +428,19 @@ (define* (alist->package meta #:optional (known-inputs '()))
((key . value)
(list (symbol->keyword (string->symbol key)) value)))
arguments))
+ (define (process-properties properties)
+ (append-map (match-lambda
+ ((key . value)
+ (acons (string->symbol key) value '())))
+ properties))
(package
(name (assoc-ref meta "name"))
(version (assoc-ref meta "version"))
(source (source-spec->object (assoc-ref meta "source")))
+ (properties
+ (or (and=> (assoc-ref meta "properties")
+ process-properties)
+ '()))
(build-system
(lookup-build-system-by-name
(string->symbol (assoc-ref meta "build-system"))))
diff --git a/tests/import-utils.scm b/tests/import-utils.scm
index 7c6c782917..c47348fc60 100644
--- a/tests/import-utils.scm
+++ b/tests/import-utils.scm
@@ -203,4 +203,23 @@ (define-module (test-import-utils)
("license" . #f))))
(package-native-inputs (alist->package meta))))
+(test-assert "alist->package with properties"
+ (let* ((meta '(("name" . "hello")
+ ("version" . "2.10")
+ ("source" .
+ ;; Use a 'file://' URI so that we don't cause a download.
+ ,(string-append "file://"
+ (search-path %load-path "guix.scm")))
+ ("build-system" . "gnu")
+ ("properties" . (("hidden?" . #t)
+ ("upstream-name" . "hello-upstream")))
+ ("home-page" . "https://gnu.org")
+ ("synopsis" . "Say hi")
+ ("description" . "This package says hi.")
+ ("license" . "GPL-3.0+")))
+ (pkg (alist->package meta)))
+ (and (package? pkg)
+ (equal? (package-upstream-name pkg) "hello-upstream")
+ (hidden-package? pkg))))
+
(test-end "import-utils")

base-commit: 04cad8e29ed85be838921c7fa05f7c5bce94b6d1
--
2.37.3
I
[PATCH] import: print: Quasiquote properties
(address . 58020@debbugs.gnu.org)
874jwyi3iv.fsf@localhost
* guix/import/print.scm (package->code): Quasiquote properties.
* tests/print.scm (pkg-with-properties, pkg-with-properties-source):
New variables.
("package with properties"): New test
---
Hi again,

if I'm not mistaken, it is also required to (quasi)quote the value of
properties. This patch updates package->code to achieve this.
Afterward, the following command:

Toggle quote (18 lines)
> $ guix import json /dev/stdin <<EOF
> {
> "name": "hello",
> "version": "2.10",
> "source": "mirror://gnu/hello/hello-2.10.tar.gz",
> "build-system": "gnu",
> "home-page": "https://www.gnu.org/software/hello/",
> "synopsis": "Hello, GNU world: An example GNU package",
> "description": "GNU Hello prints a greeting.",
> "license": "GPL-3.0+",
> "native-inputs": ["gettext"],
> "properties": {
> "hidden?": true,
> "upstream-name": "hello-upstream"
> }
> }
> EOF

should produce the following package definition:

Toggle quote (20 lines)
> (define-public hello
> (package
> (name "hello")
> (version "2.10")
> (source (origin
> (method url-fetch)
> (uri (string-append "mirror://gnu/hello/hello-" version
> ".tar.gz"))
> (sha256
> (base32
> "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
> (properties `((upstream-name . "hello-upstream") (hidden? . #t)))
> (build-system (@ (guix build-system gnu) gnu-build-system))
> (native-inputs (list (@ (gnu packages gettext) gnu-gettext)))
> (home-page "https://www.gnu.org/software/hello/")
> (synopsis "Hello, GNU world: An example GNU package")
> (description "GNU Hello prints a greeting.")
> (license license:gpl3+)))
> hello

Regards
itd

guix/import/print.scm | 3 ++-
tests/print.scm | 23 +++++++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)

Toggle diff (55 lines)
diff --git a/guix/import/print.scm b/guix/import/print.scm
index 66016145cb..2f54adbd8c 100644
--- a/guix/import/print.scm
+++ b/guix/import/print.scm
@@ -200,7 +200,8 @@ (define (package->code package)
(source ,(source->code source version))
,@(match properties
(() '())
- (_ `((properties ,properties))))
+ (_ `((properties
+ ,(list 'quasiquote (object->code properties #t))))))
,@(if replacement
`((replacement ,replacement))
'())
diff --git a/tests/print.scm b/tests/print.scm
index d9710d1ed3..b4f193b905 100644
--- a/tests/print.scm
+++ b/tests/print.scm
@@ -139,6 +139,25 @@ (define-with-source pkg-with-arguments pkg-with-arguments-source
(description "This is a dummy package.")
(license license:gpl3+)))
+(define-with-source pkg-with-properties pkg-with-properties-source
+ (package
+ (name "test")
+ (version "1.2.3")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "file:///tmp/test-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "070pwb7brdcn1mfvplkd56vjc7lbz4iznzkqvfsakvgbv68k71ah"))))
+ (properties
+ `((hidden? . #t) (upstream-name "test-upstream")))
+ (build-system (@ (guix build-system gnu) gnu-build-system))
+ (home-page "http://gnu.org")
+ (synopsis "Dummy")
+ (description "This is a dummy package.")
+ (license license:gpl3+)))
+
(test-equal "simple package"
`(define-public test ,pkg-source)
(package->code pkg))
@@ -159,4 +178,8 @@ (define-with-source pkg-with-arguments pkg-with-arguments-source
`(define-public test ,pkg-with-arguments-source)
(package->code pkg-with-arguments))
+(test-equal "package with properties"
+ `(define-public test ,pkg-with-properties-source)
+ (package->code pkg-with-properties))
+
(test-end "print")
--
2.37.3
L
L
Ludovic Courtès wrote on 29 Sep 2022 22:31
Re: bug#58020: [PATCH] import/utils: alist->package: Include properties.
(name . itd)(address . itd@net.in.tum.de)(address . 58020-done@debbugs.gnu.org)
87wn9l9b3p.fsf@gnu.org
Hi,

itd <itd@net.in.tum.de> skribis:

Toggle quote (4 lines)
> * guix/import/utils.scm (alist->package): Process properties field in input
> data and include it in the generated package.
> * tests/import-utils.scm ("alist->package with properties"): New test.

[...]

Toggle quote (6 lines)
> + (define (process-properties properties)
> + (append-map (match-lambda
> + ((key . value)
> + (acons (string->symbol key) value '())))
> + properties))

I applied the patch and simplified this one.

Toggle quote (5 lines)
> * guix/import/print.scm (package->code): Quasiquote properties.
> * tests/print.scm (pkg-with-properties, pkg-with-properties-source):
> New variables.
> ("package with properties"): New test

Applied, thanks!

Ludo’.
Closed
?