Relax best match constraint rule

Or we could return unsat
This commit is contained in:
Ettore Di Giacinto
2019-12-18 19:24:44 +01:00
committed by Ettore Di Giacinto
parent 15250bd991
commit d941c9755b
22 changed files with 162 additions and 2 deletions

View File

@@ -438,6 +438,45 @@ var _ = Describe("Compiler", func() {
Expect(helpers.Exists(spec.Rel("extra-layer-0.1.package.tar"))).To(BeTrue())
})
It("Compiles complex dependencies trees with best matches", func() {
generalRecipe := tree.NewCompilerRecipe(pkg.NewInMemoryDatabase(false))
tmpdir, err := ioutil.TempDir("", "complex")
Expect(err).ToNot(HaveOccurred())
defer os.RemoveAll(tmpdir) // clean up
err = generalRecipe.Load("../../tests/fixtures/complex/selection")
Expect(err).ToNot(HaveOccurred())
Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(10))
compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase())
spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "vhba", Category: "sys-fs-5.4.2", Version: "20190410"})
Expect(err).ToNot(HaveOccurred())
// err = generalRecipe.Tree().ResolveDeps(3)
// Expect(err).ToNot(HaveOccurred())
spec.SetOutputPath(tmpdir)
artifacts, errs := compiler.CompileParallel(1, false, NewLuetCompilationspecs(spec))
Expect(errs).To(BeNil())
Expect(len(artifacts)).To(Equal(1))
Expect(len(artifacts[0].GetDependencies())).To(Equal(6))
for _, artifact := range artifacts {
Expect(helpers.Exists(artifact.GetPath())).To(BeTrue())
Expect(helpers.Untar(artifact.GetPath(), tmpdir, false)).ToNot(HaveOccurred())
}
Expect(helpers.Untar(spec.Rel("vhba-sys-fs-5.4.2-20190410.package.tar"), tmpdir, false)).ToNot(HaveOccurred())
Expect(helpers.Exists(spec.Rel("sabayon-build-portage-layer-0.20191126.package.tar"))).To(BeTrue())
Expect(helpers.Exists(spec.Rel("build-layer-0.1.package.tar"))).To(BeTrue())
Expect(helpers.Exists(spec.Rel("build-sabayon-overlay-layer-0.20191212.package.tar"))).To(BeTrue())
Expect(helpers.Exists(spec.Rel("build-sabayon-overlays-layer-0.1.package.tar"))).To(BeTrue())
Expect(helpers.Exists(spec.Rel("linux-sabayon-sys-kernel-5.4.2.package.tar"))).To(BeTrue())
Expect(helpers.Exists(spec.Rel("sabayon-sources-sys-kernel-5.4.2.package.tar"))).To(BeTrue())
Expect(helpers.Exists(spec.Rel("vhba"))).To(BeTrue())
})
It("Compiles revdeps with seeds", func() {
generalRecipe := tree.NewCompilerRecipe(pkg.NewInMemoryDatabase(false))
tmpdir, err := ioutil.TempDir("", "package")

View File

@@ -458,7 +458,7 @@ func (pack *DefaultPackage) BuildFormula(definitiondb PackageDatabase, db Packag
if len(packages) == 1 {
required = packages[0]
} else {
var ALO, priorityConstraints []bf.Formula
var ALO, priorityConstraints, priorityALO []bf.Formula
// Try to prio best match
// Force the solver to consider first our candidate (if does exists).
@@ -475,6 +475,7 @@ func (pack *DefaultPackage) BuildFormula(definitiondb PackageDatabase, db Packag
B := bf.Var(encodedB)
if !o.Matches(c) {
priorityConstraints = append(priorityConstraints, bf.Not(B))
priorityALO = append(priorityALO, B)
}
}
encodedC, err := c.Encode(db)
@@ -484,7 +485,7 @@ func (pack *DefaultPackage) BuildFormula(definitiondb PackageDatabase, db Packag
C = bf.Var(encodedC)
// Or the Candidate is true, or all the others might be not true
// This forces the CDCL sat implementation to look first at a solution with C=true
formulas = append(formulas, bf.Or(C, bf.Or(priorityConstraints...)))
formulas = append(formulas, bf.Or(bf.Or(C, bf.Or(priorityConstraints...)), bf.Or(bf.Not(C), bf.Or(priorityALO...))))
}
// AMO - At most one

View File

@@ -0,0 +1,2 @@
image: "alpine:3.5"

View File

@@ -0,0 +1,3 @@
category: "layer"
name: "build"
version: "0.1"

View File

@@ -0,0 +1,17 @@
requires:
# This pins the portage version
#- category: "layer"
# name: "portage"
# version: ">=0.1"
- category: "layer"
name: "sabayon-build-portage"
version: "0.20191126"
# This pins sabayon overlays (sabayon-distro, for-gentoo)
#- category: "layer"
# name: "sabayon-overlay"
# version: ">=0.1"
- category: "layer"
name: "build-sabayon-overlay"
version: "0.20191212"

View File

@@ -0,0 +1,3 @@
category: "layer"
name: "build-sabayon-overlays"
version: "0.20191212"

View File

@@ -0,0 +1,9 @@
steps:
- echo "vhba" > /vhba
requires:
- category: "sys-kernel"
version: "5.4.2"
name: "linux-sabayon"
- category: "sys-kernel"
version: "5.4.2"
name: "sabayon-sources"

View File

@@ -0,0 +1,3 @@
category: "sys-fs-5.4.2"
name: "vhba"
version: "20190410"

View File

@@ -0,0 +1,7 @@
requires:
- category: "layer"
version: "0.1"
name: "build-sabayon-overlays"
includes:
- /usr/portage/packages/.*

View File

@@ -0,0 +1,6 @@
category: sys-kernel
description: Official Sabayon Linux Standard kernel image
license: ""
name: linux-sabayon
uri: []
version: 5.4.2

View File

@@ -0,0 +1,18 @@
requires:
# This pins the portage version
#- category: "layer"
# name: "portage"
# version: ">=0.1"
- category: "layer"
name: "sabayon-build-portage"
version: "0.20191126"
# This pins sabayon overlays (sabayon-distro, for-gentoo)
#- category: "layer"
# name: "sabayon-overlay"
# version: ">=0.1"
- category: "layer"
name: "build-sabayon-overlay"
version: ">=0.1"

View File

@@ -0,0 +1,3 @@
category: "layer"
name: "build-sabayon-overlays"
version: "0.1"

View File

@@ -0,0 +1,4 @@
requires:
- category: "layer"
name: "build"
version: ">=0.1"

View File

@@ -0,0 +1,3 @@
category: "layer"
name: "sabayon-build-portage"
version: "0.20191126"

View File

@@ -0,0 +1,4 @@
requires:
- category: "layer"
version: "0.1"
name: "build"

View File

@@ -0,0 +1,3 @@
category: "layer"
name: "sabayon-build-portage"
version: "0.20191212"

View File

@@ -0,0 +1,7 @@
requires:
- category: "layer"
name: "build"
version: ">=0.1"
- category: "layer"
name: "sabayon-build-portage"
version: ">=0.1"

View File

@@ -0,0 +1,3 @@
category: "layer"
name: "build-sabayon-overlay"
version: "0.20191205"

View File

@@ -0,0 +1,7 @@
requires:
- category: "layer"
name: "build"
version: ">=0.1"
- category: "layer"
name: "sabayon-build-portage"
version: ">=0.1"

View File

@@ -0,0 +1,3 @@
category: "layer"
name: "build-sabayon-overlay"
version: "0.20191212"

View File

@@ -0,0 +1,7 @@
requires:
- category: "layer"
version: "0.1"
name: "build-sabayon-overlays"
includes:
- /usr/portage/packages/.*

View File

@@ -0,0 +1,8 @@
category: sys-kernel
description: Official Sabayon Linux Standard kernel sources
license: ""
name: sabayon-sources
uri: []
use_flags:
- sources_standalone
version: 5.4.2