Something went wrong. Try again.
Maps Linux distribution source packages to their upstream repositories, and through them to each other
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061package bulk
import ( "sort"
"tangled.org/odd.computer/isomorph/internal/distro" "tangled.org/odd.computer/isomorph/internal/distro/alpine" "tangled.org/odd.computer/isomorph/internal/model")
// FromAlpine builds one row per origin (source package) of the edge APKINDEX of each section.// The APKINDEX supplies the built version, url and binary names; the origin's APKBUILD (keyed// "<section>/<origin>") supplies the source URLs. OSV defines Alpine ecosystems per release// (Alpine:v3.22), not for edge, so OSVEcosystem stays empty for these rows.func FromAlpine(index map[string][]alpine.IndexEntry, apkbuilds map[string]*alpine.APKBUILD) []Package { var out []Package for _, section := range sortedKeys(index) { type origin struct { version, url string bins []string } origins := map[string]*origin{} for _, e := range index[section] { name := e.Origin if name == "" { name = e.Name } o := origins[name] if o == nil { o = &origin{version: e.Version, url: e.URL} origins[name] = o } o.bins = append(o.bins, e.Name) } for _, name := range sortedKeys(origins) { o := origins[name] p := Package{Distro: model.Alpine, Suite: "edge-" + section, Name: name, Version: o.version, Binaries: dedupe(o.bins), Homepage: o.url, Status: StatusUnresolved} if ab := apkbuilds[section+"/"+name]; ab != nil { if ab.URL != "" { p.Homepage = ab.URL } fill(&p, distro.RankCandidates(alpine.Candidates(ab))) } else if o.url != "" { fill(&p, distro.RankCandidates(distro.AddCandidate(nil, o.url, model.Evidence{Source: "APKINDEX:url", Value: o.url, Weight: 0.5}))) } out = append(out, p) } } return out}
func sortedKeys[V any](m map[string]V) []string { out := make([]string, 0, len(m)) for k := range m { out = append(out, k) } sort.Strings(out) return out}