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

  • Done
  • quality assurance status badge
Details
4 participants
  • outlook user
  • Danny Milosavljevic
  • Jakub Kądziołka
  • Mathieu Othacehe
Owner
unassigned
Submitted by
Danny Milosavljevic
Severity
normal

Debbugs page

Danny Milosavljevic wrote 5 years ago
(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.am
index 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.scm
new file mode 100644
index 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 here
diff --git a/guix/git-repo-download.scm b/guix/git-repo-download.scm
new file mode 100644
index 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"))
+
+
Jakub Kądziołka wrote 5 years ago
(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 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"?

Regards,
Jakub Kądziołka
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEE5Xa/ss9usT31cTO54xWnWEYTFWQFAl8xXtIACgkQ4xWnWEYT
FWQkiBAAtd6HVZbY7a1ySNBYXmoBVc2p7kdVqVU0MbD/0xaoTkxuQe6pqgdpKzU+
LnjgdGLwiDVffToM0RteZfusrS45NLjYWLJLKrzu+8NDDrSqUcL4jzE+x7fec75s
b25cgVSwkzh+Evxt/nbBJ12aPXStEVwTc6vip1mlrOlBGpwms7ZwpMYxsv0Lx8Pj
5TdmbVz7pfPziIMMWerCKidrerAweXUXTjkLVg4m6+GmX4ifJqc4k/yS+QwETtWi
v60Agk8dZheXMIfdnpmaWIeSHpk71T8yJVpok2hrfyhVIdLWqFR73oa4v8JNPPiL
DZApc4AboHr8gPVPKlLNmG5LiqonZ0sKQ+h9/X9TNUkGTNuwG3zKek/hT9K4ETq0
2lO1I8Bw0J9hPnxaG1dWnAb+LIGqBMvw68ibL4K4tvMZdDdih6KdFQr70tMEt5MB
Dg41XfRajuTHOPng0iltHLmvN0/qWczkcR6Cko+ttrtVivZ2OZtIXrOetlk7oZor
XGuQzpks7gMKN+/oxO8w2Nuv5yiodSSdDEPkrNH62NYCKG5KMUrZmcn+cD0y4lpE
uuqQU/eHtEF6911NxdLUCjRvWv0ZLxleAcVUUyRHBLEUYSiO1fpBwq+7Ue56slMZ
jlTjm9XdAqXWNFImS/3f+QZEEK6g5XsXIZp/Fj/5p52Iw4hsKt0=
=2tG3
-----END PGP SIGNATURE-----


Danny Milosavljevic wrote 5 years ago
(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 +0200
Jakub 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 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?
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCgAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl8xYigACgkQ5xo1VCww
uqVkRAf/S8giQQHQXE/Z504UMcZHWS7ackP3K460S2q2ZFj5TaRGU0p5R0Ai/fFy
Cx3SnULe8WHlmJC84O4IuPJBvIjrxRQmLMS+aqQXBglHKvAKhs5WIH/ybZlz10lk
HdeDS37zhfyx4jwIEq6UOXjCsibRO264h5STWAoEl0pNri0nqrz/pzIkCx2tq1v5
avL3CjSW0/Xaaj3FAwvPGnZxAnH3b355rZt/9+5apv4cmFjvWUDa7s7ikaiLnNck
oILm9PBsKSpBUk4o1VbZmS1mnGRQO2PvaSkBOyipP4smod+sX4XTBni7WiLwdXHW
R/0e9uiZrQTyBkjWys+4Q9Z0CfRvig==
=UdgZ
-----END PGP SIGNATURE-----


Jakub Kądziołka wrote 5 years ago
(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? Perhaps
android-repo-download would be a better disambugator?

Regards,
Jakub Kądziołka
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEE5Xa/ss9usT31cTO54xWnWEYTFWQFAl8xagIACgkQ4xWnWEYT
FWR5LQ//UphqJtZ6usEkVAjP0rdpQCZvYKEeG4MnCE0qvjvFvAWiBbiGRrtvWRM5
E8Ao6mQ+IY9Nh/28/uhsNl4JEC0ydffMs0VzaxY8AdXzlXWJ+Es92T4m0C1zW2zb
KaOD0mDC71SL2l/lMzmPcO4U7mm1opkmPUDY/VqJilRKATcaUcVt2tnGryrgaPtR
jdA9s8vCUNEtkJLyX12NUwwGYZgzCxTv6VCN16OvPpB8lV2ah5Gv4W8L3m+dpiMn
6/Ow19mEx2JFQVSZivHsCPsQQP0daeaxkyWU7xqwWT/smyxrnhRluGkyCN0HG+Op
QFprvSTP7RbgG6FhyJ39PppRW20fOAnXp4ZvIMWLLrymEcPTTy9HlNYMtlbZoT+k
ZTlpc3eFtAlzV8Udc6Z23z7Rp4u0tmFUkprEYknHA53h3uiQRq/tZnk92yGuj6yR
96XgIglWB/WI6UXDIZOR59JzfeYDC4kBptOIuZiVIB+OL9MjHDRPPbzUUVhxs8Ts
h3hi+YKQYlUycC3v4PCLEI+EWcUqiQny/Bpb8k5+8xsK+mgawKn7NzEFjQlp6Jwv
eoE1R9dy+zMcr0OUeCY+z4wCfiHvJXdFKB9XMzGFtbWCMQr/3ENg1mE2Y3CbI2nD
8KQsx/wKODLV1mQ1Dhvj5lWo10/MsaRWrPdLC0ejKFhOKGZHV00=
=foMQ
-----END PGP SIGNATURE-----


Danny Milosavljevic wrote 5 years ago
[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.am
index 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.scm
new file mode 100644
index 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.scm
new file mode 100644
index 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
Mathieu Othacehe wrote 5 years ago
(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, using
the "-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
Danny Milosavljevic wrote 5 years ago
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-----

iQEzBAEBCgAdFiEEds7GsXJ0tGXALbPZ5xo1VCwwuqUFAl9PmFYACgkQ5xo1VCww
uqX80Qf+LyWn+1njxNP7QBvAP1dPxiGBQoz3pUNACPPxiCysRM782xAMJPSMCYcf
YFBItd3zE8M0+vghlK+ZIQLW2rh/2L02Zttqy2qgnheOINo2wY7E+edKwpn4D1aG
Y868uyA9djBIwHcD5iYGdd4VXFTq4j1Ri7QzepRjP1RXIpXU/qYhK0WA/hdMJvYG
JbVng1u3+UhTKgKK0Or8x36YM3UrD+Bo5T+QfeBuYds1UldIS8dR45q7GeGl/k6Q
qmrNsgdkFntbvPkRLZYXcmvJdqRu/DUZgTQWNdxRTXm1ZxyMjzlDBvzlHQpFDoTt
Y6jN/QT8zgaau43zPxY2zfsw0msLfw==
=3Km6
-----END PGP SIGNATURE-----


Closed
outlook user wrote 5 months ago
(name . control@debbugs.gnu.org)(address . control@debbugs.gnu.org)
AS8P251MB0854F1B59CD267922C9838CB97712@AS8P251MB0854.EURP251.PROD.OUTLOOK.COM
unarchive 42800
Attachment: file
outlook user wrote 5 months ago
AS8P251MB08549B39A0101F1B44B47E7A97712@AS8P251MB0854.EURP251.PROD.OUTLOOK.COM
________________________________
De : outlook user <RACP@outlook.fr>
Envoyé : dimanche 29 septembre 2024 17:48
À : 26823@debbugs.gnu.org <26823@debbugs.gnu.org>; 26822@debbugs.gnu.org <26822@debbugs.gnu.org>; 42800@debbugs.gnu.org <42800@debbugs.gnu.org>; 26823@debbugs.gnu.org <26823@debbugs.gnu.org>
Objet : Re: [PATCH v2] gnu: Add git-repo (guix android-repo-download).

This lacks mandatory python-formatter dependency
Attachment: file
outlook user wrote 5 months ago
AS8P251MB0854F0406C7BE060C7B12E7897712@AS8P251MB0854.EURP251.PROD.OUTLOOK.COM
________________________________
De : outlook user <RACP@outlook.fr>
Envoyé : jeudi 3 octobre 2024 14:03
À : 26823@debbugs.gnu.org <26823@debbugs.gnu.org>; 26822@debbugs.gnu.org <26822@debbugs.gnu.org>; 42800@debbugs.gnu.org <42800@debbugs.gnu.org>; 26823@debbugs.gnu.org <26823@debbugs.gnu.org>
Objet : RE: [PATCH v2] gnu: Add git-repo (guix android-repo-download).


________________________________
De : outlook user <RACP@outlook.fr>
Envoyé : dimanche 29 septembre 2024 17:48
À : 26823@debbugs.gnu.org <26823@debbugs.gnu.org>; 26822@debbugs.gnu.org <26822@debbugs.gnu.org>; 42800@debbugs.gnu.org <42800@debbugs.gnu.org>; 26823@debbugs.gnu.org <26823@debbugs.gnu.org>
Objet : Re: [PATCH v2] gnu: Add git-repo (guix android-repo-download).

This lacks mandatory python-formatter dependency
Attachment: file
outlook user wrote 4 months ago
(name . GNU bug tracker automated control server)(address . control@debbugs.gnu.org)
AS8P251MB085468352CDFAB7385A0FF6B975E2@AS8P251MB0854.EURP251.PROD.OUTLOOK.COM
unarchive 21142
unarchive 26822
unarchive 26823
unarchive 42800
unarchive 73842
?
Your comment

This issue is archived.

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

To respond to this issue using the mumi CLI, first switch to it
mumi current 42800
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help