diff --git a/pkg/compiler/artifact_test.go b/pkg/compiler/artifact_test.go index 00db91e5..7277adc0 100644 --- a/pkg/compiler/artifact_test.go +++ b/pkg/compiler/artifact_test.go @@ -38,11 +38,10 @@ var _ = Describe("Artifact", func() { err := generalRecipe.Load("../../tests/fixtures/buildtree") Expect(err).ToNot(HaveOccurred()) - Expect(generalRecipe.Tree()).ToNot(BeNil()) // It should be populated back at this point - Expect(len(generalRecipe.Tree().GetPackageSet().GetPackages())).To(Equal(1)) + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(1)) - compiler := NewLuetCompiler(nil, generalRecipe.Tree(), generalRecipe.Tree().GetPackageSet()) + compiler := NewLuetCompiler(nil, generalRecipe.GetDatabase()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "enman", Category: "app-admin", Version: "1.4.0"}) Expect(err).ToNot(HaveOccurred()) diff --git a/pkg/compiler/compiler.go b/pkg/compiler/compiler.go index b682f067..6952a540 100644 --- a/pkg/compiler/compiler.go +++ b/pkg/compiler/compiler.go @@ -39,12 +39,12 @@ type LuetCompiler struct { Database pkg.PackageDatabase } -func NewLuetCompiler(backend CompilerBackend, t pkg.Tree, db pkg.PackageDatabase) Compiler { +func NewLuetCompiler(backend CompilerBackend, db pkg.PackageDatabase) Compiler { // The CompilerRecipe will gives us a tree with only build deps listed. return &LuetCompiler{ Backend: backend, CompilerRecipe: &tree.CompilerRecipe{ - tree.Recipe{PackageTree: t}, + tree.Recipe{Database: db}, }, Database: db, } @@ -73,10 +73,8 @@ func (cs *LuetCompiler) CompileWithReverseDeps(concurrency int, keepPermissions Info(":ant: Resolving reverse dependencies") toCompile := NewLuetCompilationspecs() for _, a := range artifacts { - w, asserterr := cs.Tree().World() - if asserterr != nil { - return nil, append(err, asserterr) - } + w := cs.Database.World() + revdeps := a.GetCompileSpec().GetPackage().Revdeps(&w) for _, r := range revdeps { spec, asserterr := cs.FromPackage(r) @@ -291,14 +289,6 @@ func (cs *LuetCompiler) compileWithImage(image, buildertaggedImage, packageImage return artifact, nil } -func (cs *LuetCompiler) Prepare(concurrency int) error { - - err := cs.Tree().ResolveDeps(concurrency) // FIXME: When done in parallel, this could be done on top before starting - if err != nil { - return errors.Wrap(err, "While resoolving tree world deps") - } - return nil -} func (cs *LuetCompiler) packageFromImage(p CompilationSpec, tag string, keepPermissions bool) (Artifact, error) { pkgTag := ":package: " + p.GetPackage().GetName() @@ -353,17 +343,9 @@ func (cs *LuetCompiler) packageFromImage(p CompilationSpec, tag string, keepPerm func (cs *LuetCompiler) ComputeDepTree(p CompilationSpec) (solver.PackagesAssertions, error) { - // Get build deps tree (ordered) - world, err := cs.Tree().World() - if err != nil { - return nil, errors.Wrap(err, "While computing tree world") - } - s := solver.NewSolver([]pkg.Package{}, world, cs.Database) - pack, err := cs.Tree().FindPackage(p.GetPackage()) - if err != nil { - return nil, errors.Wrap(err, "While computing a solution for "+p.GetPackage().GetName()) - } - solution, err := s.Install([]pkg.Package{pack}) + s := solver.NewSolver(pkg.NewInMemoryDatabase(false), cs.Database, pkg.NewInMemoryDatabase(false)) + + solution, err := s.Install([]pkg.Package{p.GetPackage()}) if err != nil { return nil, errors.Wrap(err, "While computing a solution for "+p.GetPackage().GetName()) } @@ -371,19 +353,16 @@ func (cs *LuetCompiler) ComputeDepTree(p CompilationSpec) (solver.PackagesAssert assertions := solver.PackagesAssertions{} for _, assertion := range dependencies { //highly dependent on the order - if assertion.Value && assertion.Package.Flagged() { - depPack, err := cs.Tree().FindPackage(assertion.Package) - if err != nil { - return nil, errors.Wrap(err, "While computing a solution for "+p.GetPackage().GetName()) - } - nthsolution, err := s.Install([]pkg.Package{depPack}) + if assertion.Value { + + nthsolution, err := s.Install([]pkg.Package{assertion.Package}) if err != nil { return nil, errors.Wrap(err, "While computing a solution for "+p.GetPackage().GetName()) } assertion.Hash = solver.PackageHash{ - BuildHash: nthsolution.Order(depPack.GetFingerPrint()).Drop(depPack).AssertionHash(), - PackageHash: nthsolution.Order(depPack.GetFingerPrint()).AssertionHash(), + BuildHash: nthsolution.Order(assertion.Package.GetFingerPrint()).Drop(assertion.Package).AssertionHash(), + PackageHash: nthsolution.Order(assertion.Package.GetFingerPrint()).AssertionHash(), } assertions = append(assertions, assertion) } @@ -503,7 +482,7 @@ func (cs *LuetCompiler) compile(concurrency int, keepPermissions bool, p Compila func (cs *LuetCompiler) FromPackage(p pkg.Package) (CompilationSpec, error) { - pack, err := cs.Tree().FindPackage(p) + pack, err := cs.Database.FindPackage(p) if err != nil { return nil, err } diff --git a/pkg/compiler/compiler_test.go b/pkg/compiler/compiler_test.go index 0edaec14..9741def1 100644 --- a/pkg/compiler/compiler_test.go +++ b/pkg/compiler/compiler_test.go @@ -35,13 +35,10 @@ var _ = Describe("Compiler", func() { err := generalRecipe.Load("../../tests/fixtures/buildable") Expect(err).ToNot(HaveOccurred()) - Expect(generalRecipe.Tree()).ToNot(BeNil()) // It should be populated back at this point - Expect(len(generalRecipe.Tree().GetPackageSet().GetPackages())).To(Equal(3)) + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.Tree(), generalRecipe.Tree().GetPackageSet()) - err = compiler.Prepare(1) - Expect(err).ToNot(HaveOccurred()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -80,13 +77,10 @@ var _ = Describe("Compiler", func() { err := generalRecipe.Load("../../tests/fixtures/buildable") Expect(err).ToNot(HaveOccurred()) - Expect(generalRecipe.Tree()).ToNot(BeNil()) // It should be populated back at this point - Expect(len(generalRecipe.Tree().GetPackageSet().GetPackages())).To(Equal(3)) + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.Tree(), generalRecipe.Tree().GetPackageSet()) - err = compiler.Prepare(1) - Expect(err).ToNot(HaveOccurred()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -120,14 +114,10 @@ var _ = Describe("Compiler", func() { err = generalRecipe.Load("../../tests/fixtures/buildableseed") Expect(err).ToNot(HaveOccurred()) - Expect(generalRecipe.Tree()).ToNot(BeNil()) // It should be populated back at this point - Expect(len(generalRecipe.Tree().GetPackageSet().GetPackages())).To(Equal(4)) + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(4)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.Tree(), generalRecipe.Tree().GetPackageSet()) - - err = compiler.Prepare(1) - Expect(err).ToNot(HaveOccurred()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "c", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -180,13 +170,10 @@ var _ = Describe("Compiler", func() { err = generalRecipe.Load("../../tests/fixtures/layers") Expect(err).ToNot(HaveOccurred()) - Expect(generalRecipe.Tree()).ToNot(BeNil()) // It should be populated back at this point - Expect(len(generalRecipe.Tree().GetPackageSet().GetPackages())).To(Equal(2)) + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(2)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.Tree(), generalRecipe.Tree().GetPackageSet()) - err = compiler.Prepare(1) - Expect(err).ToNot(HaveOccurred()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "extra", Category: "layer", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -225,13 +212,10 @@ var _ = Describe("Compiler", func() { err = generalRecipe.Load("../../tests/fixtures/include") Expect(err).ToNot(HaveOccurred()) - Expect(generalRecipe.Tree()).ToNot(BeNil()) // It should be populated back at this point - Expect(len(generalRecipe.Tree().GetPackageSet().GetPackages())).To(Equal(1)) + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(1)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.Tree(), generalRecipe.Tree().GetPackageSet()) - err = compiler.Prepare(1) - Expect(err).ToNot(HaveOccurred()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -262,13 +246,10 @@ var _ = Describe("Compiler", func() { err = generalRecipe.Load("../../tests/fixtures/layered") Expect(err).ToNot(HaveOccurred()) - Expect(generalRecipe.Tree()).ToNot(BeNil()) // It should be populated back at this point - Expect(len(generalRecipe.Tree().GetPackageSet().GetPackages())).To(Equal(3)) + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.Tree(), generalRecipe.Tree().GetPackageSet()) - err = compiler.Prepare(1) - Expect(err).ToNot(HaveOccurred()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "pkgs-checker", Category: "package", Version: "9999"}) Expect(err).ToNot(HaveOccurred()) @@ -305,13 +286,10 @@ var _ = Describe("Compiler", func() { err = generalRecipe.Load("../../tests/fixtures/layered") Expect(err).ToNot(HaveOccurred()) - Expect(generalRecipe.Tree()).ToNot(BeNil()) // It should be populated back at this point - Expect(len(generalRecipe.Tree().GetPackageSet().GetPackages())).To(Equal(3)) + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.Tree(), generalRecipe.Tree().GetPackageSet()) - err = compiler.Prepare(1) - Expect(err).ToNot(HaveOccurred()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "extra", Category: "layer", Version: "0.1"}) Expect(err).ToNot(HaveOccurred()) @@ -346,13 +324,10 @@ var _ = Describe("Compiler", func() { err = generalRecipe.Load("../../tests/fixtures/buildableseed") Expect(err).ToNot(HaveOccurred()) - Expect(generalRecipe.Tree()).ToNot(BeNil()) // It should be populated back at this point - Expect(len(generalRecipe.Tree().GetPackageSet().GetPackages())).To(Equal(4)) + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(4)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.Tree(), generalRecipe.Tree().GetPackageSet()) - err = compiler.Prepare(1) - Expect(err).ToNot(HaveOccurred()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) @@ -401,13 +376,10 @@ var _ = Describe("Compiler", func() { err := generalRecipe.Load("../../tests/fixtures/expansion") Expect(err).ToNot(HaveOccurred()) - Expect(generalRecipe.Tree()).ToNot(BeNil()) // It should be populated back at this point - Expect(len(generalRecipe.Tree().GetPackageSet().GetPackages())).To(Equal(3)) + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(3)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.Tree(), generalRecipe.Tree().GetPackageSet()) - err = compiler.Prepare(1) - Expect(err).ToNot(HaveOccurred()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "c", Category: "test", Version: "1.0"}) Expect(err).ToNot(HaveOccurred()) @@ -445,13 +417,10 @@ var _ = Describe("Compiler", func() { err := generalRecipe.Load("../../tests/fixtures/packagelayers") Expect(err).ToNot(HaveOccurred()) - Expect(generalRecipe.Tree()).ToNot(BeNil()) // It should be populated back at this point - Expect(len(generalRecipe.Tree().GetPackageSet().GetPackages())).To(Equal(2)) + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(2)) - compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.Tree(), generalRecipe.Tree().GetPackageSet()) - err = compiler.Prepare(1) - Expect(err).ToNot(HaveOccurred()) + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "runtime", Category: "layer", Version: "0.1"}) Expect(err).ToNot(HaveOccurred()) @@ -468,7 +437,7 @@ var _ = Describe("Compiler", func() { Expect(len(artifacts)).To(Equal(1)) Expect(len(artifacts[0].GetDependencies())).To(Equal(1)) Expect(helpers.Untar(spec.Rel("runtime-layer-0.1.package.tar"), tmpdir, false)).ToNot(HaveOccurred()) - Expect(helpers.Exists(spec.Rel("bin/sh"))).To(BeTrue()) + Expect(helpers.Exists(spec.Rel("bin/busybox"))).To(BeTrue()) Expect(helpers.Exists(spec.Rel("var"))).ToNot(BeTrue()) }) }) diff --git a/pkg/compiler/interface.go b/pkg/compiler/interface.go index 4f41a565..9dde5145 100644 --- a/pkg/compiler/interface.go +++ b/pkg/compiler/interface.go @@ -25,7 +25,6 @@ type Compiler interface { CompileParallel(concurrency int, keepPermissions bool, ps CompilationSpecs) ([]Artifact, []error) CompileWithReverseDeps(concurrency int, keepPermissions bool, ps CompilationSpecs) ([]Artifact, []error) ComputeDepTree(p CompilationSpec) (solver.PackagesAssertions, error) - Prepare(concurrency int) error FromPackage(pkg.Package) (CompilationSpec, error) diff --git a/pkg/compiler/spec_test.go b/pkg/compiler/spec_test.go index f82bddf1..8dcf7e46 100644 --- a/pkg/compiler/spec_test.go +++ b/pkg/compiler/spec_test.go @@ -58,11 +58,10 @@ var _ = Describe("Spec", func() { err := generalRecipe.Load("../../tests/fixtures/buildtree") Expect(err).ToNot(HaveOccurred()) - Expect(generalRecipe.Tree()).ToNot(BeNil()) // It should be populated back at this point - Expect(len(generalRecipe.Tree().GetPackageSet().GetPackages())).To(Equal(1)) + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(1)) - compiler := NewLuetCompiler(nil, generalRecipe.Tree(), generalRecipe.Tree().GetPackageSet()) + compiler := NewLuetCompiler(nil, generalRecipe.GetDatabase()) spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "enman", Category: "app-admin", Version: "1.4.0"}) Expect(err).ToNot(HaveOccurred()) diff --git a/pkg/installer/installer.go b/pkg/installer/installer.go index de6bc8ff..b158cf6b 100644 --- a/pkg/installer/installer.go +++ b/pkg/installer/installer.go @@ -167,7 +167,7 @@ func (l *LuetInstaller) Install(p []pkg.Package, s *System) error { // Gathers things to install toInstall := map[string]ArtifactMatch{} for _, assertion := range solution { - if assertion.Value && assertion.Package.Flagged() { + if assertion.Value { matches := syncedRepos.PackageMatches([]pkg.Package{assertion.Package}) if len(matches) != 1 { return errors.New("Failed matching solutions against repository - where are definitions coming from?!") @@ -209,7 +209,7 @@ func (l *LuetInstaller) Install(p []pkg.Package, s *System) error { // Finalizers needs to run in order and in sequence. ordered := solution.Order(w.GetFingerPrint()) for _, ass := range ordered { - if ass.Value && ass.Package.Flagged() { + if ass.Value { // Annotate to the system that the package was installed // TODO: Annotate also files that belong to the package, somewhere to uninstall if _, err := s.Database.FindPackage(ass.Package); err == nil {