mirror of
https://codeberg.org/guix/guix.git
synced 2025-10-02 02:15:12 +00:00
git-download: Move fallback code to (guix build git).
* guix/build/git.scm (git-fetch-with-fallback): New procedure, with code taken from… * guix/git-download.scm (git-fetch): … here. [modules]: Remove modules that are no longer directly used in ‘build’. [build]: Use ‘git-fetch-with-fallback’.
This commit is contained in:
parent
7f3ebd6dbc
commit
811b249397
2 changed files with 50 additions and 41 deletions
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2014, 2016, 2019 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2014, 2016, 2019, 2023 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -18,9 +18,12 @@
|
||||||
|
|
||||||
(define-module (guix build git)
|
(define-module (guix build git)
|
||||||
#:use-module (guix build utils)
|
#:use-module (guix build utils)
|
||||||
|
#:autoload (guix build download-nar) (download-nar)
|
||||||
|
#:autoload (guix swh) (%verify-swh-certificate? swh-download)
|
||||||
#:use-module (srfi srfi-34)
|
#:use-module (srfi srfi-34)
|
||||||
#:use-module (ice-9 format)
|
#:use-module (ice-9 format)
|
||||||
#:export (git-fetch))
|
#:export (git-fetch
|
||||||
|
git-fetch-with-fallback))
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;;;
|
;;;
|
||||||
|
@ -76,4 +79,41 @@ recursively. Return #t on success, #f otherwise."
|
||||||
(delete-file-recursively ".git")
|
(delete-file-recursively ".git")
|
||||||
#t)))
|
#t)))
|
||||||
|
|
||||||
|
|
||||||
|
(define* (git-fetch-with-fallback url commit directory
|
||||||
|
#:key (git-command "git") recursive?)
|
||||||
|
"Like 'git-fetch', fetch COMMIT from URL into DIRECTORY, but fall back to
|
||||||
|
alternative methods when fetching from URL fails: attempt to download a nar,
|
||||||
|
and if that also fails, download from the Software Heritage archive."
|
||||||
|
(or (git-fetch url commit directory
|
||||||
|
#:recursive? recursive?
|
||||||
|
#:git-command git-command)
|
||||||
|
(download-nar directory)
|
||||||
|
|
||||||
|
;; As a last resort, attempt to download from Software Heritage.
|
||||||
|
;; Disable X.509 certificate verification to avoid depending
|
||||||
|
;; on nss-certs--we're authenticating the checkout anyway.
|
||||||
|
;; XXX: Currently recursive checkouts are not supported.
|
||||||
|
(and (not recursive?)
|
||||||
|
(parameterize ((%verify-swh-certificate? #f))
|
||||||
|
(format (current-error-port)
|
||||||
|
"Trying to download from Software Heritage...~%")
|
||||||
|
|
||||||
|
(swh-download url commit directory)
|
||||||
|
(when (file-exists?
|
||||||
|
(string-append directory "/.gitattributes"))
|
||||||
|
;; Perform CR/LF conversion and other changes
|
||||||
|
;; specificied by '.gitattributes'.
|
||||||
|
(invoke git-command "-C" directory "init")
|
||||||
|
(invoke git-command "-C" directory "config" "--local"
|
||||||
|
"user.email" "you@example.org")
|
||||||
|
(invoke git-command "-C" directory "config" "--local"
|
||||||
|
"user.name" "Your Name")
|
||||||
|
(invoke git-command "-C" directory "add" ".")
|
||||||
|
(invoke git-command "-C" directory "commit" "-am" "init")
|
||||||
|
(invoke git-command "-C" directory "read-tree" "--empty")
|
||||||
|
(invoke git-command "-C" directory "reset" "--hard")
|
||||||
|
(delete-file-recursively
|
||||||
|
(string-append directory "/.git")))))))
|
||||||
|
|
||||||
;;; git.scm ends here
|
;;; git.scm ends here
|
||||||
|
|
|
@ -116,19 +116,16 @@ HASH-ALGO (a symbol). Use NAME as the file name, or a generic name if #f."
|
||||||
(define modules
|
(define modules
|
||||||
(delete '(guix config)
|
(delete '(guix config)
|
||||||
(source-module-closure '((guix build git)
|
(source-module-closure '((guix build git)
|
||||||
(guix build utils)
|
(guix build utils)))))
|
||||||
(guix build download-nar)
|
|
||||||
(guix swh)))))
|
|
||||||
|
|
||||||
(define build
|
(define build
|
||||||
(with-imported-modules modules
|
(with-imported-modules modules
|
||||||
(with-extensions (list guile-json gnutls ;for (guix swh)
|
(with-extensions (list guile-json gnutls ;for (guix swh)
|
||||||
guile-lzlib)
|
guile-lzlib)
|
||||||
#~(begin
|
#~(begin
|
||||||
(use-modules (guix build git)
|
(use-modules (guix build git)
|
||||||
(guix build utils)
|
((guix build utils)
|
||||||
(guix build download-nar)
|
#:select (set-path-environment-variable))
|
||||||
(guix swh)
|
|
||||||
(ice-9 match))
|
(ice-9 match))
|
||||||
|
|
||||||
(define recursive?
|
(define recursive?
|
||||||
|
@ -151,38 +148,10 @@ HASH-ALGO (a symbol). Use NAME as the file name, or a generic name if #f."
|
||||||
(setvbuf (current-output-port) 'line)
|
(setvbuf (current-output-port) 'line)
|
||||||
(setvbuf (current-error-port) 'line)
|
(setvbuf (current-error-port) 'line)
|
||||||
|
|
||||||
(or (git-fetch (getenv "git url") (getenv "git commit")
|
(git-fetch-with-fallback (getenv "git url") (getenv "git commit")
|
||||||
#$output
|
#$output
|
||||||
#:recursive? recursive?
|
#:recursive? recursive?
|
||||||
#:git-command "git")
|
#:git-command "git")))))
|
||||||
(download-nar #$output)
|
|
||||||
|
|
||||||
;; As a last resort, attempt to download from Software Heritage.
|
|
||||||
;; Disable X.509 certificate verification to avoid depending
|
|
||||||
;; on nss-certs--we're authenticating the checkout anyway.
|
|
||||||
;; XXX: Currently recursive checkouts are not supported.
|
|
||||||
(and (not recursive?)
|
|
||||||
(parameterize ((%verify-swh-certificate? #f))
|
|
||||||
(format (current-error-port)
|
|
||||||
"Trying to download from Software Heritage...~%")
|
|
||||||
|
|
||||||
(swh-download (getenv "git url") (getenv "git commit")
|
|
||||||
#$output)
|
|
||||||
(when (file-exists?
|
|
||||||
(string-append #$output "/.gitattributes"))
|
|
||||||
;; Perform CR/LF conversion and other changes
|
|
||||||
;; specificied by '.gitattributes'.
|
|
||||||
(invoke "git" "-C" #$output "init")
|
|
||||||
(invoke "git" "-C" #$output "config" "--local"
|
|
||||||
"user.email" "you@example.org")
|
|
||||||
(invoke "git" "-C" #$output "config" "--local"
|
|
||||||
"user.name" "Your Name")
|
|
||||||
(invoke "git" "-C" #$output "add" ".")
|
|
||||||
(invoke "git" "-C" #$output "commit" "-am" "init")
|
|
||||||
(invoke "git" "-C" #$output "read-tree" "--empty")
|
|
||||||
(invoke "git" "-C" #$output "reset" "--hard")
|
|
||||||
(delete-file-recursively
|
|
||||||
(string-append #$output "/.git"))))))))))
|
|
||||||
|
|
||||||
(mlet %store-monad ((guile (package->derivation guile system)))
|
(mlet %store-monad ((guile (package->derivation guile system)))
|
||||||
(gexp->derivation (or name "git-checkout") build
|
(gexp->derivation (or name "git-checkout") build
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue