Subject: Re: [bug#47670] [PATCH 0/2] Add updater for packages hosted as SourceHut Git repositories

From: Xinglu Chen <[email-masked]>
Date: Fri, 09 Apr 2021 14:41:12 +0200

On Fri, Apr 09 2021, Léo Le Bouter via Guix-patches via wrote:

> On Fri, 2021-04-09 at 13:58 +0200, Xinglu Chen wrote:
>> All the forges have different URL schemes so they would have to be
>> hardcoded somehow, e.g. SourceHut uses
>> https://git.sr.ht/~user/repo/archive/TAG.tar.gz, Gitea probably uses
>> something else, etc..  Maybe we could just clone the repo, but that
>> would use more bandwidth, and it could get pretty slow for big
>> repositories.
>> 
>
> Is that an autogenerated tarball? I am under the impression that usage
> of those is banned in GNU Guix, and that there's a lint pass for it.
> What do you use these autogenerated tarballs for? Is the 'ls-remote'
> command not enough to replace the version and hash?

The GitHub updater fetches the autogenerated tarball so that's what I
did as well.  I wasn't aware about the fact that we would like to avoid
them.

> GNU Guix uses shallow clones (AIUI) to save bandwidth, do you need
> this to generate the hash? I encourage you use the same shallow clone
> mechanism here, so it's more generic and not specific to Sourcehut.

Ok, I will use shallow clones to make it more generic.

>> Adding a property for the tag prefix and suffix, and a version
>> separator
>> would be a good idea.  Right now it only supports "v" as a prefix and
>> "_", ".", and "-" as separators.
>
> What do you think about that last idea of matching versions in tags
> with ANY separator and ANY suffix and prefix? That should work fine,
> right? I can't think of a case where it wouldnt, but please do share
> one if you do.

Maybe it wasn't clear, I think it would be a good idea to have a
property field like this:

#+begin_src scheme
(properties '((tag-prefix . "some-prefix")
              (tag-suffix . "some-suffix")
              (version-separator . "some-separator")))
#+end_src

The updater would then read those fields and do some regex to get the
latest version.  These options would probably also have some sane
defaults, like empty prefix and suffix, and "." as the separator.