git-download: Use a single download script for all derivations.

That way, we have only one /gnu/store/…-git-download instead of one
/gnu/store/…-PACKAGE-checkout-builder for each package.

This is a followup to ced200328c.

* guix/git-download.scm (git-fetch)[build]: Get the URL, commit, and
recursive parameter using 'getenv'.  Pass #:script-name and #:env-vars
arguments to 'gexp->derivation'.
master
Ludovic Courtès 2016-12-31 15:28:28 +01:00
parent b13a5b4d16
commit c0b2d08bf4
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 15 additions and 3 deletions

View File

@ -82,14 +82,26 @@ HASH-ALGO (a symbol). Use NAME as the file name, or a generic name if #f."
(((names dirs) ...)
dirs)))
(git-fetch '#$(git-reference-url ref)
'#$(git-reference-commit ref)
(git-fetch (getenv "git url") (getenv "git commit")
#$output
#:recursive? '#$(git-reference-recursive? ref)
#:recursive? (call-with-input-string
(getenv "git recursive?")
read)
#:git-command (string-append #+git "/bin/git")))))
(mlet %store-monad ((guile (package->derivation guile system)))
(gexp->derivation (or name "git-checkout") build
;; Use environment variables and a fixed script name so
;; there's only one script in store for all the
;; downloads.
#:script-name "git-download"
#:env-vars
`(("git url" . ,(git-reference-url ref))
("git commit" . ,(git-reference-commit ref))
("git recursive?" . ,(object->string
(git-reference-recursive? ref))))
#:system system
#:local-build? #t ;don't offload repo cloning
#:hash-algo hash-algo