A merge rebuilds what it changed, and what packages it
Three faults in one path. A merge rebuilt every module built from the repository, so one change in a repository holding twenty-six of them meant twenty-six builds. A merge into a repository a module only *packages* source from rebuilt nothing — two modules are built from the control plane's own repository and neither had ever been rebuilt when it moved — because the manifest the mesh keeps carries no build section, so a build now says which repositories it read and the mesh keeps that beside what it stood on. And a module handed over by hand could record a repository with no directory inside it, which is a module nothing can ever rebuild (novox/hq 04-ISSUES/131, /132). A change inside no module's own directory is a change to what they share, and everything built from that repository is rebuilt: rebuilding too much is the safe direction, because the fault this whole path exists for is a mesh that believes it is current and is not.
This commit is contained in:
@@ -136,3 +136,36 @@ func ids(builds []Build) []string {
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// What a build read besides its module's own repository comes back for the newest build of each
|
||||
// module, and only for builds that worked. Nothing recorded is absent rather than empty, which is how
|
||||
// a build made before the mesh kept this is told from one that read nothing (novox/hq 04-ISSUES/131).
|
||||
func TestWhatABuildReadComesBackForTheNewestBuildOfEachModule(t *testing.T) {
|
||||
inv := fresh(t)
|
||||
ctx := context.Background()
|
||||
older := aBuild("older", "builder", "")
|
||||
older.Read = []ReadRepository{{Repository: "novox/mesh-controller", Ref: "release"}}
|
||||
newer := aBuild("newer", "builder", "")
|
||||
newer.Read = []ReadRepository{{Repository: "novox/mesh-controller", Ref: "main"}}
|
||||
plain := aBuild("plain", "gitea", "")
|
||||
failed := aBuild("failed", "route-proxy", "cannot clone")
|
||||
failed.Read = []ReadRepository{{Repository: "novox/mesh-controller", Ref: "main"}}
|
||||
for _, b := range []Build{older, newer, plain, failed} {
|
||||
if err := inv.RecordBuild(ctx, b); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
read, err := inv.ReadRepositories(ctx)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(read["builder"]) != 1 || read["builder"][0].Ref != "main" {
|
||||
t.Fatalf("the newest build's reading is %+v", read["builder"])
|
||||
}
|
||||
if _, has := read["gitea"]; has {
|
||||
t.Fatalf("a build that read nothing but its own repository reads as %+v", read["gitea"])
|
||||
}
|
||||
if _, has := read["route-proxy"]; has {
|
||||
t.Fatal("a failed build's reading was kept as what that module reads")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user