tilde in Go package names (eg. sourcehut hosted packages)

  • Done
  • quality assurance status badge
Details
3 participants
  • Sarah Morgensen
  • Leo Prikler
  • raingloom
Owner
unassigned
Submitted by
raingloom
Severity
normal
R
R
raingloom wrote on 29 Apr 2021 19:54
(name . Guix Bugs)(address . bug-guix@gnu.org)
20210429195415.3f0dfaa9@riseup.net
Trying to import kineto and getting this error when building it:

guix build: error: invalid character `~' in name
`go-git-sr-ht-~sircmpwn-kineto-0.0.0-20210225135222-edd4fe31f16f-checkout.drv'

I know the names are significant in go-build-system so I'm not sure how
to work around the issue without breaking anything.
L
L
Leo Prikler wrote on 30 Apr 2021 11:53
9ea8a08c75fc1a7b26f0380ba3a42161f3d5c570.camel@student.tugraz.at
Am Donnerstag, den 29.04.2021, 19:54 +0200 schrieb raingloom:
Toggle quote (9 lines)
> Trying to import kineto and getting this error when building it:
>
> guix build: error: invalid character `~' in name
> `go-git-sr-ht-~sircmpwn-kineto-0.0.0-20210225135222-edd4fe31f16f-
> checkout.drv'
>
> I know the names are significant in go-build-system so I'm not sure
> how
> to work around the issue without breaking anything.
The way Go works, I would hazard a guess, that
module git.sr.ht/~sircmpwn/kineto
and
module git.sr.ht/sircmpwn/kineto
name two different modules. However, as the latter can't exist since
sr.ht prefixes user names with ~, I think a name transformation, that
maps the former to the latter should be safe. On the other hand, since
this just affects store file names, we might instead want to map "~" to
"-" in the general case of it appearing anywhere. WDYT?

Regards,
Leo
R
R
raingloom wrote on 3 May 2021 04:16
(name . Leo Prikler)(address . leo.prikler@student.tugraz.at)(address . 48111@debbugs.gnu.org)
20210503041615.733f9870@riseup.net
On Fri, 30 Apr 2021 11:53:40 +0200
Leo Prikler <leo.prikler@student.tugraz.at> wrote:

Toggle quote (24 lines)
> Am Donnerstag, den 29.04.2021, 19:54 +0200 schrieb raingloom:
> > Trying to import kineto and getting this error when building it:
> >
> > guix build: error: invalid character `~' in name
> > `go-git-sr-ht-~sircmpwn-kineto-0.0.0-20210225135222-edd4fe31f16f-
> > checkout.drv'
> >
> > I know the names are significant in go-build-system so I'm not sure
> > how
> > to work around the issue without breaking anything.
> The way Go works, I would hazard a guess, that
> module git.sr.ht/~sircmpwn/kineto
> and
> module git.sr.ht/sircmpwn/kineto
> name two different modules. However, as the latter can't exist since
> sr.ht prefixes user names with ~, I think a name transformation, that
> maps the former to the latter should be safe. On the other hand,
> since this just affects store file names, we might instead want to
> map "~" to "-" in the general case of it appearing anywhere. WDYT?
>
> Regards,
> Leo
>

It turns out that it's okay to change the names, only the input alist
keys are significant. So it was relatively quick to fix this by hand.
Not sure how the importer should handle it. I've been meaning to look
at importers for a while, because I wanna tackle either a Chicken or an
Akku importer, so, I'll try something Eventually (TM), but can't
promise a deadline.
S
S
Sarah Morgensen wrote on 5 Jul 2021 00:51
Re: bug#48111: tilde in Go package names (eg. sourcehut hosted packages)
(name . Leo Prikler)(address . leo.prikler@student.tugraz.at)
86czrxae1w.fsf@mgsn.dev
Hello,

Leo Prikler <leo.prikler@student.tugraz.at> writes:

