From 77ba4193aa6503a04a2afd8cfc31f1ca1b01883d Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Sun, 5 Apr 2020 15:09:51 +0200 Subject: [PATCH] Add ValidateSelector to versioner interface and consume it We can refactor furthermore by dropping the package methods, as now we can consume a versioner in all places that requires it --- pkg/package/database_boltdb.go | 4 ++-- pkg/package/database_mem.go | 4 ++-- pkg/package/package.go | 35 +++++++++++----------------------- pkg/versioner/interface.go | 2 ++ pkg/versioner/versioner.go | 17 +++++++++++++++++ 5 files changed, 34 insertions(+), 28 deletions(-) diff --git a/pkg/package/database_boltdb.go b/pkg/package/database_boltdb.go index 430a0f58..63c4f0ed 100644 --- a/pkg/package/database_boltdb.go +++ b/pkg/package/database_boltdb.go @@ -233,7 +233,7 @@ func (db *BoltDatabase) getProvide(p Package) (Package, error) { for ve, _ := range versions { - match, err := p.VersionMatchSelector(ve) + match, err := p.VersionMatchSelector(ve, nil) if err != nil { return nil, errors.Wrap(err, "Error on match version") } @@ -362,7 +362,7 @@ func (db *BoltDatabase) FindPackages(p Package) (Packages, error) { continue } - match, err := p.SelectorMatchVersion(w.GetVersion()) + match, err := p.SelectorMatchVersion(w.GetVersion(), nil) if err != nil { return nil, errors.Wrap(err, "Error on match selector") } diff --git a/pkg/package/database_mem.go b/pkg/package/database_mem.go index e3c2f694..1cf0d6ed 100644 --- a/pkg/package/database_mem.go +++ b/pkg/package/database_mem.go @@ -178,7 +178,7 @@ func (db *InMemoryDatabase) getProvide(p Package) (Package, error) { for ve, _ := range versions { - match, err := p.VersionMatchSelector(ve) + match, err := p.VersionMatchSelector(ve, nil) if err != nil { return nil, errors.Wrap(err, "Error on match version") } @@ -252,7 +252,7 @@ func (db *InMemoryDatabase) FindPackages(p Package) (Packages, error) { } var versionsInWorld []Package for ve, _ := range versions { - match, err := p.SelectorMatchVersion(ve) + match, err := p.SelectorMatchVersion(ve, nil) if err != nil { return nil, errors.Wrap(err, "Error on match selector") } diff --git a/pkg/package/package.go b/pkg/package/package.go index 00119e9d..adb07f1c 100644 --- a/pkg/package/package.go +++ b/pkg/package/package.go @@ -91,8 +91,8 @@ type Package interface { MatchLabel(*regexp.Regexp) bool IsSelector() bool - VersionMatchSelector(string) (bool, error) - SelectorMatchVersion(string) (bool, error) + VersionMatchSelector(string, version.Versioner) (bool, error) + SelectorMatchVersion(string, version.Versioner) (bool, error) String() string HumanReadableString() string @@ -387,7 +387,7 @@ func (p *DefaultPackage) Expand(definitiondb PackageDatabase) (Packages, error) return nil, err } for _, w := range all { - match, err := p.SelectorMatchVersion(w.GetVersion()) + match, err := p.SelectorMatchVersion(w.GetVersion(), nil) if err != nil { return nil, err } @@ -750,34 +750,21 @@ end: return nil } -func (p *DefaultPackage) SelectorMatchVersion(v string) (bool, error) { +func (p *DefaultPackage) SelectorMatchVersion(ver string, v version.Versioner) (bool, error) { if !p.IsSelector() { return false, errors.New("Package is not a selector") } - - vS, err := version.ParseVersion(p.GetVersion()) - if err != nil { - return false, err + if v == nil { + v = &version.WrappedVersioner{} } - vSI, err := version.ParseVersion(v) - if err != nil { - return false, err - } - - return version.PackageAdmit(vS, vSI) + return v.ValidateSelector(ver, p.GetVersion()), nil } -func (p *DefaultPackage) VersionMatchSelector(selector string) (bool, error) { - vS, err := version.ParseVersion(selector) - if err != nil { - return false, err +func (p *DefaultPackage) VersionMatchSelector(selector string, v version.Versioner) (bool, error) { + if v == nil { + v = &version.WrappedVersioner{} } - vSI, err := version.ParseVersion(p.GetVersion()) - if err != nil { - return false, err - } - - return version.PackageAdmit(vS, vSI) + return v.ValidateSelector(p.GetVersion(), selector), nil } diff --git a/pkg/versioner/interface.go b/pkg/versioner/interface.go index f4dbb61f..74fbf0b8 100644 --- a/pkg/versioner/interface.go +++ b/pkg/versioner/interface.go @@ -22,4 +22,6 @@ type Versioner interface { Sanitize(string) string Validate(string) error Sort([]string) []string + + ValidateSelector(version string, selector string) bool } diff --git a/pkg/versioner/versioner.go b/pkg/versioner/versioner.go index a228bcc9..340f7553 100644 --- a/pkg/versioner/versioner.go +++ b/pkg/versioner/versioner.go @@ -43,6 +43,23 @@ func (w *WrappedVersioner) Validate(version string) error { return nil } +func (w *WrappedVersioner) ValidateSelector(version string, selector string) bool { + vS, err := ParseVersion(selector) + if err != nil { + return false + } + + vSI, err := ParseVersion(version) + if err != nil { + return false + } + ok, err := PackageAdmit(vS, vSI) + if err != nil { + return false + } + return ok +} + func (w *WrappedVersioner) Sanitize(s string) string { return strings.ReplaceAll(s, "_", "-") }