diff options
author | Ludovic Courtès <ludo@gnu.org> | 2023-07-18 12:49:28 +0200 |
---|---|---|
committer | Janneke Nieuwenhuizen <janneke@gnu.org> | 2023-07-19 07:32:32 +0200 |
commit | ed88588931bafd6595cc038b9aeb5e8ff37561a8 (patch) | |
tree | 4cfb369e1b41a7f45d87b9b1f953dc1a32b85661 | |
parent | 85f940b0e78caeed52a0de8dc67c4b3be56ef926 (diff) | |
download | guix-ed88588931bafd6595cc038b9aeb5e8ff37561a8.tar.gz |
gnu: commencement: Add git-fetch-from-tarball utility.
* gnu/packages/commencement.scm (git-fetch-from-tarball): New procedure.
-rw-r--r-- | gnu/packages/commencement.scm | 35 |
1 files changed, 35 insertions, 0 deletions
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 @@ #: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 @@ ;;; ;;; Code: +(define* (git-fetch-from-tarball tarball) + "Return an <origin> 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") |