Toggle quote (11 lines)
> Am Donnerstag, den 29.04.2021, 19:54 +0200 schrieb raingloom:
>> Trying to import kineto and getting this error when building it:
>>
>> guix build: error: invalid character `~' in name
>> `go-git-sr-ht-~sircmpwn-kineto-0.0.0-20210225135222-edd4fe31f16f-
>> checkout.drv'
>>
>> I know the names are significant in go-build-system so I'm not sure
>> how
>> to work around the issue without breaking anything.

As far as I can tell, the go-build-system doesn't care about the actual
package names, just #:import-path and #:unpack-path. The names should
only be significant to the go importer insofar as
go-module->guix-package-name does not generate collisions.

Toggle quote (10 lines)
> The way Go works, I would hazard a guess, that
> module git.sr.ht/~sircmpwn/kineto
> and
> module git.sr.ht/sircmpwn/kineto
> name two different modules. However, as the latter can't exist since
> sr.ht prefixes user names with ~, I think a name transformation, that
> maps the former to the latter should be safe. On the other hand, since
> this just affects store file names, we might instead want to map "~" to
> "-" in the general case of it appearing anywhere. WDYT?

It might be slightly uglier, but I think it's better to keep a
consistent policy of "replace any invalid characters with a hyphen", as
it is less likely to generate collisions and it provides a hint to the
reader that there *is* a character there.

I have attached a patch to do so below, verified that a recursive import
of the package mentioned above builds without modification (well, I had
to update a dependency...) and verified that there are not currently any
go packages using a tilde in their name with:

$ egrep -r '"go-[^"]*~[^"]*"' gnu/packages
From 2c942a06cf94acdca07f2a59736c89521953af0f Mon Sep 17 00:00:00 2001
Message-Id: <2c942a06cf94acdca07f2a59736c89521953af0f.1625436903.git.iskarian@mgsn.dev>
From: Sarah Morgensen <iskarian@mgsn.dev>
Date: Sun, 4 Jul 2021 15:00:15 -0700
Subject: [PATCH] import: go: Replace tildes with hyphens in package names.


* guix/import/go.scm (go-module->guix-package-name): Replace tildes with
hyphens.
---
guix/import/go.scm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

Toggle diff (20 lines)
diff --git a/guix/import/go.scm b/guix/import/go.scm
index 5e23d6a2b3..d8f838f635 100644
--- a/guix/import/go.scm
+++ b/guix/import/go.scm
@@ -430,9 +430,9 @@ hence the need to derive this information."
(define* (go-module->guix-package-name module-path #:optional version)
"Converts a module's path to the canonical Guix format for Go packages.
Optionally include a VERSION string to append to the name."
- ;; Map dot, slash and underscore characters to hyphens.
+ ;; Map dot, slash, underscore and tilde characters to hyphens.
(let ((module-path* (string-map (lambda (c)
- (if (member c '(#\. #\/ #\_))
+ (if (member c '(#\. #\/ #\_ #\~))
#\-
c))
module-path)))

base-commit: 9e63bafafbe7a7c2d9804fae62302ac8a7e90090
--
2.31.1
--
Sarah
L
L
Leo Prikler wrote on 5 Jul 2021 09:57
(name . Sarah Morgensen)(address . iskarian@mgsn.dev)
99ccdaecd57d5766ee5920e811a934b9b2a58394.camel@student.tugraz.at
Hello,

Am Sonntag, den 04.07.2021, 15:51 -0700 schrieb Sarah Morgensen:
Toggle quote (4 lines)
> It might be slightly uglier, but I think it's better to keep a
> consistent policy of "replace any invalid characters with a hyphen",
> as it is less likely to generate collisions and it provides a hint to
> the reader that there *is* a character there.
Fair enough, that's a reasonable take.

Toggle quote (6 lines)
> I have attached a patch to do so below, verified that a recursive
> import of the package mentioned above builds without modification
> (well, I had to update a dependency...) and verified that there are
> not currently any go packages using a tilde in their name with:
>
> $ egrep -r '"go-[^"]*~[^"]*"' gnu/packages
I couldn't verify this as the importer delivered 410s, but the patch
LGTM, so I pushed it.

Thanks,
Leo
Closed
?