From ed88588931bafd6595cc038b9aeb5e8ff37561a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 18 Jul 2023 12:49:28 +0200 Subject: [PATCH] gnu: commencement: Add git-fetch-from-tarball utility. * gnu/packages/commencement.scm (git-fetch-from-tarball): New procedure. --- gnu/packages/commencement.scm | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm index d0603e62c8..bec3db43e3 100644 --- a/gnu/packages/commencement.scm +++ b/gnu/packages/commencement.scm @@ -57,7 +57,10 @@ (define-module (gnu packages commencement) #:use-module (gnu packages xml) #:use-module (guix gexp) #:use-module (guix packages) + #:use-module ((guix store) #:select (%store-monad)) + #:use-module (guix monads) #:use-module (guix download) + #:use-module ((guix git-download) #:select (git-reference git-file-name)) #:use-module (guix build-system gnu) #:use-module (guix build-system trivial) #:use-module ((guix licenses) #:prefix license:) @@ -90,6 +93,38 @@ (define-module (gnu packages commencement) ;;; ;;; Code: +(define* (git-fetch-from-tarball tarball) + "Return an method equivalent to 'git-fetch', except that it fetches +the checkout from TARBALL, a tarball containing said checkout. + + The purpose of this procedure is to work around bootstrapping issues: +'git-fetch' depends on Git, which is much higher in the dependency graph." + (lambda* (url hash-algo hash + #:optional name + #:key (system (%current-system)) + (guile %bootstrap-guile)) + (mlet %store-monad ((guile (package->derivation guile system))) + (gexp->derivation + (or name "git-checkout") + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils) + (ice-9 ftw) + (ice-9 match)) + (setenv "PATH" + #+(file-append %bootstrap-coreutils&co "/bin")) + (invoke "tar" "xf" #$tarball) + (match (scandir ".") + (("." ".." directory) + (copy-recursively directory #$output))))) + #:recursive? #t + #:hash-algo hash-algo + #:hash hash + #:system system + #:guile-for-build guile + #:graft? #f + #:local-build? #t)))) + (define bootar (package (name "bootar")