summaryrefslogtreecommitdiff
path: root/guix/git-download.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix/git-download.scm')
-rw-r--r--guix/git-download.scm33
1 files changed, 27 insertions, 6 deletions
diff --git a/guix/git-download.scm b/guix/git-download.scm
index 9cc6dd3d94..62e625c715 100644
--- a/guix/git-download.scm
+++ b/guix/git-download.scm
@@ -30,7 +30,9 @@
git-reference-commit
git-reference-recursive?
- git-fetch))
+ git-fetch
+ git-version
+ git-file-name))
;;; Commentary:
;;;
@@ -82,20 +84,39 @@ 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
#:hash hash
#:recursive? #t
- #:guile-for-build guile
- #:local-build? #t)))
+ #:guile-for-build guile)))
+
+(define (git-version version revision commit)
+ "Return the version string for packages using git-download."
+ (string-append version "-" revision "." (string-take commit 7)))
+
+(define (git-file-name name version)
+ "Return the file-name for packages using git-download."
+ (string-append name "-" version "-checkout"))
;;; git-download.scm ends here