The judge knows the Go packages the trunk holds a record of (issue 1966, recovery)
The indexer's judge refused manifests whose `packages` name a Go package that no manifest declares as a package artifact: such a package has no series key, and knownPackages took series keys only, though each module the trunk published has a per-module record in the packages state naming its Go module and packages. knownPackages (and the checker's PackageNames) now also count each record's module and packages[].package; an unreadable state still judges no name. Quick vs thorough: this is the quick fix, the smallest change that lets the trunk's own records name what the manifests name. The thorough fix is that a build module builds Go package artifacts, so every Go package gets a series (the registry milestone); then the records stop being a source of names. Done now because the 15 refused manifests hold the bootstrap of the registry delivery.
This commit is contained in:
@@ -158,6 +158,10 @@ func TestThePublishedVersionsAreTheIndexersPackagesState(t *testing.T) {
|
||||
if got := p.LatestPackages(); len(got) != 1 || got[sdk] == "" {
|
||||
t.Errorf("after a delete: %v", got)
|
||||
}
|
||||
// Issue 1966: a module record names its module and its Go packages too, with no series to say them.
|
||||
if got := p.PackageNames(); !reflect.DeepEqual(got, map[string]string{sdk: ""}) {
|
||||
t.Errorf("the known packages from a module record = %v", got)
|
||||
}
|
||||
// A series key names its package by its ecosystem name, the judge's known packages (DLV-I14, design 32), and is no
|
||||
// module's published version.
|
||||
now := time.Now().UTC()
|
||||
|
||||
@@ -78,7 +78,8 @@ func (p *publishedPackages) LatestPackages() buildstep.PackageVersions {
|
||||
return out
|
||||
}
|
||||
|
||||
// PackageNames are the packages the state's series keys name, by the name in its own ecosystem: the `<module>/<artifact>`
|
||||
// PackageNames are the packages the state's series keys name, and the Go module path and each Go package of each per-module record (issue 1966:
|
||||
// the indexer's own knownPackages counts them the same way, with no `<module>/<artifact>` to say), by the name in its own ecosystem: the `<module>/<artifact>`
|
||||
// each is built from (empty when the key does not say). Nil while the state is not read yet (Answered), which judges no
|
||||
// name; once read never nil, an empty state included, so the judge judges every name against it.
|
||||
func (p *publishedPackages) PackageNames() map[string]string {
|
||||
@@ -93,6 +94,17 @@ func (p *publishedPackages) PackageNames() map[string]string {
|
||||
out[s.Name] = s.Package
|
||||
}
|
||||
}
|
||||
for _, v := range p.byKey {
|
||||
names := []string{v.Module}
|
||||
for _, d := range v.Packages {
|
||||
names = append(names, d.Package)
|
||||
}
|
||||
for _, n := range names {
|
||||
if _, ok := out[n]; !ok && n != "" {
|
||||
out[n] = ""
|
||||
}
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
|
||||
@@ -440,6 +440,18 @@ func TestTheControlRecords(t *testing.T) {
|
||||
if known := ix.knownPackages(ctx); len(known) != 2 || !known[sdkGo] || !known["@novox/mesh-sdk"] {
|
||||
t.Errorf("the judge's known packages = %v", known)
|
||||
}
|
||||
// Issue 1966: a Go package of a module the trunk holds a per-module record of is known, though no series names it.
|
||||
resticMod, at := "git.novox.be/novox/mesh-delivery/modules/restic", time.Unix(1, 0)
|
||||
rec, err := EncodePublishedPackages(meshcatalog.PackagesByModuleValue{Module: resticMod, Repository: "novox/mesh-delivery", Dir: "modules/restic", At: &at,
|
||||
Commit: strings.Repeat("a", 40), Requires: "h1:r", Packages: []meshcatalog.PackagesByModuleValuePackagesItem{{Package: resticMod + "/backupgood", Digest: "h1:a"}}})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
ix.Packages.(*memStore).vals["restic"] = rec
|
||||
if known := ix.knownPackages(ctx); len(known) != 4 || !known[resticMod] || !known[resticMod+"/backupgood"] || !known[sdkGo] || known["restic/go"] || known["unknown/pkg"] {
|
||||
t.Errorf("the judge's known packages with a module record = %v", known)
|
||||
}
|
||||
delete(ix.Packages.(*memStore).vals, "restic")
|
||||
delete(ix.Packages.(*memStore).vals, SeriesKey("@novox/mesh-sdk", "0.3"))
|
||||
for _, h := range []HeardVersion{
|
||||
{Package: sdkGo, Seat: "go-package-registry", Version: "0.1.15", Commit: "c15"},
|
||||
|
||||
@@ -362,7 +362,9 @@ func namesAtMerge(module string, raw []byte, atMerge bool, known judge.KnownPack
|
||||
}
|
||||
|
||||
// knownPackages are the packages a manifest's `packages` may name (DLV-I14, design 32): every name the packages state's
|
||||
// series keys hold, as KeepPackageNames reads it at each merge. Nil, which judges no name, where the indexer keeps no
|
||||
// series keys hold, as KeepPackageNames reads it at each merge, and the Go module path and each Go package of every
|
||||
// per-module record the state holds from the trunk: while no build module builds Go package artifacts, a package the
|
||||
// trunk holds a record of has no series and is known by that record (issue 1966). Nil, which judges no name, where the indexer keeps no
|
||||
// packages state or it cannot be listed (said): a state the judge cannot read refuses no manifest.
|
||||
func (ix *Indexer) knownPackages(ctx context.Context) judge.KnownPackages {
|
||||
if ix.Packages == nil {
|
||||
@@ -375,14 +377,20 @@ func (ix *Indexer) knownPackages(ctx context.Context) judge.KnownPackages {
|
||||
}
|
||||
known := judge.KnownPackages{}
|
||||
for _, key := range keys {
|
||||
if !IsSeriesKey(key) {
|
||||
continue
|
||||
}
|
||||
value, _, found, err := ix.Packages.Get(ctx, key)
|
||||
if err != nil {
|
||||
ix.logf("judge: packages.%s cannot be read, so the names of packages are not judged: %v", key, err)
|
||||
return nil
|
||||
}
|
||||
if !IsSeriesKey(key) {
|
||||
if r, err := DecodePublishedPackages(value); found && err == nil && r.Module != "" {
|
||||
known[r.Module] = true
|
||||
for _, d := range r.Packages {
|
||||
known[d.Package] = true
|
||||
}
|
||||
}
|
||||
continue
|
||||
}
|
||||
if s, err := DecodeSeriesPackage(value); found && err == nil {
|
||||
known[s.Name] = true
|
||||
}
|
||||
|
||||
@@ -12,7 +12,9 @@ import (
|
||||
// KnownPackages are the names of the packages the mesh knows, each by its name in its own ecosystem (design 32: a Go
|
||||
// package's go.mod module path, a TypeScript package's package.json name): the names the indexer's packages state holds
|
||||
// (its series keys, index.SeriesPackage's Name), read at each trunk merge, and, at the merge check, the names a member
|
||||
// of the change's delivery group names at its head for a package new in the group. Both read a name with mesh-delivery's
|
||||
// of the change's delivery group names at its head for a package new in the group, and the Go module path and each Go package of each per-module
|
||||
// record the state holds: a package the trunk holds a record of is known while no build module builds Go package
|
||||
// artifacts (issue 1966), as well as a declared series. Both read a name with mesh-delivery's
|
||||
// sdk/packagename. Nil is no list at hand: the names are then not judged, only their series.
|
||||
type KnownPackages map[string]bool
|
||||
|
||||
|
||||
Reference in New Issue
Block a user