unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#71586] [PATCH] services: web: Improve nginx formatting for extra-content
@ 2024-06-16  3:57 Richard Sent
  2024-06-19 17:55 ` Tomas Volf
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Richard Sent @ 2024-06-16  3:57 UTC (permalink / raw)
  To: 71586; +Cc: Richard Sent

* gnu/services/web (default-nginx-config): When extra-content is a list, add 4
space indentation and a newline to every line. If it's a string, continue
inserting it directly. This makes the list serialization behavior more
consistent with other services.

Change-Id: Iec8614ba3cfc37292a566197e8d39b352b04846a
---
 gnu/services/web.scm | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 406117c457..094b1e4b45 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -771,7 +771,12 @@ (define (default-nginx-config config)
            "\n"
            (map emit-nginx-upstream-config upstream-blocks)
            (map emit-nginx-server-config server-blocks)
-           extra-content
+           (match extra-content
+             ((? string? extra-content) extra-content)
+             ((? list? extra-content)
+              (map (lambda (line)
+                     (simple-format #f "    ~A\n" line))
+                   extra-content)))
            "\n}\n"))))
 
 (define %nginx-accounts

base-commit: 612e4dd98f7d1d015e405af9d029bede3fe3c280
-- 
2.45.1





^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [bug#71586] [PATCH] services: web: Improve nginx formatting for extra-content
  2024-06-16  3:57 [bug#71586] [PATCH] services: web: Improve nginx formatting for extra-content Richard Sent
@ 2024-06-19 17:55 ` Tomas Volf
  2024-06-19 18:49 ` [bug#71586] [PATCH v2] " Richard Sent
  2024-06-20 16:42 ` [bug#71586] [PATCH v3] " Richard Sent
  2 siblings, 0 replies; 6+ messages in thread
From: Tomas Volf @ 2024-06-19 17:55 UTC (permalink / raw)
  To: Richard Sent; +Cc: 71586

[-- Attachment #1: Type: text/plain, Size: 2364 bytes --]

Hello,

On 2024-06-15 23:57:12 -0400, Richard Sent wrote:
> * gnu/services/web (default-nginx-config): When extra-content is a list, add 4
> space indentation and a newline to every line. If it's a string, continue
> inserting it directly. This makes the list serialization behavior more
> consistent with other services.
>
> Change-Id: Iec8614ba3cfc37292a566197e8d39b352b04846a
> ---
>  gnu/services/web.scm | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/gnu/services/web.scm b/gnu/services/web.scm
> index 406117c457..094b1e4b45 100644
> --- a/gnu/services/web.scm
> +++ b/gnu/services/web.scm
> @@ -771,7 +771,12 @@ (define (default-nginx-config config)
>             "\n"
>             (map emit-nginx-upstream-config upstream-blocks)
>             (map emit-nginx-server-config server-blocks)
> -           extra-content
> +           (match extra-content
> +             ((? string? extra-content) extra-content)
> +             ((? list? extra-content)
> +              (map (lambda (line)
> +                     (simple-format #f "    ~A\n" line))

The format here sadly prevents producing `include' directives with link to the
store, since any file-like object will be just serialized as its representation:

  `("foo"
    "bar"
    ("aa" "bb")
    ,(plain-file "foo" "baz"))

Will end up as:

    foo
    bar
    (aa bb)
    #<<plain-file> name: "foo" content: "baz" references: ()>

Neither the list nor the plain-file are as expected.  What about doing just
this:

    (match extra-content
      ((? string? extra-content) extra-content)
      ((? list? extra-content)
       (map (lambda (line)
              `("    " ,line "\n"))
            extra-content)))

This produces the expected (in my opinion) output:

    foo
    bar
    aabb
    /gnu/store/7pz4iczjvgvn9ikpp1ip50bk6vi4sk7b-foo

Meaning you can now do things like

    (extra-content `(("include " ,%some-file.conf ";")))

And it will work as expected.  It already works like this for raw-content in the
nginx-server-configuration.

Thoughts?

> +                   extra-content)))
>             "\n}\n"))))
>
>  (define %nginx-accounts
>
> base-commit: 612e4dd98f7d1d015e405af9d029bede3fe3c280
> --
> 2.45.1
>
>

Have a nice day,
Tomas Volf

--
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [bug#71586] [PATCH v2] services: web: Improve nginx formatting for extra-content
  2024-06-16  3:57 [bug#71586] [PATCH] services: web: Improve nginx formatting for extra-content Richard Sent
  2024-06-19 17:55 ` Tomas Volf
@ 2024-06-19 18:49 ` Richard Sent
  2024-06-20 16:42 ` [bug#71586] [PATCH v3] " Richard Sent
  2 siblings, 0 replies; 6+ messages in thread
From: Richard Sent @ 2024-06-19 18:49 UTC (permalink / raw)
  To: 71586; +Cc: Richard Sent, ~

* gnu/services/web (default-nginx-config): When extra-content is a list, add 4
space indentation and a newline to every line. If it's a string, continue
inserting it directly. This makes the list serialization behavior more
consistent with other services.

Change-Id: Iec8614ba3cfc37292a566197e8d39b352b04846a
---

Updated according to feedback. I agree that file-like objects should
be lowered into strings like they normally are and not serialized in
their package form.

emit-nginx-upstream-config has a similar issue.

 gnu/services/web.scm | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 406117c457..0572af1310 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -771,7 +771,12 @@ (define (default-nginx-config config)
            "\n"
            (map emit-nginx-upstream-config upstream-blocks)
            (map emit-nginx-server-config server-blocks)
-           extra-content
+           (match extra-content
+             ((? string? extra-content) extra-content)
+             ((? list? extra-content)
+              (map (lambda (line)
+                     `("    " ,line "\n"))
+                   extra-content)))
            "\n}\n"))))
 
 (define %nginx-accounts

base-commit: e32e3d0a03dc17c4c54a91aad053c9036998b601
-- 
2.45.1





^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [bug#71586] [PATCH v3] services: web: Improve nginx formatting for extra-content
  2024-06-16  3:57 [bug#71586] [PATCH] services: web: Improve nginx formatting for extra-content Richard Sent
  2024-06-19 17:55 ` Tomas Volf
  2024-06-19 18:49 ` [bug#71586] [PATCH v2] " Richard Sent
@ 2024-06-20 16:42 ` Richard Sent
  2024-06-20 21:29   ` Tomas Volf
  2024-06-27 10:33   ` bug#71586: " Christopher Baines
  2 siblings, 2 replies; 6+ messages in thread
From: Richard Sent @ 2024-06-20 16:42 UTC (permalink / raw)
  To: 71586
  Cc: ~, Richard Sent, Florian Pelz, Ludovic Courtès,
	Matthew Trzcinski, Maxim Cournoyer

When extra-content is a list, add 4 space indentation and a newline to every
line. If it's a string, continue inserting it directly. This makes the list
serialization behavior more consistent with other services.

* gnu/services/web (default-nginx-config): Support lists.
* doc/guix.texi (Web Services) [nginx-configuration]: Document it.

Change-Id: Iec8614ba3cfc37292a566197e8d39b352b04846a
---
 doc/guix.texi        | 13 +++++++++++--
 gnu/services/web.scm |  9 ++++++++-
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 0102fd0fad..48fc457627 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -31907,8 +31907,17 @@ Web Services
 @end lisp
 
 @item @code{extra-content} (default: @code{""})
-Extra content for the @code{http} block.  Should be string or a string
-valued G-expression.
+Additional content to be appended to the @code{http} block.  Can either
+be a value that can be lowered into a string or a list of such values.
+In the former case, it is inserted directly.  In the latter, it is
+prefixed with indentation and suffixed with a newline.  Nested lists are
+flattened into one line.
+
+@lisp
+(extra-content "include /etc/nginx/custom-config.conf;")
+(extra-content `("include /etc/nginx/custom-config.conf;"
+                 ("include " ,%custom-config.conf ";")))
+@end lisp
 
 @end table
 @end deftp
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 406117c457..ee3499e5cd 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -771,7 +771,14 @@ (define (default-nginx-config config)
            "\n"
            (map emit-nginx-upstream-config upstream-blocks)
            (map emit-nginx-server-config server-blocks)
-           extra-content
+           (match extra-content
+             ((? list? extra-content)
+              (map (lambda (line)
+                     `("    " ,line "\n"))
+                   extra-content))
+             ;; XXX: For compatibility strings and gexp's are inserted
+             ;; directly.
+             (_ extra-content))
            "\n}\n"))))
 
 (define %nginx-accounts

base-commit: e32e3d0a03dc17c4c54a91aad053c9036998b601
-- 
2.45.1





^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [bug#71586] [PATCH v3] services: web: Improve nginx formatting for extra-content
  2024-06-20 16:42 ` [bug#71586] [PATCH v3] " Richard Sent
@ 2024-06-20 21:29   ` Tomas Volf
  2024-06-27 10:33   ` bug#71586: " Christopher Baines
  1 sibling, 0 replies; 6+ messages in thread
From: Tomas Volf @ 2024-06-20 21:29 UTC (permalink / raw)
  To: Richard Sent; +Cc: 71586

[-- Attachment #1: Type: text/plain, Size: 611 bytes --]

On 2024-06-20 12:42:03 -0400, Richard Sent wrote:
> When extra-content is a list, add 4 space indentation and a newline to every
> line. If it's a string, continue inserting it directly. This makes the list
> serialization behavior more consistent with other services.
>
> * gnu/services/web (default-nginx-config): Support lists.
> * doc/guix.texi (Web Services) [nginx-configuration]: Document it.
>
> Change-Id: Iec8614ba3cfc37292a566197e8d39b352b04846a

Reviewed-by: Tomas Volf <~@wolfsden.cz>

--
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#71586: [PATCH v3] services: web: Improve nginx formatting for extra-content
  2024-06-20 16:42 ` [bug#71586] [PATCH v3] " Richard Sent
  2024-06-20 21:29   ` Tomas Volf
@ 2024-06-27 10:33   ` Christopher Baines
  1 sibling, 0 replies; 6+ messages in thread
From: Christopher Baines @ 2024-06-27 10:33 UTC (permalink / raw)
  To: Richard Sent; +Cc: 71586-done

[-- Attachment #1: Type: text/plain, Size: 741 bytes --]

Richard Sent <richard@freakingpenguin.com> writes:

> When extra-content is a list, add 4 space indentation and a newline to every
> line. If it's a string, continue inserting it directly. This makes the list
> serialization behavior more consistent with other services.
>
> * gnu/services/web (default-nginx-config): Support lists.
> * doc/guix.texi (Web Services) [nginx-configuration]: Document it.
>
> Change-Id: Iec8614ba3cfc37292a566197e8d39b352b04846a
> ---
>  doc/guix.texi        | 13 +++++++++++--
>  gnu/services/web.scm |  9 ++++++++-
>  2 files changed, 19 insertions(+), 3 deletions(-)

Thanks for the patch, I forgot to close the issue yesterday but I pushed
this to master as da3e71f472c2335f56c3d07758715a514fdb3a9d.

Chris

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 987 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-06-27 10:35 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-16  3:57 [bug#71586] [PATCH] services: web: Improve nginx formatting for extra-content Richard Sent
2024-06-19 17:55 ` Tomas Volf
2024-06-19 18:49 ` [bug#71586] [PATCH v2] " Richard Sent
2024-06-20 16:42 ` [bug#71586] [PATCH v3] " Richard Sent
2024-06-20 21:29   ` Tomas Volf
2024-06-27 10:33   ` bug#71586: " Christopher Baines

Code repositories for project(s) associated with this public inbox

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

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).