[PATCH] download: Add url-fetch/xz-file.

  • Done
  • quality assurance status badge
Details
3 participants
  • Hilton Chain
  • Ludovic Courtès
  • Tobias Geerinckx-Rice
Owner
unassigned
Submitted by
Hilton Chain
Severity
normal
H
H
Hilton Chain wrote on 25 Jan 2023 10:07
(address . guix-patches@gnu.org)(address . guix-devel@gnu.org)
87sffz2d9a.wl-hako@ultrarare.space
* guix/download.scm (url-fetch/xz-file): New variable.
---
guix/download.scm | 43 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)

Toggle diff (65 lines)
diff --git a/guix/download.scm b/guix/download.scm
index 2e9ecb43fc..cce62c4185 100644
--- a/guix/download.scm
+++ b/guix/download.scm
@@ -41,6 +41,7 @@ (define-module (guix download)
(url-fetch* . url-fetch)
url-fetch/executable
url-fetch/tarbomb
+ url-fetch/xz-file
url-fetch/zipbomb
download-to-store))
@@ -602,6 +603,48 @@ (define tar
#:graft? #f
#:local-build? #t)))
+(define* (url-fetch/xz-file url hash-algo hash
+ #:optional name
+ #:key (system (%current-system))
+ (guile (default-guile)))
+ "Similar to 'url-fetch' but decompress the xz file at URL as the result.
+This is mainly used for adding xz-compressed patches to a origin definition."
+ (define file-name
+ (match url
+ ((head _ ...)
+ (basename head))
+ (_
+ (basename url))))
+ (define xz
+ (module-ref (resolve-interface '(gnu packages compression)) 'xz))
+
+ (mlet %store-monad ((drv (url-fetch* url hash-algo hash
+ (or name (basename file-name ".xz"))
+ #:system system
+ #:guile guile))
+ (guile (package->derivation guile system)))
+ ;; Take the xz file, and simply decompress it.
+ ;; Use ungrafted xz so that the resulting file doesn't depend on whether
+ ;; grafts are enabled.
+ (gexp->derivation (or name file-name)
+ (with-imported-modules '((guix build utils))
+ #~(begin
+ (use-modules (guix build utils))
+ (setenv "XZ_OPT"
+ (string-join (%xz-parallel-args)))
+
+ (copy-file #$drv #$file-name)
+ (make-file-writable #$file-name)
+ (invoke (string-append #+xz "/bin/unxz")
+ #$file-name)
+
+ (copy-file (basename #$file-name ".xz")
+ #$output)))
+ #:system system
+ #:guile-for-build guile
+ #:graft? #f
+ #:local-build? #t)))
+
(define* (url-fetch/zipbomb url hash-algo hash
#:optional name
#:key (system (%current-system))

base-commit: 718223c58c20fa066527fb30da2b5dccca82913f
--
2.39.1
L
L
Ludovic Courtès wrote on 25 Feb 2023 18:48
(name . Hilton Chain)(address . hako@ultrarare.space)
87lekly6u8.fsf@gnu.org
Hi,

Hilton Chain <hako@ultrarare.space> skribis:

Toggle quote (2 lines)
> * guix/download.scm (url-fetch/xz-file): New variable.

This LGTM, but do you know of a package that would use it?

I think we should add it if and only if it’s going to be used in Guix
proper.

Thanks,
Ludo’.
T
T
Tobias Geerinckx-Rice wrote on 25 Feb 2023 20:25
(name . Hilton Chain)(address . hako@ultrarare.space)
16189d896f675c30ba117222b7dd36da@tobias.gr
Hi Hilton,

I agree with Ludo' and also wonder if a generic
‘url-fetch/compressed-file’ wouldn't be better. There are closure
arguments to be made for this xz-only approach. I don't know if they're
convincing. Cluebats welcome.

(I was going to bring up ‘url-fetch/tarbomb’ as an example, but it
doesn't actually handle anything besides gzip! Madness.)

On 2023-01-25 10:07, Hilton Chain wrote:
Toggle quote (3 lines)
> + (setenv "XZ_OPT"
> + (string-join (%xz-parallel-args)))

Why set this kluge…

Toggle quote (3 lines)
> + (invoke (string-append #+xz "/bin/unxz")
> + #$file-name)

…when we have full control over xz's arguments?

Kind regards,

T G-R

Sent from a Web browser. Excuse or enjoy my brevity.
L
L
Ludovic Courtès wrote on 16 Mar 2023 12:06
control message for bug #61052
(address . control@debbugs.gnu.org)
875yb1gdl1.fsf@gnu.org
tags 61052 + moreinfo
quit
H
H
Hilton Chain wrote on 3 Jul 2023 09:37
Re: [PATCH] download: Add url-fetch/xz-file.
(address . 61052-close@debbugs.gnu.org)
87r0pptphx.wl-hako@ultrarare.space
On Sun, 26 Feb 2023 03:25:24 +0800,
Tobias Geerinckx-Rice wrote:
Toggle quote (28 lines)
>
> Hi Hilton,
>
> I agree with Ludo' and also wonder if a generic
> ‘url-fetch/compressed-file’ wouldn't be better. There are closure
> arguments to be made for this xz-only approach. I don't know if
> they're convincing. Cluebats welcome.
>
> (I was going to bring up ‘url-fetch/tarbomb’ as an example, but it
> doesn't actually handle anything besides gzip! Madness.)
>
> On 2023-01-25 10:07, Hilton Chain wrote:
> > + (setenv "XZ_OPT"
> > + (string-join (%xz-parallel-args)))
>
> Why set this kluge…
>
> > + (invoke (string-append #+xz "/bin/unxz")
> > + #$file-name)
>
> …when we have full control over xz's arguments?
>
> Kind regards,
>
> T G-R
>
> Sent from a Web browser. Excuse or enjoy my brevity.

Sorry for the long delay...

Yes, I would prefer a generic approach. But currently I don't have a
usecase with this url-fetch/xz-file or something more generic, so I'll
close the issue for now.
?
Your comment

This issue is archived.

To comment on this conversation send an email to 61052@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 61052
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch