diff mbox series

[bug#47898,core-updates] Add option --xpath0 to xmllint from libxml2

Message ID 2f7a02b8290c9728644a9d2c2caad0b9@selfhosted.xyz
State Accepted
Headers show
Series [bug#47898,core-updates] Add option --xpath0 to xmllint from libxml2 | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue

Commit Message

david larsson May 15, 2021, 7:21 p.m. UTC
> Please also register this patch in gnu/local.mk.  Can you also add your
> copyright at the top of xml.scm?

Done!

> 
> [...]
> 
>> +(define-public libxml2-xpath0
>> +  (package
>> +    (name "libxml2-xpath0")
>> +    (version "2.9.10")
>> +    (source (origin
>> +             (method url-fetch)
>> +             (uri (string-append "ftp://xmlsoft.org/libxml2/libxml2-"
>> +                                 version ".tar.gz"))
>> +             (sha256
>> +              (base32
>> +               
>> "07xynh8hcxb2yb1fs051xrgszjvj37wnxvxgsj10rzmqzy9y3zma"))
>> +             (patches (list (search-patch 
>> "libxml2-Add-option-xpath0.patch")))))
> 
> You can inherit another record in Scheme to avoid duplicating all the
> fields.  Then the package can be shortened to:
> 
>   (define-public libxml2-xpath0
>     (package/inherit libxml2
>       (name "libxml2-xpath0")
>       (source (origin
>                 (inherit (package-source libxml2))
>                 (patches (append (search-patches
> "libxml2-Add-option-xpath0.patch")
>                                  (origin-patches (package-source 
> libxml2))))))
>       (description
>        "...")))
> 
> We should fill out that description to mention how it differs from the
> regular libxml2.  Can you give it a try?  I can make the other changes
> on your behalf, but not sure what to write.
> 
> Thanks,
> Marius

Hi, new patch attached. There's a lint warning though: 
"libxml2-xpath0@2.9.10: no updater for libxml2-xpath0". I don't know 
what it means, maybe it should be fixed before committing?

Best regards,
David

Comments

Marius Bakke May 18, 2021, 8:25 p.m. UTC | #1
david larsson <david.larsson@selfhosted.xyz> skriver:

> Hi, new patch attached. There's a lint warning though: 
> "libxml2-xpath0@2.9.10: no updater for libxml2-xpath0". I don't know 
> what it means, maybe it should be fixed before committing?

That warning is harmless and affects a lot of packages.  I've applied
the patch with a couple minor tweaks:

> +From e1df743329bdfd94fbfdea18303c5c6c6fe13403 Mon Sep 17 00:00:00 2001
> +From: methuselah-0 <david.larsson@selfhosted.xyz>
> +Date: Thu, 1 Apr 2021 08:33:56 +0200
> +Subject: [PATCH] Add option --xpath0
> +
> +---
> + doc/xmllint.xml | 16 ++++++++++++++++
> + xmllint.c       | 32 +++++++++++++++++++++++---------
> + 2 files changed, 39 insertions(+), 9 deletions(-)

I replaced this git-style patch header with a short description and an
URL to the upstream issue, like we usually do.

> +(define-public libxml2-xpath0
> +  (package/inherit libxml2
> +    (name "libxml2-xpath0")
> +    (source (origin
> +              (inherit (package-source libxml2))
> +              (patches (append (search-patches
> +                                "libxml2-xpath0-Add-option-xpath0.patch")
> +                               (origin-patches (package-source libxml2))))))
> +    (description
> +     "Libxml2-xpath0 is like libxml2 but with a patch applied that
> +provides an --xpath0 option to xmllint that enables it to output xpath
> +results with a null delimiter")))

...and sprinkled some markup and punctuation into the description.

Pushed as b58efbc6611550ad9234163e198ff71ace5306ea, thank you!
diff mbox series

Patch

From 70c7a419f060256795737a7dc7122bfbcd456ae6 Mon Sep 17 00:00:00 2001
From: David Larsson <david.larsson@selfhosted.xyz>
Date: Sat, 15 May 2021 20:52:50 +0200
Subject: [PATCH] gnu: libxml2-xpath0: New package with patch for xpath0 option
 to xmllint.

* gnu/packages/patches/libxml2-xpath0-Add-option-xpath0.patch: New file...
* gnu/local.mk: register it.
* gnu/packages/xml.scm (libxml2-xpath0) [source]: ...apply it.
---
 gnu/local.mk                                  |   1 +
 .../libxml2-xpath0-Add-option-xpath0.patch    | 139 ++++++++++++++++++
 gnu/packages/xml.scm                          |  14 ++
 3 files changed, 154 insertions(+)
 create mode 100644 gnu/packages/patches/libxml2-xpath0-Add-option-xpath0.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index c3b0274945..d3e8baf17e 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1366,6 +1366,7 @@  dist_patch_DATA =						\
   %D%/packages/patches/libutils-remove-damaging-includes.patch	\
   %D%/packages/patches/libvdpau-va-gl-unbundle.patch		\
   %D%/packages/patches/libvpx-CVE-2016-2818.patch		\
+  %D%/packages/patches/libxml2-xpath0-Add-option-xpath0.patch	\
   %D%/packages/patches/libxslt-generated-ids.patch		\
   %D%/packages/patches/libxt-guix-search-paths.patch		\
   %D%/packages/patches/lierolibre-check-unaligned-access.patch	\
diff --git a/gnu/packages/patches/libxml2-xpath0-Add-option-xpath0.patch b/gnu/packages/patches/libxml2-xpath0-Add-option-xpath0.patch
new file mode 100644
index 0000000000..3337374a8c
--- /dev/null
+++ b/gnu/packages/patches/libxml2-xpath0-Add-option-xpath0.patch
@@ -0,0 +1,139 @@ 
+From e1df743329bdfd94fbfdea18303c5c6c6fe13403 Mon Sep 17 00:00:00 2001
+From: methuselah-0 <david.larsson@selfhosted.xyz>
+Date: Thu, 1 Apr 2021 08:33:56 +0200
+Subject: [PATCH] Add option --xpath0
+
+---
+ doc/xmllint.xml | 16 ++++++++++++++++
+ xmllint.c       | 32 +++++++++++++++++++++++---------
+ 2 files changed, 39 insertions(+), 9 deletions(-)
+
+diff --git a/doc/xmllint.xml b/doc/xmllint.xml
+index 1008179b..fcdc237e 100644
+--- a/doc/xmllint.xml
++++ b/doc/xmllint.xml
+@@ -70,6 +70,7 @@
+ 			<arg choice="plain"><option>--debug</option></arg>
+ 			<arg choice="plain"><option>--shell</option></arg>
+ 			<arg choice="plain"><option>--xpath "<replaceable class="option">XPath_expression</replaceable>"</option></arg>
++			<arg choice="plain"><option>--xpath0 "<replaceable class="option">XPath_expression</replaceable>"</option></arg>
+ 			<arg choice="plain"><option>--debugent</option></arg>
+ 			<arg choice="plain"><option>--copy</option></arg>
+ 			<arg choice="plain"><option>--recover</option></arg>
+@@ -537,6 +538,21 @@
+ 			node set is serialized in full in the output. In case
+ 			of an empty node set the "XPath set is empty" result
+ 			will be shown and an error exit code will be returned.
++			Results are separated by the newline character.
++		</para>
++	</listitem>
++		</varlistentry>
++
++		<varlistentry>
++	<term><option>--xpath0 "<replaceable class="option">XPath_expression</replaceable>"</option></term>
++	<listitem>
++		<para>
++			Run an XPath expression given as argument and print the
++			result. In case of a nodeset result, each node in the
++			node set is serialized in full in the output. In case
++			of an empty node set the "XPath set is empty" result
++			will be shown and an error exit code will be returned.
++			Results are separated by the null character.
+ 		</para>
+ 	</listitem>
+ 		</varlistentry>
+diff --git a/xmllint.c b/xmllint.c
+index 6ca1bf54..a60e1f4f 100644
+--- a/xmllint.c
++++ b/xmllint.c
+@@ -194,6 +194,7 @@ static int sax1 = 0;
+ #endif /* LIBXML_SAX1_ENABLED */
+ #ifdef LIBXML_XPATH_ENABLED
+ static const char *xpathquery = NULL;
++static const char *xpathsep = "\n";
+ #endif
+ static int options = XML_PARSE_COMPACT | XML_PARSE_BIG_LINES;
+ static int sax = 0;
+@@ -2095,7 +2096,7 @@ static void doXPathDump(xmlXPathObjectPtr cur) {
+             for (i = 0;i < cur->nodesetval->nodeNr;i++) {
+                 node = cur->nodesetval->nodeTab[i];
+                 xmlNodeDumpOutput(buf, NULL, node, 0, 0, NULL);
+-                xmlOutputBufferWrite(buf, 1, "\n");
++		xmlOutputBufferWrite(buf, 1, xpathsep);
+             }
+             xmlOutputBufferClose(buf);
+ #else
+@@ -2104,27 +2105,27 @@ static void doXPathDump(xmlXPathObjectPtr cur) {
+ 	    break;
+         }
+         case XPATH_BOOLEAN:
+-	    if (cur->boolval) printf("true\n");
+-	    else printf("false\n");
++	    if (cur->boolval) printf("true%s", xpathsep);
++	    else printf("false%s", xpathsep);
+ 	    break;
+         case XPATH_NUMBER:
+ 	    switch (xmlXPathIsInf(cur->floatval)) {
+ 	    case 1:
+-		printf("Infinity\n");
++	        printf("Infinity%s", xpathsep);
+ 		break;
+ 	    case -1:
+-		printf("-Infinity\n");
++	        printf("-Infinity%s", xpathsep);
+ 		break;
+ 	    default:
+ 		if (xmlXPathIsNaN(cur->floatval)) {
+-		    printf("NaN\n");
++		    printf("NaN%s", xpathsep);
+ 		} else {
+-		    printf("%0g\n", cur->floatval);
++		    printf("%0g%s", cur->floatval, xpathsep);
+ 		}
+ 	    }
+ 	    break;
+         case XPATH_STRING:
+-	    printf("%s\n", (const char *) cur->stringval);
++	    printf("%s%s", (const char *) cur->stringval, xpathsep);
+ 	    break;
+         case XPATH_UNDEFINED:
+ 	    fprintf(stderr, "XPath Object is uninitialized\n");
+@@ -3098,7 +3099,8 @@ static void usage(FILE *f, const char *name) {
+     fprintf(f, "\t--sax: do not build a tree but work just at the SAX level\n");
+     fprintf(f, "\t--oldxml10: use XML-1.0 parsing rules before the 5th edition\n");
+ #ifdef LIBXML_XPATH_ENABLED
+-    fprintf(f, "\t--xpath expr: evaluate the XPath expression, imply --noout\n");
++    fprintf(f, "\t--xpath expr: evaluate the XPath expression, results are separated by \\n, imply --noout\n");
++    fprintf(f, "\t--xpath0 expr: evaluate the XPath expression, results are separated by \\0, imply --noout\n");
+ #endif
+ 
+     fprintf(f, "\nLibxml project home page: http://xmlsoft.org/\n");
+@@ -3480,6 +3482,13 @@ main(int argc, char **argv) {
+ 	    i++;
+ 	    noout++;
+ 	    xpathquery = argv[i];
++	    xpathsep = "\n";
++        } else if ((!strcmp(argv[i], "-xpath0")) ||
++                   (!strcmp(argv[i], "--xpath0"))) {
++	    i++;
++	    noout++;
++	    xpathquery = argv[i];
++	    xpathsep = "\0";
+ #endif
+ 	} else if ((!strcmp(argv[i], "-oldxml10")) ||
+ 	           (!strcmp(argv[i], "--oldxml10"))) {
+@@ -3712,6 +3721,11 @@ main(int argc, char **argv) {
+ 	    i++;
+ 	    continue;
+ 	}
++        if ((!strcmp(argv[i], "-xpath0")) ||
++	    (!strcmp(argv[i], "--xpath0"))) {
++	    i++;
++	    continue;
++	}
+ #endif
+ 	if ((timing) && (repeat))
+ 	    startTimer();
+-- 
+2.30.2
+
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index 931698a575..28601f0d09 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -31,6 +31,7 @@ 
 ;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 David Larsson <david.larsson@selfhosted.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -218,6 +219,19 @@  hierarchical form with variable field lengths.")
 project (but it is usable outside of the Gnome platform).")
     (license license:x11)))
 
+(define-public libxml2-xpath0
+  (package/inherit libxml2
+    (name "libxml2-xpath0")
+    (source (origin
+              (inherit (package-source libxml2))
+              (patches (append (search-patches
+                                "libxml2-xpath0-Add-option-xpath0.patch")
+                               (origin-patches (package-source libxml2))))))
+    (description
+     "Libxml2-xpath0 is like libxml2 but with a patch applied that
+provides an --xpath0 option to xmllint that enables it to output xpath
+results with a null delimiter")))
+
 (define-public libxlsxwriter
   (package
     (name "libxlsxwriter")
-- 
2.31.0