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
This commit is contained in:
Ettore Di Giacinto
2020-04-05 15:09:51 +02:00
parent 5a5e7f1dfa
commit 77ba4193aa
5 changed files with 34 additions and 28 deletions

View File

@@ -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")
}

View File

@@ -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")
}

View File

@@ -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
}

View File

@@ -22,4 +22,6 @@ type Versioner interface {
Sanitize(string) string
Validate(string) error
Sort([]string) []string
ValidateSelector(version string, selector string) bool
}

View File

@@ -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, "_", "-")
}