[aur-general] 'provides' info in AUR

Xyne xyne at archlinux.ca
Wed Dec 11 20:39:40 EST 2013


On 2013-12-11 22:57 +0000
Jerome Leclanche wrote:

>These are all issues that can easily be fixed. Sources/checksums can
>be added, extra architectures can be generated, and split packages can
>be described in sections. (.conf aka .ini file format would be a
>perfect fit here and would be forwards-compatible with the current
>format but pretty much anything with sections would do.)
>
>Just to be clear, I'm not advocating to specifically use .PKGINFO;
>just to use a compiled, parseable file (such as the .SRCINFO that was
>talked about).. and it seems the consensus is that this is the best
>solution. Am I wrong? What are the issues with .SRCINFO?

My response is not directly at you in particular. I'm reply to the thread as a
whole.

The real problem is that we are attacking this from the wrong end. We should
no be trying to excavate machine-parsable metadata from Bash. We should be
thinking of ways to encapsulate the metadata in a flexible way that can be used
to generate Bash.

This would solve all of these problems and open the doors for numerous
packaging tools (graph generators, metadata miners, fully automated repo
generators, etc.).

I've played around a bit with encoding package metadata in JSON. All of the
packages on my site are autogenerated from JSON files with associated Bash
stubs containing functions. My own approach is customized to my release scripts
and not immediately generalizable, but the idea itself is workable.

The key selling point of Bash is flexibility due to it being a full scripting
language, but for the metadata itself we don't need the full flexibility. I
think the following would suffice:

1) A convention for expressing per-package namespace for split packages, with a
   way to inherit and override from other namespaces to avoid redundancies.
   This can be done with sub-objects and a little syntax, e.g.
   {
     "python-foo" : {
        ...
     }, 
     "python2-foo < python-foo" : {
       "depends" : ["python2", ...]",
       ...
     }

2) Variables for convenience. A top-level field to specify a delimiter would
   suffice, e.g. {"variable delimiter" : "$", ...} and then later {..., "url" :
   "http://example.com/$pkgname$-$version$.tar.gz", ...}. The file could be
   safely interpolated. Interpolation requires some thought but it should be
   easy to do in all sane cases.

3) The build, package, prepare and version functions would obviously still be
   written in Bash, but they would be kept in a separate file and devoid of
   metadata.

4) If truly necessary, syntax for inserting command output could be added as
   well, again with a top-level limiter for the command. This would allow
   parsers to decide exactly which commands to run, if any. The use of such
   commands would be restricted to cases in which they are absolutely necessary
   (if there are any).

Overall, it is not much more verbose than current PKGBUILDS:

    "powerpill": {
      "pkgdesc": "Pacman wrapper for parallel and segmented downloads.",
      "pkgrel": 1,
      "pkgver": "2013.5.13",
      "arch": "any",
      "backup": [
        "etc/powerpill/powerpill.json"
      ],
      "depends": [
        "python3",
        "pyalpm",
        "pm2ml>2012.12.12",
        "reflector",
        "aria2"
      ],
      "optdepends": {
        "python3-threaded_servers": "internal Pacserve support",
        "rsync": "Rsync download support"
      },
      "md5sums": [
        "0f0d4c0096bd60287ab923038c3bbc47",
        "f58432feaaeb339e5d6b3692d3cecf17"
      ],
      ...


As soon as I have some time I will provide a proof-of-principle implementation
and post a RFC.

Regards,
Xyne


More information about the aur-general mailing list