[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: golang-x-text-dev vs. golang-golang-x-text-dev? Extra-Source-Only?



Cyril Brulebois <cyril@debamax.com> (2020-12-26):
> In hindsight, it would be even better to ignore all entries with E-S-O:
> yes, and we wouldn't have to special-case this specific transition. For
> the records, E-S-O: yes is a flag that's used to keep source packages in
> the archive for license compliance reasons, usually because packages are
> listed in Built-Using. See below for an excerpt of unstable's Sources,
> focusing on packages that advertise golang.org/x/text in their
> Go-Import-Path.

This mail went out a little too fast: I had forgotten dh-make-golang
doesn't actually work with Sources files directly, but uses an API
endpoint on ftp-master. Since it seems to be very generic [1], instead
of something dedicated to Go-Import-Path, I don't think we can really
hope for a change in the ftp-master API (the function takes a single
parameter at the moment). Maybe dh-make-golang could or should leverage
a Sources file to be more precise when determining the (Build-)Depends?

 1. https://salsa.debian.org/ftp-team/dak/-/blob/master/dakweb/queries/binary.py#L38-74

Another approach would be to at least warn when getGolangBinaries
overrides an existing value in the mapping:

    func getGolangBinaries() (map[string]string, error) {
            golangBinaries := make(map[string]string)
    
            resp, err := http.Get(golangBinariesURL)
            if err != nil {
                    return nil, fmt.Errorf("getting %q: %v", golangBinariesURL, err)
            }
            if got, want := resp.StatusCode, http.StatusOK; got != want {
                    return nil, fmt.Errorf("unexpected HTTP status code: got %d, want %d", got, want)
            }
            var pkgs []struct {
                    Binary         string `json:"binary"`
                    XSGoImportPath string `json:"metadata_value"`
                    Source         string `json:"source"`
            }
            if err := json.NewDecoder(resp.Body).Decode(&pkgs); err != nil {
                    return nil, err
            }
            for _, pkg := range pkgs {
                    if !strings.HasSuffix(pkg.Binary, "-dev") {
                            continue // skip -dbgsym packages etc.
                    }
                    for _, importPath := range strings.Split(pkg.XSGoImportPath, ",") {
                            // XS-Go-Import-Path can be comma-separated and contain spaces.
=====>                      golangBinaries[strings.TrimSpace(importPath)] = pkg.Binary
                    }
            }
            return golangBinaries, nil

I think the code pointed by the arrow is where we can lose existing
information, meaning the last binary declaring a given Go-Import-Path
wins, and all others are dropped silently. If we had a list instead
of a single value, we could at least use something “packageA | packageB”
but then we probably would have to deduplicate. Currently, the file
returned from
https://api.ftp-master.debian.org/binary/by_metadata/Go-Import-Path
has:

    {
      "binary": "golang-golang-x-text-dev",
      "source": "golang-golang-x-text",
      "metadata_value": "golang.org/x/text"
    },
    {
      "binary": "golang-golang-x-text-dev",
      "source": "golang-x-text",
      "metadata_value": "golang.org/x/text"
    },
    …
    {
      "binary": "golang-x-text-dev",
      "source": "golang-x-text",
      "metadata_value": "golang.org/x/text"
    },

In the end, maybe having some kind of hardcoded list of overrides would
be the easiest to implement, and yield the best return on investment… ;)


Cheers,
-- 
Cyril Brulebois -- Debian Consultant @ DEBAMAX -- https://debamax.com/

Attachment: signature.asc
Description: PGP signature


Reply to: