Commit Graph

19 Commits

Author SHA1 Message Date
Sarah Morgensen
281ede2e7d
import: go: Match "go-import" meta tags anywhere.
Some personal sites forget to put <meta name="go-import" ...> in a
<head> element, so look anywhere for them.

Partly fixes <https://issues.guix.gnu.org/50595>.
Reported by Stephen Paul Weber <singpolyma@singpolyma.net>.

* guix/import/go.scm (fetch-module-meta-data): Match "go-import" meta
tags anywhere in the page.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-09-18 23:08:32 +02:00
Sarah Morgensen
b3907e304d
import: go: Improve handling of modules in VCS subdirectories.
Use the supplied module path (instead of the repository root) as the import
path for everything except source and homepage URLs.  For modules not in the
root of a VCS repository, set #:unpack-path to the repository root by default.

Partly fixes <https://issues.guix.gnu.org/50595>.
Reported by Stephen Paul Weber <singpolyma@singpolyma.net>.

* guix/import/go.scm (go-module->guix-package): Use 'module-path'
instead of 'root-module-path' for #:import-path.  Emit #:unpack-path
when #:import-path is not equal to 'root-module-path'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-09-18 23:08:32 +02:00
Sarah Morgensen
e8a67f0fc4
import: go: Fix import when import path redirects.
* guix/import/go.scm (fetch-module-meta-data): If no meta entries
have a matching import prefix, return the first entry instead of #f.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-09-07 15:59:35 +02:00
zimoun
be13e2be08
import: go: Improve error handling.
* guix/import/go.scm (go-module->guix-package*): Handle errors, remove
memoize.
(go-module-recursive-import): Remove 'guard', add memoize.
* guix/scripts/import/go.scm (guix-import-go): Adjust.
* tests/go.scm: Adjust.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-09-01 23:41:42 +02:00
Sarah Morgensen
16579a7c57
import: go: Return false for package not found.
* guix/import/go.scm (go-module-recursive-import): Explicitly return
false when packages are not found.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-09-01 23:41:42 +02:00
Maxim Cournoyer
15b4372b60
import: go: Fix indentation.
* guix/import/go.scm: Fix indentation.
2021-07-18 01:57:17 -04:00
Sarah Morgensen
793ba333c6
import: go: Upgrade go.mod parser.
Upgrade the go.mod parser to handle the full go.mod spec, and to gracefully
handle unexpected/malformed syntax.  Restructure parser usage, making the
parse tree available for other uses.

guix/import/go.scm (parse-go.mod): Parse using (ice-9 peg) instead of
regex matching for more robustness.  Return a list of directives.
(go.mod-directives): New procedure.
(go.mod-requirements): Likewise.
(go-module->guix-package): Use it.
(%go.mod-replace-directive-rx): Remove unused variable.
tests/go.scm (testing-parse-mod): Adjust accordingly.
(go.mod-requirements)
(fixture-go-mod-unparseable)
(fixture-go-mod-retract)
(fixture-go-mod-strings): New variables.
("parse-go.mod: simple")
("parse-go.mod: comments and unparseable lines")
("parse-go.mod: retract")
("parse-go.mod: raw strings and quoted strings")
("parse-go.mod: complete"): New tests.

Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
2021-07-18 01:57:17 -04:00
Sarah Morgensen via Guix-patches via
5eba9c0960
import: go: Handle multiple go-import meta tags.
* guix/import/go.scm (fetch-module-meta-data): Parse all go-import meta
tags and return the first 'module-meta' with a matching import prefix.
[go-import->module-meta]: Extract parsing into new procedure.

Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
2021-07-17 23:26:52 -04:00
Sarah Morgensen via Guix-patches via
59d20bcfcc
import: go: Fix parsing of pkg.go.dev licenses after site update.
* guix/import/go.scm (go-package-licenses): Find license names in
'h2 // div // *text*' elements rather than 'h2 // *text*' elements.

Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
2021-07-17 22:13:39 -04:00
Sarah Morgensen
b1a419ea3f
import: go: Replace tildes with hyphens in package names.
Fixes <https://issues.guix.gnu.org/48111>.

* guix/import/go.scm (go-module->guix-package-name): Replace tildes with
hyphens.

Signed-off-by: Leo Prikler <leo.prikler@student.tugraz.at>
2021-07-05 09:54:12 +02:00
Sarah Morgensen via Guix-patches via
9d9152425e
import: go: Fix match-error in 'go-package-description'
* guix/import/go.scm (go-package-description): Make sure description* is
always a list, so the result is properly matched.

Signed-off-by: Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
2021-06-28 08:52:15 +02:00
Ludovic Courtès
34db952a4b
import: go: Autoload (htmlprag).
Fixes <https://bugs.gnu.org/47924>.
Reported by Carl Dong <contact@carldong.me>.

* guix/import/go.scm: Autoload (htmlprag).
2021-04-23 00:32:30 +02:00
Ludovic Courtès
55e90e5558
import: go: Do not set '%strict-tokenizer?' from the top level.
This avoids interference with other users of (htmlprag) and makes the
intent clearer.

