[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#65866] [PATCH 0/8] Add built-in builder for Git checkouts
From: |
Maxim Cournoyer |
Subject: |
[bug#65866] [PATCH 0/8] Add built-in builder for Git checkouts |
Date: |
Wed, 20 Sep 2023 12:05:23 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) |
Hi Ludovic,
Ludovic Courtès <ludo@gnu.org> writes:
> * 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’.
[...]
> +
> +(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?)
I know this is code moved from elsewhere, but it seems it'd be useful to
fail hard here with a proper error instead of returning #f silently? Or
add support for recursive clones; was is missing to enable that? It's
at least easy from the git CLI.
> + (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")))))))
I'm not familiar with this code, but was wondering why we need to do
this post processing and handle .gitattributes. I never care about this
on my GNU/Linux machine when using 'git clone'. Perhaps 'git fetch' is
used directly, which is why?
Time passes... Ah! I misread -- that's peculiar to Software Heritage.
> ;;; git.scm ends here
> diff --git a/guix/git-download.scm b/guix/git-download.scm
> index d88f4c40ee..8989b1b463 100644
> --- a/guix/git-download.scm
> +++ b/guix/git-download.scm
> @@ -116,19 +116,16 @@ (define* (git-fetch ref hash-algo hash
> (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 @@ (define* (git-fetch ref hash-algo hash
> (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
LGTM.
--
Thanks,
Maxim
- [bug#65866] [PATCH 0/8] Add built-in builder for Git checkouts, (continued)
- [bug#65866] [PATCH 0/8] Add built-in builder for Git checkouts, Simon Tournier, 2023/09/25
- [bug#65866] [PATCH v2 5/8] build: Add dependency on Git., Ludovic Courtès, 2023/09/22
- [bug#65866] [PATCH v2 5/8] build: Add dependency on Git., Simon Tournier, 2023/09/25
- [bug#65866] Bootstrapping without the daemon and all that, Ludovic Courtès, 2023/09/26
- [bug#65866] Bootstrapping without the daemon and all that, Simon Tournier, 2023/09/26
[bug#65866] [PATCH 2/8] git-download: Honor the ‘GUIX_DOWNLOAD_FALLBACK_TEST’ environment variable., Ludovic Courtès, 2023/09/11
[bug#65866] [PATCH 3/8] perform-download: Remove unused one-argument clause., Ludovic Courtès, 2023/09/11
[bug#65866] [PATCH 1/8] git-download: Move fallback code to (guix build git)., Ludovic Courtès, 2023/09/11
- [bug#65866] [PATCH 0/8] Add built-in builder for Git checkouts,
Maxim Cournoyer <=
[bug#65866] [PATCH 7/8] git-download: Use “builtin:git-download” when available., Ludovic Courtès, 2023/09/11
[bug#65866] [PATCH 6/8] perform-git-download: Use the ‘git’ command captured at configure time., Ludovic Courtès, 2023/09/11
[bug#65866] [PATCH 8/8] tests: Assume ‘git’ is always available., Ludovic Courtès, 2023/09/11