[PATCH] Add (guix git-repo-download).

DoneSubmitted by Danny Milosavljevic.
Details
3 participants
  • Danny Milosavljevic
  • Jakub Kądziołka
  • Mathieu Othacehe
Owner
unassigned
Severity
normal
D
D
Danny Milosavljevic wrote on 10 Aug 2020 13:39
(address . guix-patches@gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200810113931.10003-1-dannym@scratchpost.org
* guix/build/git-repo.scm: New file.* guix/git-repo-download.scm: New file.* Makefile.am (MODULES): Add them.--- Makefile.am | 2 + guix/build/git-repo.scm | 74 +++++++++++++++++ guix/git-repo-download.scm | 158 +++++++++++++++++++++++++++++++++++++ 3 files changed, 234 insertions(+) create mode 100644 guix/build/git-repo.scm create mode 100644 guix/git-repo-download.scm
Toggle diff (264 lines)diff --git a/Makefile.am b/Makefile.amindex 1e2c26f5ac..9c27113673 100644--- a/Makefile.am+++ b/Makefile.am@@ -82,6 +82,7 @@ MODULES = \ guix/discovery.scm \ guix/bzr-download.scm \ guix/git-download.scm \+ guix/git-repo-download.scm \ guix/hg-download.scm \ guix/swh.scm \ guix/monads.scm \@@ -176,6 +177,7 @@ MODULES = \ guix/build/bzr.scm \ guix/build/copy-build-system.scm \ guix/build/git.scm \+ guix/build/git-repo.scm \ guix/build/hg.scm \ guix/build/glib-or-gtk-build-system.scm \ guix/build/gnu-bootstrap.scm \diff --git a/guix/build/git-repo.scm b/guix/build/git-repo.scmnew file mode 100644index 0000000000..571a022224--- /dev/null+++ b/guix/build/git-repo.scm@@ -0,0 +1,74 @@+;;; GNU Guix --- Functional package management for GNU+;;; Copyright © 2014, 2016, 2019 Ludovic Courtès <ludo@gnu.org>+;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>+;;;+;;; This file is part of GNU Guix.+;;;+;;; GNU Guix is free software; you can redistribute it and/or modify it+;;; under the terms of the GNU General Public License as published by+;;; the Free Software Foundation; either version 3 of the License, or (at+;;; your option) any later version.+;;;+;;; GNU Guix is distributed in the hope that it will be useful, but+;;; WITHOUT ANY WARRANTY; without even the implied warranty of+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+;;; GNU General Public License for more details.+;;;+;;; You should have received a copy of the GNU General Public License+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.++(define-module (guix build git-repo)+ #:use-module (guix build utils)+ #:use-module (srfi srfi-34)+ #:use-module (ice-9 format)+ #:export (git-repo-fetch))++;;; Commentary:+;;;+;;; This is the build-side support code of (guix git-repo-download). It+;;; allows a Git-repo repository to be cloned and checked out at a specific+;;; revision.+;;;+;;; Code:++(define* (git-repo-fetch manifest-url manifest-revision directory+ #:key (git-repo-command "git-repo"))+ "Fetch packages according to the manifest at MANIFEST-URL with+MANIFEST-REVISION. MANIFEST-REVISION must be either a revision+or a branch. Return #t on success, #f otherwise."++ ;; Disable TLS certificate verification. The hash of the checkout is known+ ;; in advance anyway.+ (setenv "GIT_SSL_NO_VERIFY" "true")++ (mkdir-p directory)++ (guard (c ((invoke-error? c)+ (format (current-error-port)+ "git-repo-fetch: '~a~{ ~a~}' failed with exit code ~a~%"+ (invoke-error-program c)+ (invoke-error-arguments c)+ (or (invoke-error-exit-status c) ;XXX: not quite accurate+ (invoke-error-stop-signal c)+ (invoke-error-term-signal c)))+ (delete-file-recursively directory)+ #f))+ (with-directory-excursion directory+ (invoke git-repo-command "init" "-u" manifest-url "-b" manifest-revision+ "--depth=1")+ (invoke git-repo-command "sync" "-c" "--fail-fast" "-v" "-j" "3")++ ;; Delete vendor/**/.git, system/**/.git, toolchain/**/.git,+ ;; .repo/**/.git etc since they contain timestamps.+ (for-each delete-file-recursively+ (find-files "." "^\\.git$" #:directories? #t))++ ;; Delete git state directories since they contain timestamps.+ (for-each delete-file-recursively+ (find-files ".repo" "^.*\\.git$" #:directories? #t))++ ;; This file contains timestamps.+ (delete-file ".repo/.repo_fetchtimes.json")+ #t)))++;;; git-repo.scm ends herediff --git a/guix/git-repo-download.scm b/guix/git-repo-download.scmnew file mode 100644index 0000000000..27f7f1fa8d--- /dev/null+++ b/guix/git-repo-download.scm@@ -0,0 +1,158 @@+;;; GNU Guix --- Functional package management for GNU+;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>+;;; Copyright © 2017 Mathieu Lirzin <mthl@gnu.org>+;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>+;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>+;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>+;;;+;;; This file is part of GNU Guix.+;;;+;;; GNU Guix is free software; you can redistribute it and/or modify it+;;; under the terms of the GNU General Public License as published by+;;; the Free Software Foundation; either version 3 of the License, or (at+;;; your option) any later version.+;;;+;;; GNU Guix is distributed in the hope that it will be useful, but+;;; WITHOUT ANY WARRANTY; without even the implied warranty of+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+;;; GNU General Public License for more details.+;;;+;;; You should have received a copy of the GNU General Public License+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.++(define-module (guix git-repo-download)+ #:use-module (guix gexp)+ #:use-module (guix store)+ #:use-module (guix monads)+ #:use-module (guix records)+ #:use-module (guix packages)+ #:use-module (guix modules)+ #:autoload (guix build-system gnu) (standard-packages)+ #:use-module (git) ; FIXME Remove+ #:use-module (ice-9 match)+ #:use-module (ice-9 vlist)+ #:use-module (srfi srfi-1)+ #:use-module (srfi srfi-34)+ #:use-module (srfi srfi-35)+ #:export (git-repo-reference+ git-repo-reference?+ git-repo-reference-mainfest-url+ git-repo-reference-revision++ git-repo-fetch+ git-repo-version+ git-repo-file-name))++;;; Commentary:+;;;+;;; An <origin> method that fetches a specific commit from a git-repo+;;; repository.+;;; The repository's manifest (URL and revision) can be specified with a+;; <git-repo-reference> object.+;;;+;;; Code:++(define-record-type* <git-repo-reference>+ git-repo-reference make-git-repo-reference+ git-repo-reference?+ (manifest-url git-repo-reference-manifest-url)+ (manifest-revision git-repo-reference-manifest-revision))++(define (git-repo-package)+ "Return the default git-repo package."+ (let ((distro (resolve-interface '(gnu packages android))))+ (module-ref distro 'git-repo)))++(define* (git-repo-fetch ref hash-algo hash+ #:optional name+ #:key (system (%current-system)) (guile (default-guile))+ (git-repo (git-repo-package)))+ "Return a fixed-output derivation that fetches REF, a <git-repo-reference>+object. The output is expected to have recursive hash HASH of type+HASH-ALGO (a symbol). Use NAME as the file name, or a generic name if #f."+ ;; TODO: Remove.+ (define inputs+ (standard-packages))++ (define zlib+ (module-ref (resolve-interface '(gnu packages compression)) 'zlib))++ (define guile-json+ (module-ref (resolve-interface '(gnu packages guile)) 'guile-json-3))++ (define gnutls+ (module-ref (resolve-interface '(gnu packages tls)) 'gnutls))++ (define config.scm+ (scheme-file "config.scm"+ #~(begin+ (define-module (guix config)+ #:export (%libz))++ (define %libz+ #+(file-append zlib "/lib/libz")))))++ (define modules+ (cons `((guix config) => ,config.scm)+ (delete '(guix config)+ (source-module-closure '((guix build git-repo)+ (guix build utils)+ (guix build download-nar))))))++ (define build+ (with-imported-modules modules+ (with-extensions (list guile-json gnutls) ;for (guix swh)+ #~(begin+ (use-modules (guix build git-repo)+ (guix build utils)+ (guix build download-nar)+ (ice-9 match))++ ;; The 'git submodule' commands expects Coreutils, sed,+ ;; grep, etc. to be in $PATH.+ (set-path-environment-variable "PATH" '("bin")+ (match '#+inputs+ (((names dirs outputs ...) ...)+ dirs)))++ (setvbuf (current-output-port) 'line)+ (setvbuf (current-error-port) 'line)++ (or (git-repo-fetch (getenv "git-repo manifest-url")+ (getenv "git-repo manifest-revision")+ #$output+ #:git-repo-command+ (string-append #+git-repo "/bin/repo"))+ (download-nar #$output))))))++ (mlet %store-monad ((guile (package->derivation guile system)))+ (gexp->derivation (or name "git-repo-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-repo-download"+ #:env-vars+ `(("git-repo manifest-url" .+ ,(git-repo-reference-manifest-url ref))+ ("git-repo manifest-revision" .+ ,(git-repo-reference-manifest-revision ref)))+ #:leaked-env-vars '("http_proxy" "https_proxy"+ "LC_ALL" "LC_MESSAGES" "LANG"+ "COLUMNS")+ #:system system+ #:local-build? #t ;don't offload repo cloning+ #:hash-algo hash-algo+ #:hash hash+ #:recursive? #t+ #:guile-for-build guile)))++(define (git-repo-version version revision)+ "Return the version string for packages using git-repo-download."+ (string-append version "-" (string-join (string-split revision #\/) "_")))++(define (git-repo-file-name name version)+ "Return the file-name for packages using git-repo-download."+ (string-append name "-" version "-checkout"))++
J
J
Jakub Kądziołka wrote on 10 Aug 2020 16:50
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)(address . guix-patches@gnu.org)
20200810145058.bxmw2kealjvk5a5x@gravity
On Mon, Aug 10, 2020 at 01:39:31PM +0200, Danny Milosavljevic wrote:
Toggle quote (11 lines)> * guix/build/git-repo.scm: New file.> * guix/git-repo-download.scm: New file.> * Makefile.am (MODULES): Add them.> ---> Makefile.am | 2 +> guix/build/git-repo.scm | 74 +++++++++++++++++> guix/git-repo-download.scm | 158 +++++++++++++++++++++++++++++++++++++> 3 files changed, 234 insertions(+)> create mode 100644 guix/build/git-repo.scm> create mode 100644 guix/git-repo-download.scm
Danny,
I think the commit message and/or commentary is written somewhatconfusingly here. It took me a while to realize that "git-repo" is thename of a tool that manages a multi-repository, and not just short for"git repository".
How about replacing "git-repo repository" with "repository managed withthe git-repo tool" or "git-repo-based multirepository"?
Regards,Jakub Kądziołka
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEE5Xa/ss9usT31cTO54xWnWEYTFWQFAl8xXtIACgkQ4xWnWEYTFWQkiBAAtd6HVZbY7a1ySNBYXmoBVc2p7kdVqVU0MbD/0xaoTkxuQe6pqgdpKzU+LnjgdGLwiDVffToM0RteZfusrS45NLjYWLJLKrzu+8NDDrSqUcL4jzE+x7fec75sb25cgVSwkzh+Evxt/nbBJ12aPXStEVwTc6vip1mlrOlBGpwms7ZwpMYxsv0Lx8Pj5TdmbVz7pfPziIMMWerCKidrerAweXUXTjkLVg4m6+GmX4ifJqc4k/yS+QwETtWiv60Agk8dZheXMIfdnpmaWIeSHpk71T8yJVpok2hrfyhVIdLWqFR73oa4v8JNPPiLDZApc4AboHr8gPVPKlLNmG5LiqonZ0sKQ+h9/X9TNUkGTNuwG3zKek/hT9K4ETq02lO1I8Bw0J9hPnxaG1dWnAb+LIGqBMvw68ibL4K4tvMZdDdih6KdFQr70tMEt5MBDg41XfRajuTHOPng0iltHLmvN0/qWczkcR6Cko+ttrtVivZ2OZtIXrOetlk7oZorXGuQzpks7gMKN+/oxO8w2Nuv5yiodSSdDEPkrNH62NYCKG5KMUrZmcn+cD0y4lpEuuqQU/eHtEF6911NxdLUCjRvWv0ZLxleAcVUUyRHBLEUYSiO1fpBwq+7Ue56slMZjlTjm9XdAqXWNFImS/3f+QZEEK6g5XsXIZp/Fj/5p52Iw4hsKt0==2tG3-----END PGP SIGNATURE-----

D
D
Danny Milosavljevic wrote on 10 Aug 2020 17:05
(name . Jakub Kądziołka)(address . kuba@kadziolka.net)(address . 42800@debbugs.gnu.org)
20200810170512.1018ca51@scratchpost.org
Hi,
On Mon, 10 Aug 2020 16:50:58 +0200Jakub Kądziołka <kuba@kadziolka.net> wrote:
Toggle quote (7 lines)> I think the commit message and/or commentary is written somewhat> confusingly here. It took me a while to realize that "git-repo" is the> name of a tool that manages a multi-repository, and not just short for> "git repository".> How about replacing "git-repo repository" with "repository managed with> the git-repo tool" or "git-repo-based multirepository"?
Sure. Where? In the "Commentary" comment? Good idea.
The naming "git-repo" is not great. To be fair to upstream, their tool iscalled "repo", not "git-repo". Not sure if that's better though.
Also, I thought about naming our downloader (guix repo-download) instead of(guix git-repo-download), but I thought that wouldn't improve things either.Would it?
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCgAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl8xYigACgkQ5xo1VCwwuqVkRAf/S8giQQHQXE/Z504UMcZHWS7ackP3K460S2q2ZFj5TaRGU0p5R0Ai/fFyCx3SnULe8WHlmJC84O4IuPJBvIjrxRQmLMS+aqQXBglHKvAKhs5WIH/ybZlz10lkHdeDS37zhfyx4jwIEq6UOXjCsibRO264h5STWAoEl0pNri0nqrz/pzIkCx2tq1v5avL3CjSW0/Xaaj3FAwvPGnZxAnH3b355rZt/9+5apv4cmFjvWUDa7s7ikaiLnNckoILm9PBsKSpBUk4o1VbZmS1mnGRQO2PvaSkBOyipP4smod+sX4XTBni7WiLwdXHWR/0e9uiZrQTyBkjWys+4Q9Z0CfRvig===UdgZ-----END PGP SIGNATURE-----

J
J
Jakub Kądziołka wrote on 10 Aug 2020 17:38
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)(address . 42800@debbugs.gnu.org)
20200810153842.2nii3vcihuul6zkp@gravity
On Mon, Aug 10, 2020 at 05:05:12PM +0200, Danny Milosavljevic wrote:
Toggle quote (14 lines)> Hi,> > On Mon, 10 Aug 2020 16:50:58 +0200> Jakub Kądziołka <kuba@kadziolka.net> wrote:> > > I think the commit message and/or commentary is written somewhat> > confusingly here. It took me a while to realize that "git-repo" is the> > name of a tool that manages a multi-repository, and not just short for> > "git repository".> > How about replacing "git-repo repository" with "repository managed with> > the git-repo tool" or "git-repo-based multirepository"?> > Sure. Where? In the "Commentary" comment? Good idea.
Yup.
Toggle quote (7 lines)> The naming "git-repo" is not great. To be fair to upstream, their tool is> called "repo", not "git-repo". Not sure if that's better though.> > Also, I thought about naming our downloader (guix repo-download) instead of> (guix git-repo-download), but I thought that wouldn't improve things either.> Would it?
Is the tool used at all outside of Android? Perhapsandroid-repo-download would be a better disambugator?
Regards,Jakub Kądziołka
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEE5Xa/ss9usT31cTO54xWnWEYTFWQFAl8xagIACgkQ4xWnWEYTFWR5LQ//UphqJtZ6usEkVAjP0rdpQCZvYKEeG4MnCE0qvjvFvAWiBbiGRrtvWRM5E8Ao6mQ+IY9Nh/28/uhsNl4JEC0ydffMs0VzaxY8AdXzlXWJ+Es92T4m0C1zW2zbKaOD0mDC71SL2l/lMzmPcO4U7mm1opkmPUDY/VqJilRKATcaUcVt2tnGryrgaPtRjdA9s8vCUNEtkJLyX12NUwwGYZgzCxTv6VCN16OvPpB8lV2ah5Gv4W8L3m+dpiMn6/Ow19mEx2JFQVSZivHsCPsQQP0daeaxkyWU7xqwWT/smyxrnhRluGkyCN0HG+OpQFprvSTP7RbgG6FhyJ39PppRW20fOAnXp4ZvIMWLLrymEcPTTy9HlNYMtlbZoT+kZTlpc3eFtAlzV8Udc6Z23z7Rp4u0tmFUkprEYknHA53h3uiQRq/tZnk92yGuj6yR96XgIglWB/WI6UXDIZOR59JzfeYDC4kBptOIuZiVIB+OL9MjHDRPPbzUUVhxs8Tsh3hi+YKQYlUycC3v4PCLEI+EWcUqiQny/Bpb8k5+8xsK+mgawKn7NzEFjQlp6JwveoE1R9dy+zMcr0OUeCY+z4wCfiHvJXdFKB9XMzGFtbWCMQr/3ENg1mE2Y3CbI2nD8KQsx/wKODLV1mQ1Dhvj5lWo10/MsaRWrPdLC0ejKFhOKGZHV00==foMQ-----END PGP SIGNATURE-----

