Subject: [bug#53548] [PATCH] Harden beautify-description

From: Alice BRENON <[email-masked]>
Date: Wed, 2 Feb 2022 16:37:31 +0100

Hi !

Thank you again for the help. I think it looks really better with the
translated reference to the info page. I feared the issues I raised
would yield unending discussions but actually with your edit it's
already pretty neat while remaining very simple. That's inspiring.

For the others interested in this thread, I also made the import of G_
from (guix i18n) explicit because it was being re-exported from (guix
ui), and while I was at it, I made the only used import from (guix ui),
that is fill-paragraph, explicit.

Hope you like this second version better : )

Alice

Le Tue, 01 Feb 2022 00:09:40 +0100,
Ludovic Courtès <[email-masked]> a écrit :

> Hi Alice,
> 
> Alice BRENON <[email-masked]> skribis:
> 
> > Missing metadata in packages used to break their imports, at least
> > for opam packages, until this was fixed by Julien in
> > 24aa7b3c21309b63cc6e8e18d6417d2cddccf6c6. When Xinglu improved the
> > output of descriptions in 155fc235b5e1b41b4665c782365dd2bf11beae9c,
> > it made the imports break again in the case when the `description`
> > field is missing and Julien's fix applies, returning #f in
> > `metadata-ref` instead of crashing. Trouble is:
> > beautify-description expects its description argument to be a
> > string and will crash if this assumption isn't met (when calling
> > the `string-prefix?` predicate).  
> 
> Thanks for explaining!  Some comments:
> 
> > From 22f0523ef3599b45af9448bd4f31f7b8f8ce6af2 Mon Sep 17 00:00:00
> > 2001 From: Alice BRENON <[email-masked]>
> > Date: Wed, 26 Jan 2022 09:27:12 +0100
> > Subject: [PATCH] guix: import: Harden beautify-description.
> >
> > * guix/import/utils.scm (beautify-description): Handle non-string
> > arguments.
> > * guix/import/opam.scm: [use-modules] Make imports explicit for
> > module (guix import utils).  
> 
> [...]
> 
> >    #:use-module ((guix utils) #:select (cache-directory  
> >                                         version>?  
> >                                         call-with-temporary-output-file))
> > -  #:use-module (guix import utils)
> > +  #:use-module ((guix import utils) #:select (beautify-description
> > +                                              guix-hash-url
> > +                                              recursive-import
> > +                                              spdx-string->license
> > +                                              url-fetch))  
> 
> It can’t hurt.
> 
> > +                  ((not (string? description))
> > +                   (let ((home-url "https://guix.gnu.org/")
> > +                         (doc-path "fr/manual/devel/en/html_node/")
> > +                         (page
> > +
> > "Synopses-and-Descriptions.html#Synopses-and-Descriptions"))
> > +                     (string-append
> > +                       "Please fill in the description of your
> > package before "
> > +                       "submitting ! See "
> > +                       home-url doc-path page)))  
> 
> I’d avoid the URL and maybe make the string translatable, like so:
> 
>   (G_ "This package lacks a description …
> Run \"info '(guix) Synopses and Descriptions'\" for more
> information.")
> 
> … where ‘G_’ comes from (guix i18n).
> 
> WDYT?
> 
> This looks like a welcome improvement to me.
> 
> Thanks!
> 
> Ludo’.

From cfb57a40a90bfc31d1b846f3e981469285f1bd7b Mon Sep 17 00:00:00 2001
From: Alice BRENON <[email-masked]>
Date: Wed, 26 Jan 2022 09:27:12 +0100
Subject: [PATCH] guix: import: Harden beautify-description.

* guix/import/utils.scm (beautify-description): Handle non-string
arguments.
[use-modules]: Explicitly import G_ from (guix i18n) and make (guix ui)
import explicit.
* guix/import/opam.scm: [use-modules] Make imports explicit for module
(guix import utils).
---
 guix/import/opam.scm  | 8 ++++++--
 guix/import/utils.scm | 7 ++++++-
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/guix/import/opam.scm b/guix/import/opam.scm
index a6f6fe8c9f..f569c921b1 100644
--- a/guix/import/opam.scm
+++ b/guix/import/opam.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2020 Martin Becze <[email-masked]>
 ;;; Copyright © 2021 Xinglu Chen <[email-masked]>
 ;;; Copyright © 2021 Sarah Morgensen <[email-masked]>
-;;; Copyright © 2021 Alice Brenon <[email-masked]>
+;;; Copyright © 2021, 2022 Alice Brenon <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,7 +42,11 @@ (define-module (guix import opam)
   #:use-module ((guix utils) #:select (cache-directory
                                        version>?
                                        call-with-temporary-output-file))
-  #:use-module (guix import utils)
+  #:use-module ((guix import utils) #:select (beautify-description
+                                              guix-hash-url
+                                              recursive-import
+                                              spdx-string->license
+                                              url-fetch))
   #:use-module ((guix licenses) #:prefix license:)
   #:export (opam->guix-package
             opam-recursive-import
diff --git a/guix/import/utils.scm b/guix/import/utils.scm
index 1c3cfa3e0b..934b224bec 100644
--- a/guix/import/utils.scm
+++ b/guix/import/utils.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2021 Maxim Cournoyer <[email-masked]>
 ;;; Copyright © 2021 Sarah Morgensen <[email-masked]>
 ;;; Copyright © 2021 Xinglu Chen <[email-masked]>
+;;; Copyright © 2022 Alice Brenon <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,10 +38,11 @@ (define-module (guix import utils)
   #:use-module (guix discovery)
   #:use-module (guix build-system)
   #:use-module (guix gexp)
+  #:use-module ((guix i18n) #:select (G_))
   #:use-module (guix store)
   #:use-module (guix download)
   #:use-module (guix sets)
-  #:use-module (guix ui)
+  #:use-module ((guix ui) #:select (fill-paragraph))
   #:use-module (gnu packages)
   #:use-module (ice-9 match)
   #:use-module (ice-9 rdelim)
@@ -241,6 +243,9 @@ (define* (beautify-description description #:optional (length 80))
 a proper sentence and by using two spaces between sentences, and wrap lines at
 LENGTH characters."
   (let ((cleaned (cond
+                  ((not (string? description))
+                   (G_ "This package lacks a description.  Run \"info '(guix)
+                       Synopses and Descriptions'\" for more information."))
                   ((string-prefix? "A " description)
                    (string-append "This package provides a"
                                   (substring description 1)))
-- 
2.34.0