mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-06-08 05:50:47 +00:00
Refactoring: make PackageQuery work on PackageLike objects (not necessarily Packages). #71
This commit is contained in:
@@ -294,6 +294,21 @@ func (p *Package) MatchesDependency(dep Dependency) bool {
|
|||||||
panic("unknown relation")
|
panic("unknown relation")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetName returns package name
|
||||||
|
func (p *Package) GetName() string {
|
||||||
|
return p.Name
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetVersion returns package version
|
||||||
|
func (p *Package) GetVersion() string {
|
||||||
|
return p.Version
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetArchitecture returns package arch
|
||||||
|
func (p *Package) GetArchitecture() string {
|
||||||
|
return p.Architecture
|
||||||
|
}
|
||||||
|
|
||||||
// GetDependencies compiles list of dependenices by flags from options
|
// GetDependencies compiles list of dependenices by flags from options
|
||||||
func (p *Package) GetDependencies(options int) (dependencies []string) {
|
func (p *Package) GetDependencies(options int) (dependencies []string) {
|
||||||
deps := p.Deps()
|
deps := p.Deps()
|
||||||
|
|||||||
+19
-9
@@ -7,6 +7,16 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// PackageLike is something like Package :) To be refined later
|
||||||
|
type PackageLike interface {
|
||||||
|
GetField(string) string
|
||||||
|
MatchesDependency(Dependency) bool
|
||||||
|
MatchesArchitecture(string) bool
|
||||||
|
GetName() string
|
||||||
|
GetVersion() string
|
||||||
|
GetArchitecture() string
|
||||||
|
}
|
||||||
|
|
||||||
// PackageCatalog is abstraction on top of PackageCollection and PackageList
|
// PackageCatalog is abstraction on top of PackageCollection and PackageList
|
||||||
type PackageCatalog interface {
|
type PackageCatalog interface {
|
||||||
Scan(q PackageQuery) (result *PackageList)
|
Scan(q PackageQuery) (result *PackageList)
|
||||||
@@ -18,7 +28,7 @@ type PackageCatalog interface {
|
|||||||
// PackageQuery is interface of predicate on Package
|
// PackageQuery is interface of predicate on Package
|
||||||
type PackageQuery interface {
|
type PackageQuery interface {
|
||||||
// Matches calculates match of condition against package
|
// Matches calculates match of condition against package
|
||||||
Matches(pkg *Package) bool
|
Matches(pkg PackageLike) bool
|
||||||
// Fast returns if search strategy is possible for this query
|
// Fast returns if search strategy is possible for this query
|
||||||
Fast(list PackageCatalog) bool
|
Fast(list PackageCatalog) bool
|
||||||
// Query performs search on package list
|
// Query performs search on package list
|
||||||
@@ -63,7 +73,7 @@ type DependencyQuery struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Matches if any of L, R matches
|
// Matches if any of L, R matches
|
||||||
func (q *OrQuery) Matches(pkg *Package) bool {
|
func (q *OrQuery) Matches(pkg PackageLike) bool {
|
||||||
return q.L.Matches(pkg) || q.R.Matches(pkg)
|
return q.L.Matches(pkg) || q.R.Matches(pkg)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,7 +99,7 @@ func (q *OrQuery) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Matches if both of L, R matches
|
// Matches if both of L, R matches
|
||||||
func (q *AndQuery) Matches(pkg *Package) bool {
|
func (q *AndQuery) Matches(pkg PackageLike) bool {
|
||||||
return q.L.Matches(pkg) && q.R.Matches(pkg)
|
return q.L.Matches(pkg) && q.R.Matches(pkg)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,7 +130,7 @@ func (q *AndQuery) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Matches if not matches
|
// Matches if not matches
|
||||||
func (q *NotQuery) Matches(pkg *Package) bool {
|
func (q *NotQuery) Matches(pkg PackageLike) bool {
|
||||||
return !q.Q.Matches(pkg)
|
return !q.Q.Matches(pkg)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,9 +151,9 @@ func (q *NotQuery) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Matches on generic field
|
// Matches on generic field
|
||||||
func (q *FieldQuery) Matches(pkg *Package) bool {
|
func (q *FieldQuery) Matches(pkg PackageLike) bool {
|
||||||
if q.Field == "$Version" {
|
if q.Field == "$Version" {
|
||||||
return pkg.MatchesDependency(Dependency{Pkg: pkg.Name, Relation: q.Relation, Version: q.Value, Regexp: q.Regexp})
|
return pkg.MatchesDependency(Dependency{Pkg: pkg.GetName(), Relation: q.Relation, Version: q.Value, Regexp: q.Regexp})
|
||||||
}
|
}
|
||||||
if q.Field == "$Architecture" && q.Relation == VersionEqual {
|
if q.Field == "$Architecture" && q.Relation == VersionEqual {
|
||||||
return pkg.MatchesArchitecture(q.Value)
|
return pkg.MatchesArchitecture(q.Value)
|
||||||
@@ -218,7 +228,7 @@ func (q *FieldQuery) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Matches on dependency condition
|
// Matches on dependency condition
|
||||||
func (q *DependencyQuery) Matches(pkg *Package) bool {
|
func (q *DependencyQuery) Matches(pkg PackageLike) bool {
|
||||||
return pkg.MatchesDependency(q.Dep)
|
return pkg.MatchesDependency(q.Dep)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,8 +257,8 @@ func (q *DependencyQuery) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Matches on specific properties
|
// Matches on specific properties
|
||||||
func (q *PkgQuery) Matches(pkg *Package) bool {
|
func (q *PkgQuery) Matches(pkg PackageLike) bool {
|
||||||
return pkg.Name == q.Pkg && pkg.Version == q.Version && pkg.Architecture == q.Arch
|
return pkg.GetName() == q.Pkg && pkg.GetVersion() == q.Version && pkg.GetArchitecture() == q.Arch
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fast is always true for package query
|
// Fast is always true for package query
|
||||||
|
|||||||
Reference in New Issue
Block a user