D
D
Danny Milosavljevic wrote on 13 Aug 2020 00:12
[PATCH v2] Add (guix android-repo-download).
(address . 42800@debbugs.gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20200812221208.31262-1-dannym@scratchpost.org
* guix/build/android-repo.scm: New file.* guix/android-repo-download.scm: New file.* Makefile.am (MODULES): Add them.--- Makefile.am | 2 + guix/android-repo-download.scm | 160 +++++++++++++++++++++++++++++++++ guix/build/android-repo.scm | 74 +++++++++++++++ 3 files changed, 236 insertions(+) create mode 100644 guix/android-repo-download.scm create mode 100644 guix/build/android-repo.scm
Toggle diff (266 lines)diff --git a/Makefile.am b/Makefile.amindex ee86571dcc..249cd24135 100644--- a/Makefile.am+++ b/Makefile.am@@ -80,6 +80,7 @@ MODULES = \ guix/modules.scm \ guix/download.scm \ guix/discovery.scm \+ guix/android-repo-download.scm \ guix/bzr-download.scm \ guix/git-download.scm \ guix/hg-download.scm \@@ -172,6 +173,7 @@ MODULES = \ guix/build/minify-build-system.scm \ guix/build/font-build-system.scm \ guix/build/go-build-system.scm \+ guix/build/android-repo.scm \ guix/build/asdf-build-system.scm \ guix/build/bzr.scm \ guix/build/copy-build-system.scm \diff --git a/guix/android-repo-download.scm b/guix/android-repo-download.scmnew file mode 100644index 0000000000..722e885ec9--- /dev/null+++ b/guix/android-repo-download.scm@@ -0,0 +1,160 @@+;;; GNU Guix --- Functional package management for GNU+;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>+;;; Copyright © 2017 Mathieu Lirzin <mthl@gnu.org>+;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>+;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>+;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>+;;;+;;; This file is part of GNU Guix.+;;;+;;; GNU Guix is free software; you can redistribute it and/or modify it+;;; under the terms of the GNU General Public License as published by+;;; the Free Software Foundation; either version 3 of the License, or (at+;;; your option) any later version.+;;;+;;; GNU Guix is distributed in the hope that it will be useful, but+;;; WITHOUT ANY WARRANTY; without even the implied warranty of+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+;;; GNU General Public License for more details.+;;;+;;; You should have received a copy of the GNU General Public License+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.++(define-module (guix android-repo-download)+ #:use-module (guix gexp)+ #:use-module (guix store)+ #:use-module (guix monads)+ #:use-module (guix records)+ #:use-module (guix packages)+ #:use-module (guix modules)+ #:autoload (guix build-system gnu) (standard-packages)+ #:use-module (git) ; FIXME Remove+ #:use-module (ice-9 match)+ #:use-module (ice-9 vlist)+ #:use-module (srfi srfi-1)+ #:use-module (srfi srfi-34)+ #:use-module (srfi srfi-35)+ #:export (android-repo-reference+ android-repo-reference?+ android-repo-reference-mainfest-url+ android-repo-reference-revision++ android-repo-fetch+ android-repo-version+ android-repo-file-name))++;;; Commentary:+;;;+;;; An <origin> method that fetches a specific commit from an Android Repo+;;; repository.+;;; The repository's manifest (URL and revision) can be specified with a+;; <android-repo-reference> object.+;;;+;;; Code:++(define-record-type* <android-repo-reference>+ android-repo-reference make-android-repo-reference+ android-repo-reference?+ (manifest-url android-repo-reference-manifest-url)+ (manifest-revision android-repo-reference-manifest-revision))++(define (git-repo-package)+ "Return the default git-repo package."+ (let ((distro (resolve-interface '(gnu packages android))))+ (module-ref distro 'git-repo)))++(define* (android-repo-fetch ref hash-algo hash+ #:optional name+ #:key (system (%current-system))+ (guile (default-guile))+ (git-repo (git-repo-package)))+ "Return a fixed-output derivation that fetches REF, an+<android-repo-reference> object. The output is expected to have recursive+hash HASH of type HASH-ALGO (a symbol). Use NAME as the file name, or a+generic name if #f."+ ;; TODO: Remove.+ (define inputs+ (standard-packages))++ (define zlib+ (module-ref (resolve-interface '(gnu packages compression)) 'zlib))++ (define guile-json+ (module-ref (resolve-interface '(gnu packages guile)) 'guile-json-3))++ (define gnutls+ (module-ref (resolve-interface '(gnu packages tls)) 'gnutls))++ (define config.scm+ (scheme-file "config.scm"+ #~(begin+ (define-module (guix config)+ #:export (%libz))++ (define %libz+ #+(file-append zlib "/lib/libz")))))++ (define modules+ (cons `((guix config) => ,config.scm)+ (delete '(guix config)+ (source-module-closure '((guix build android-repo)+ (guix build utils)+ (guix build download-nar))))))++ (define build+ (with-imported-modules modules+ (with-extensions (list guile-json gnutls) ;for (guix swh)+ #~(begin+ (use-modules (guix build android-repo)+ (guix build utils)+ (guix build download-nar)+ (ice-9 match))++ ;; The 'git submodule' commands expects Coreutils, sed,+ ;; grep, etc. to be in $PATH.+ (set-path-environment-variable "PATH" '("bin")+ (match '#+inputs+ (((names dirs outputs ...) ...)+ dirs)))++ (setvbuf (current-output-port) 'line)+ (setvbuf (current-error-port) 'line)++ (or (android-repo-fetch (getenv "android-repo manifest-url")+ (getenv "android-repo manifest-revision")+ #$output+ #:git-repo-command+ (string-append #+git-repo "/bin/repo"))+ (download-nar #$output))))))++ (mlet %store-monad ((guile (package->derivation guile system)))+ (gexp->derivation (or name "android-repo-checkout") build++ ;; Use environment variables and a fixed script name so+ ;; there's only one script in store for all the+ ;; downloads.+ #:script-name "android-repo-download"+ #:env-vars+ `(("android-repo manifest-url" .+ ,(android-repo-reference-manifest-url ref))+ ("android-repo manifest-revision" .+ ,(android-repo-reference-manifest-revision ref)))+ #:leaked-env-vars '("http_proxy" "https_proxy"+ "LC_ALL" "LC_MESSAGES" "LANG"+ "COLUMNS")+ #:system system+ #:local-build? #t ;don't offload repo cloning+ #:hash-algo hash-algo+ #:hash hash+ #:recursive? #t+ #:guile-for-build guile)))++(define (android-repo-version version revision)+ "Return the version string for packages using android-repo-download."+ (string-append version "-" (string-join (string-split revision #\/) "_")))++(define (android-repo-file-name name version)+ "Return the file-name for packages using android-repo-download."+ (string-append name "-" version "-checkout"))++ diff --git a/guix/build/android-repo.scm b/guix/build/android-repo.scmnew file mode 100644index 0000000000..cba50270ea--- /dev/null+++ b/guix/build/android-repo.scm@@ -0,0 +1,74 @@+;;; GNU Guix --- Functional package management for GNU+;;; Copyright © 2014, 2016, 2019 Ludovic Courtès <ludo@gnu.org>+;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>+;;;+;;; This file is part of GNU Guix.+;;;+;;; GNU Guix is free software; you can redistribute it and/or modify it+;;; under the terms of the GNU General Public License as published by+;;; the Free Software Foundation; either version 3 of the License, or (at+;;; your option) any later version.+;;;+;;; GNU Guix is distributed in the hope that it will be useful, but+;;; WITHOUT ANY WARRANTY; without even the implied warranty of+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+;;; GNU General Public License for more details.+;;;+;;; You should have received a copy of the GNU General Public License+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.++(define-module (guix build android-repo)+ #:use-module (guix build utils)+ #:use-module (srfi srfi-34)+ #:use-module (ice-9 format)+ #:export (android-repo-fetch))++;;; Commentary:+;;;+;;; This is the build-side support code of (guix android-repo-download).+;;; It allows a multirepository managed by the git-repo tool to be cloned and+;;; checked out at a specific revision.+;;;+;;; Code:++(define* (android-repo-fetch manifest-url manifest-revision directory+ #:key (git-repo-command "git-repo"))+ "Fetch packages according to the manifest at MANIFEST-URL with+MANIFEST-REVISION. MANIFEST-REVISION must be either a revision+or a branch. Return #t on success, #f otherwise."++ ;; Disable TLS certificate verification. The hash of the checkout is known+ ;; in advance anyway.+ (setenv "GIT_SSL_NO_VERIFY" "true")++ (mkdir-p directory)++ (guard (c ((invoke-error? c)+ (format (current-error-port)+ "android-repo-fetch: '~a~{ ~a~}' failed with exit code ~a~%"+ (invoke-error-program c)+ (invoke-error-arguments c)+ (or (invoke-error-exit-status c) ;XXX: not quite accurate+ (invoke-error-stop-signal c)+ (invoke-error-term-signal c)))+ (delete-file-recursively directory)+ #f))+ (with-directory-excursion directory+ (invoke git-repo-command "init" "-u" manifest-url "-b" manifest-revision+ "--depth=1")+ (invoke git-repo-command "sync" "-c" "--fail-fast" "-v" "-j" "3")++ ;; Delete vendor/**/.git, system/**/.git, toolchain/**/.git,+ ;; .repo/**/.git etc since they contain timestamps.+ (for-each delete-file-recursively+ (find-files "." "^\\.git$" #:directories? #t))++ ;; Delete git state directories since they contain timestamps.+ (for-each delete-file-recursively+ (find-files ".repo" "^.*\\.git$" #:directories? #t))++ ;; This file contains timestamps.+ (delete-file ".repo/.repo_fetchtimes.json")+ #t)))++;;; android-repo.scm ends here
M
M
Mathieu Othacehe wrote on 13 Aug 2020 11:02
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)(address . 42800@debbugs.gnu.org)
878seisyu3.fsf@gnu.org
Hello Danny,
Toggle quote (6 lines)> +;;; GNU Guix --- Functional package management for GNU> +;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>> +;;; Copyright © 2017 Mathieu Lirzin <mthl@gnu.org>> +;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>> +;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
I think you can strip out those copyrights.
Toggle quote (2 lines)> + #:use-module (git) ; FIXME Remove
Why should it be removed?
Toggle quote (8 lines)> + #:use-module (ice-9 match)> + #:use-module (ice-9 vlist)> + #:use-module (srfi srfi-1)> + #:use-module (srfi srfi-34)> + #:use-module (srfi srfi-35)> + #:export (android-repo-reference> + android-repo-reference?> + android-repo-reference-mainfest-url
^ typo
Toggle quote (13 lines)> + android-repo-reference-revision> +> + android-repo-fetch> + android-repo-version> + android-repo-file-name))> +> +;;; Commentary:> +;;;> +;;; An <origin> method that fetches a specific commit from an Android Repo> +;;; repository.> +;;; The repository's manifest (URL and revision) can be specified with a> +;; <android-repo-reference> object.
Missing semicolon.
Toggle quote (24 lines)> +;;;> +;;; Code:> +> +(define-record-type* <android-repo-reference>> + android-repo-reference make-android-repo-reference> + android-repo-reference?> + (manifest-url android-repo-reference-manifest-url)> + (manifest-revision android-repo-reference-manifest-revision))> +> +(define (git-repo-package)> + "Return the default git-repo package."> + (let ((distro (resolve-interface '(gnu packages android))))> + (module-ref distro 'git-repo)))> +> +(define* (android-repo-fetch ref hash-algo hash> + #:optional name> + #:key (system (%current-system))> + (guile (default-guile))> + (git-repo (git-repo-package)))> + "Return a fixed-output derivation that fetches REF, an> +<android-repo-reference> object. The output is expected to have recursive> +hash HASH of type HASH-ALGO (a symbol). Use NAME as the file name, or a> +generic name if #f."
if unset.
Toggle quote (4 lines)> + ;; TODO: Remove.> + (define inputs> + (standard-packages))
Why should it be removed?
Toggle quote (3 lines)> + (or (android-repo-fetch (getenv "android-repo manifest-url")> + (getenv "android-repo manifest-revision")
Spaces in env variable names are quite unusual.
Toggle quote (4 lines)> + (with-directory-excursion directory> + (invoke git-repo-command "init" "-u" manifest-url "-b" manifest-revision> + "--depth=1")
It could also be useful to be able to select the manifest name, usingthe "-m" switch.
Toggle quote (2 lines)> + (invoke git-repo-command "sync" "-c" "--fail-fast" "-v" "-j" "3")
Any specific reason to default to 3 threads?
Otherwise this looks nice!
Thanks,
Mathieu
D
D
Danny Milosavljevic wrote on 2 Sep 2020 15:04
Re: [PATCH v2] Add (guix android-repo-download).
(address . 42800-done@debbugs.gnu.org)
20200902150422.0d86cc60@scratchpost.org
Pushed to guix master as commit 3feb846420f24ef1c8b3fe310d293c7a2c91e1d4.
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCgAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl9PmFYACgkQ5xo1VCwwuqX80Qf+LyWn+1njxNP7QBvAP1dPxiGBQoz3pUNACPPxiCysRM782xAMJPSMCYcfYFBItd3zE8M0+vghlK+ZIQLW2rh/2L02Zttqy2qgnheOINo2wY7E+edKwpn4D1aGY868uyA9djBIwHcD5iYGdd4VXFTq4j1Ri7QzepRjP1RXIpXU/qYhK0WA/hdMJvYGJbVng1u3+UhTKgKK0Or8x36YM3UrD+Bo5T+QfeBuYds1UldIS8dR45q7GeGl/k6QqmrNsgdkFntbvPkRLZYXcmvJdqRu/DUZgTQWNdxRTXm1ZxyMjzlDBvzlHQpFDoTtY6jN/QT8zgaau43zPxY2zfsw0msLfw===3Km6-----END PGP SIGNATURE-----

Closed
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send email to 42800@debbugs.gnu.org