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 | ||||
| ;;; 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. | ||||
| ;;; | ||||
|  | @ -18,9 +18,12 @@ | |||
| 
 | ||||
| (define-module (guix build git) | ||||
|   #: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 (ice-9 format) | ||||
|   #:export (git-fetch)) | ||||
|   #:export (git-fetch | ||||
|             git-fetch-with-fallback)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
|  | @ -76,4 +79,41 @@ recursively.  Return #t on success, #f otherwise." | |||
|       (delete-file-recursively ".git") | ||||
|       #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 | ||||
|  |  | |||
|  | @ -116,19 +116,16 @@ HASH-ALGO (a symbol).  Use NAME as the file name, or a generic name if #f." | |||
|   (define modules | ||||
|     (delete '(guix config) | ||||
|             (source-module-closure '((guix build git) | ||||
|                                      (guix build utils) | ||||
|                                      (guix build download-nar) | ||||
|                                      (guix swh))))) | ||||
|                                      (guix build utils))))) | ||||
| 
 | ||||
|   (define build | ||||
|     (with-imported-modules modules | ||||
|       (with-extensions (list guile-json gnutls   ;for (guix swh) | ||||
|       (with-extensions (list guile-json gnutls    ;for (guix swh) | ||||
|                              guile-lzlib) | ||||
|         #~(begin | ||||
|             (use-modules (guix build git) | ||||
|                          (guix build utils) | ||||
|                          (guix build download-nar) | ||||
|                          (guix swh) | ||||
|                          ((guix build utils) | ||||
|                           #:select (set-path-environment-variable)) | ||||
|                          (ice-9 match)) | ||||
| 
 | ||||
|             (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-error-port) 'line) | ||||
| 
 | ||||
|             (or (git-fetch (getenv "git url") (getenv "git commit") | ||||
|                            #$output | ||||
|                            #:recursive? recursive? | ||||
|                            #: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")))))))))) | ||||
|             (git-fetch-with-fallback (getenv "git url") (getenv "git commit") | ||||
|                                      #$output | ||||
|                                      #:recursive? recursive? | ||||
|                                      #:git-command "git"))))) | ||||
| 
 | ||||
|   (mlet %store-monad ((guile (package->derivation guile system))) | ||||
|     (gexp->derivation (or name "git-checkout") build | ||||
|  |  | |||
		Reference in a new issue