From 02e2e093e858e8a0ca7bd66c1f1f6fd0a1705edb Mon Sep 17 00:00:00 2001 From: Katherine Cox-Buday Date: Thu, 22 Oct 2020 19:40:17 -0500 Subject: import: Add Go importer. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch adds a 'guix import go' command. * doc/guix.texi (Requirements): Mention Guile-Lib dependency. (Invoking guix import): Document 'guix import go'. * gnu/packages/package-management.scm (guix)[inputs, propagated-inputs]: Add GUILE-LIB. * guix/self.scm (compiled-guix)[guile-lib]: New variable. [dependencies]: Add it. (specification->package): Add "guile-lib". * guix/build-system/go.scm (go-version->git-ref): New procedure. * guix/import/go.scm, guix/scripts/import/go.scm, tests/go.scm: New files. * guix/scripts/import.scm: Declare subcommand guix import go * po/guix/POTFILES.in: Add 'guix/scripts/import/go.scm'. * Makefile.am (MODULES): Add 'guix/import/go.scm' and 'guix/scripts/import/go.scm'. (SCM_TESTS): Add 'tests/go.scm'. Co-Authored-By: Helio Machado <0x2b3bfa0@gmail.com> Co-Authored-By: Francois Joulaud Co-Authored-By: Maxim Cournoyer Co-Authored-by: Ludovic Courtès --- guix/build-system/go.scm | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'guix/build-system') diff --git a/guix/build-system/go.scm b/guix/build-system/go.scm index f8ebaefb27..0e2c1cd2ee 100644 --- a/guix/build-system/go.scm +++ b/guix/build-system/go.scm @@ -26,9 +26,12 @@ (define-module (guix build-system go) #:use-module (guix build-system gnu) #:use-module (guix packages) #:use-module (ice-9 match) + #:use-module (ice-9 regex) #:export (%go-build-system-modules go-build - go-build-system)) + go-build-system + + go-version->git-ref)) ;; Commentary: ;; @@ -37,6 +40,36 @@ (define-module (guix build-system go) ;; ;; Code: +(define %go-version-rx + (make-regexp (string-append + "(v?[0-9]\\.[0-9]\\.[0-9])" ;"v" prefix can be omitted in version prefix + "(-|-pre\\.0\\.|-0\\.)" ;separator + "([0-9]{14})-" ;timestamp + "([0-9A-Fa-f]{12})"))) ;commit hash + +(define (go-version->git-ref version) + "Parse VERSION, a \"pseudo-version\" as defined at +, and extract the commit hash from +it, defaulting to full VERSION if a pseudo-version pattern is not recognized." + ;; A module version like v1.2.3 is introduced by tagging a revision in the + ;; underlying source repository. Untagged revisions can be referred to + ;; using a "pseudo-version" like v0.0.0-yyyymmddhhmmss-abcdefabcdef, where + ;; the time is the commit time in UTC and the final suffix is the prefix of + ;; the commit hash (see: https://golang.org/ref/mod#pseudo-versions). + (let* ((version + ;; If a source code repository has a v2.0.0 or later tag for a file + ;; tree with no go.mod, the version is considered to be part of the + ;; v1 module's available versions and is given an +incompatible + ;; suffix + ;; (see:https://golang.org/cmd/go/#hdr-Module_compatibility_and_semantic_versioning). + (if (string-suffix? "+incompatible" version) + (string-drop-right version 13) + version)) + (match (regexp-exec %go-version-rx version))) + (if match + (match:substring match 4) + version))) + (define %go-build-system-modules ;; Build-side modules imported and used by default. `((guix build go-build-system) -- cgit v1.2.3