* guix/import/go.scm <top level>: Remove call to '%strict-tokenizer?'.
(go-package-licenses, go-package-description)
(go-package-synopsis, fetch-module-meta-data): Pass #:strict? #t to
'html->sxml'.
2021-04-23 00:32:30 +02:00
Maxim Cournoyer
83f8b6d32c
import: go: Append version to symbol name in the pinned version mode.
This allows importing packages with complicated version specific dependency
chains without the package symbol names colliding.

* doc/guix.texi (Invoking guix import): Document the --pin-versions option.
Mention that a specific version can be imported.  Remove the experimental
warning.
* guix/import/go.scm (go-module->guix-package-name)[version]: Add optional
argument.  Rewrite the character translation in terms of string-map.
(go-module->guix-package): Conditionally use dependencies whose symbol include
their version, based no the value of the PIN-VERSIONS? argument.
* guix/import/utils.scm (package->definition): Add a new case where the full
version string is appended to the package symbol.
* guix/scripts/import.scm (guix-import): Correctly print forms starting
with '(define-public [...]'.
* guix/scripts/import/go.scm (guix-import-go): Conditionally include the
version in the package symbols defined.
2021-04-09 23:02:37 -04:00
Maxim Cournoyer
a8b927a562
import: go: Add an option to use pinned versions.
The ability to pin versions is handy when having to deal to packages that
bootstrap themselves through a chain of former versions.  Not using pinned
versions in these case could introduce dependency cycles.

* guix/build-system/go.scm (guix)
(%go-version-rx): Rename to...
(%go-pseudo-version-rx): ... this.  Simplify the regular expression, which in
turns makes it more robust.
* guix/build-system/go.scm (go-version->git-ref): Adjust following the above
rename.
(go-pseudo-version?): New predicate.
(go-module-latest-version): Rename to ...
(go-module-version-string): ... this.  Rename goproxy-url argument to just
goproxy.  Add a VERSION keyword argument, update docstring and adjust to have
it used.
(go-module-available-versions): New procedure.
(%go.mod-require-directive-rx): Document regexp.
(parse-go.mod): Harmonize the way dependencies are recorded to a list of lists
rather than a list of pairs, as done for other importers.  Rewrite to directly pass
multiple values rather than a record object.  Filter the replaced modules in a
functional style.
(go-module->guix-package): Add docstring.
[version, pin-versions?]: New arguments.  Rename the GOPROXY-URL argument to
GOPROXY.  Adjust to the new returned value of fetch-go.mod, which is a string.
Fail when the provided version doesn't exist.  Return a list dependencies and
their versions when in pinned versions mode, else just the dependencies.
(go-module-recursive-import)[version, pin-versions?]: New arguments.
Honor the new arguments and guard against network errors.
* guix/scripts/import/go.scm (%default-options): Register a default value for
the goproxy argument.
(show-help): Document that a version can be specified.  Remove the --version
argument and add a --pin-versions argument.
(%options)[version]: Remove option.
[pin-versions]: Add option.
(guix-import-go): Adjust so the version provided from the module name is
honored, along the new pin-versions? argument.
* tests/go.scm: Adjust and add new tests.
2021-04-09 22:41:32 -04:00
Maxim Cournoyer
6aee902eaf
import: go: Improve synopsis and description parsing.
* guix/import/go.scm (%strict-tokenizer?): Set parameter to #t.
(go-path-escape): Redefine to prevent inlining.
(http-get*): Replace by ...
(http-fetch*): this ...
(json-fetch*): New procedure.
(go.pkg.dev-info): Use http-fetch*.
(go-package-licenses): Rewrite in terms of go.pkg.dev-info.
(go-package-description): Likewise.
(go-package-synopsis): Likewise.
(fetch-go.mod): Use the memoized http-fetch*.
(parse-go.mod): Adjust to receive content as a string.
(fetch-module-meta-data): Adjust to use http-fetch*.
(go-module->guix-package): Adjust to the modified fetch-go.mod return value.
[inputs]: Use propagated inputs, which is the most common situations for Go
libraries.
[description]: Beautify description.
[licenses]: Do no check for #f.  The result of the license parsing is always a
list.
* tests/go.scm: Adjust following above changes.
2021-04-09 22:41:31 -04:00
Xinglu Chen
426ade6c8b
import: go: Replace underscores with hyphens in package names.
As per section '16.4.2 Package Naming' in the manual, use hypens instead
of underscores in package names.

* guix/import/go.scm (go-module->guix-package-name): Replace underscores
with hyphens.

Signed-off-by: Leo Famulari <leo@famulari.name>
2021-04-04 13:42:43 -04:00
Ludovic Courtès
d028aef31c
import: go: Compute the hash of Git checkouts.
* guix/import/go.scm (vcs-file?, file-hash, git-checkout-hash): New
procedures.
(vcs->origin): Use 'git-checkout-hash' in the 'git case.
2021-03-10 18:01:48 +01:00
Katherine Cox-Buday
02e2e093e8
import: Add Go importer.
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 <francois.joulaud@radiofrance.com>
Co-Authored-By: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Co-Authored-by: Ludovic Courtès <ludo@gnu.org>
2021-03-10 18:01:48 +01:00