mirror of
https://github.com/mudler/luet.git
synced 2025-09-04 16:50:50 +00:00
Relax best match constraint rule
Or we could return unsat
This commit is contained in:
committed by
Ettore Di Giacinto
parent
15250bd991
commit
d941c9755b
@@ -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")
|
||||
|
@@ -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
|
||||
|
2
tests/fixtures/complex/selection/0.1/build.yaml
vendored
Normal file
2
tests/fixtures/complex/selection/0.1/build.yaml
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
image: "alpine:3.5"
|
3
tests/fixtures/complex/selection/0.1/definition.yaml
vendored
Normal file
3
tests/fixtures/complex/selection/0.1/definition.yaml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
category: "layer"
|
||||
name: "build"
|
||||
version: "0.1"
|
17
tests/fixtures/complex/selection/0.20191212/build.yaml
vendored
Normal file
17
tests/fixtures/complex/selection/0.20191212/build.yaml
vendored
Normal 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"
|
3
tests/fixtures/complex/selection/0.20191212/definition.yaml
vendored
Normal file
3
tests/fixtures/complex/selection/0.20191212/definition.yaml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
category: "layer"
|
||||
name: "build-sabayon-overlays"
|
||||
version: "0.20191212"
|
9
tests/fixtures/complex/selection/5.4.2/build.yaml
vendored
Normal file
9
tests/fixtures/complex/selection/5.4.2/build.yaml
vendored
Normal 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"
|
3
tests/fixtures/complex/selection/5.4.2/definition.yaml
vendored
Normal file
3
tests/fixtures/complex/selection/5.4.2/definition.yaml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
category: "sys-fs-5.4.2"
|
||||
name: "vhba"
|
||||
version: "20190410"
|
7
tests/fixtures/complex/selection/kernel/build.yaml
vendored
Normal file
7
tests/fixtures/complex/selection/kernel/build.yaml
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
requires:
|
||||
- category: "layer"
|
||||
version: "0.1"
|
||||
name: "build-sabayon-overlays"
|
||||
|
||||
includes:
|
||||
- /usr/portage/packages/.*
|
6
tests/fixtures/complex/selection/kernel/definition.yaml
vendored
Normal file
6
tests/fixtures/complex/selection/kernel/definition.yaml
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
category: sys-kernel
|
||||
description: Official Sabayon Linux Standard kernel image
|
||||
license: ""
|
||||
name: linux-sabayon
|
||||
uri: []
|
||||
version: 5.4.2
|
18
tests/fixtures/complex/selection/meta/build.yaml
vendored
Normal file
18
tests/fixtures/complex/selection/meta/build.yaml
vendored
Normal 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"
|
3
tests/fixtures/complex/selection/meta/definition.yaml
vendored
Normal file
3
tests/fixtures/complex/selection/meta/definition.yaml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
category: "layer"
|
||||
name: "build-sabayon-overlays"
|
||||
version: "0.1"
|
4
tests/fixtures/complex/selection/sabayon-build-overlays/portage/0.20191126/build.yaml
vendored
Normal file
4
tests/fixtures/complex/selection/sabayon-build-overlays/portage/0.20191126/build.yaml
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
requires:
|
||||
- category: "layer"
|
||||
name: "build"
|
||||
version: ">=0.1"
|
3
tests/fixtures/complex/selection/sabayon-build-overlays/portage/0.20191126/definition.yaml
vendored
Normal file
3
tests/fixtures/complex/selection/sabayon-build-overlays/portage/0.20191126/definition.yaml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
category: "layer"
|
||||
name: "sabayon-build-portage"
|
||||
version: "0.20191126"
|
4
tests/fixtures/complex/selection/sabayon-build-overlays/portage/0.20191212/build.yaml
vendored
Normal file
4
tests/fixtures/complex/selection/sabayon-build-overlays/portage/0.20191212/build.yaml
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
requires:
|
||||
- category: "layer"
|
||||
version: "0.1"
|
||||
name: "build"
|
3
tests/fixtures/complex/selection/sabayon-build-overlays/portage/0.20191212/definition.yaml
vendored
Normal file
3
tests/fixtures/complex/selection/sabayon-build-overlays/portage/0.20191212/definition.yaml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
category: "layer"
|
||||
name: "sabayon-build-portage"
|
||||
version: "0.20191212"
|
@@ -0,0 +1,7 @@
|
||||
requires:
|
||||
- category: "layer"
|
||||
name: "build"
|
||||
version: ">=0.1"
|
||||
- category: "layer"
|
||||
name: "sabayon-build-portage"
|
||||
version: ">=0.1"
|
@@ -0,0 +1,3 @@
|
||||
category: "layer"
|
||||
name: "build-sabayon-overlay"
|
||||
version: "0.20191205"
|
@@ -0,0 +1,7 @@
|
||||
requires:
|
||||
- category: "layer"
|
||||
name: "build"
|
||||
version: ">=0.1"
|
||||
- category: "layer"
|
||||
name: "sabayon-build-portage"
|
||||
version: ">=0.1"
|
@@ -0,0 +1,3 @@
|
||||
category: "layer"
|
||||
name: "build-sabayon-overlay"
|
||||
version: "0.20191212"
|
7
tests/fixtures/complex/selection/sources5.4.2/build.yaml
vendored
Normal file
7
tests/fixtures/complex/selection/sources5.4.2/build.yaml
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
requires:
|
||||
- category: "layer"
|
||||
version: "0.1"
|
||||
name: "build-sabayon-overlays"
|
||||
|
||||
includes:
|
||||
- /usr/portage/packages/.*
|
8
tests/fixtures/complex/selection/sources5.4.2/definition.yaml
vendored
Normal file
8
tests/fixtures/complex/selection/sources5.4.2/definition.yaml
vendored
Normal 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
|
Reference in New Issue
Block a user