mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-06-01 04:40:38 +00:00
Refactor to use single struct Dependency.
This commit is contained in:
Vendored
+9
-7
@@ -66,8 +66,8 @@ const (
|
|||||||
// VerifyDependencies looks for missing dependencies in package list.
|
// VerifyDependencies looks for missing dependencies in package list.
|
||||||
//
|
//
|
||||||
// Analysis would be peformed for each architecture
|
// Analysis would be peformed for each architecture
|
||||||
func (l *PackageList) VerifyDependencies(options int, architectures []string, sources *PackageIndexedList) ([]string, error) {
|
func (l *PackageList) VerifyDependencies(options int, architectures []string, sources *PackageIndexedList) ([]Dependency, error) {
|
||||||
missing := make([]string, 0, 100)
|
missing := make([]Dependency, 0, 100)
|
||||||
|
|
||||||
for _, arch := range architectures {
|
for _, arch := range architectures {
|
||||||
for _, p := range l.packages {
|
for _, p := range l.packages {
|
||||||
@@ -76,13 +76,15 @@ func (l *PackageList) VerifyDependencies(options int, architectures []string, so
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, dep := range p.GetDependencies(options) {
|
for _, dep := range p.GetDependencies(options) {
|
||||||
pkg, relation, version, err := parseDependency(dep)
|
dep, err := parseDependency(dep)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("unable to process pkg %s: %s", p, err)
|
return nil, fmt.Errorf("unable to process package %s: %s", p, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if sources.Search(arch, pkg, relation, version) != nil {
|
dep.Architecture = arch
|
||||||
missing = append(missing, fmt.Sprintf("%s [%s]", formatDependency(pkg, relation, version), arch))
|
|
||||||
|
if sources.Search(dep) != nil {
|
||||||
|
missing = append(missing, dep)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -151,7 +153,7 @@ func (l *PackageIndexedList) Append(pl *PackageList) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Search searches package index for specified package
|
// Search searches package index for specified package
|
||||||
func (l *PackageIndexedList) Search(arch string, pkg string, relation int, version string) *Package {
|
func (l *PackageIndexedList) Search(dep Dependency) *Package {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
+19
-11
@@ -180,11 +180,19 @@ const (
|
|||||||
VersionGreater
|
VersionGreater
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Dependency is a parsed version of Debian dependency to package
|
||||||
|
type Dependency struct {
|
||||||
|
Pkg string
|
||||||
|
Relation int
|
||||||
|
Version string
|
||||||
|
Architecture string
|
||||||
|
}
|
||||||
|
|
||||||
// parseDependency parses dependency in format "pkg (>= 1.35)" into parts
|
// parseDependency parses dependency in format "pkg (>= 1.35)" into parts
|
||||||
func parseDependency(dep string) (pkg string, relation int, version string, err error) {
|
func parseDependency(dep string) (d Dependency, err error) {
|
||||||
if !strings.HasSuffix(dep, ")") {
|
if !strings.HasSuffix(dep, ")") {
|
||||||
pkg = strings.TrimSpace(dep)
|
d.Pkg = strings.TrimSpace(dep)
|
||||||
relation = VersionDontCare
|
d.Relation = VersionDontCare
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,27 +202,27 @@ func parseDependency(dep string) (pkg string, relation int, version string, err
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
pkg = strings.TrimSpace(dep[0:i])
|
d.Pkg = strings.TrimSpace(dep[0:i])
|
||||||
|
|
||||||
rel := dep[i+1 : i+2]
|
rel := dep[i+1 : i+2]
|
||||||
if dep[i+2] == '>' || dep[i+2] == '<' || dep[i+2] == '=' {
|
if dep[i+2] == '>' || dep[i+2] == '<' || dep[i+2] == '=' {
|
||||||
rel += dep[i+2 : i+3]
|
rel += dep[i+2 : i+3]
|
||||||
version = strings.TrimSpace(dep[i+3 : len(dep)-1])
|
d.Version = strings.TrimSpace(dep[i+3 : len(dep)-1])
|
||||||
} else {
|
} else {
|
||||||
version = strings.TrimSpace(dep[i+2 : len(dep)-1])
|
d.Version = strings.TrimSpace(dep[i+2 : len(dep)-1])
|
||||||
}
|
}
|
||||||
|
|
||||||
switch rel {
|
switch rel {
|
||||||
case "<", "<=":
|
case "<", "<=":
|
||||||
relation = VersionLessOrEqual
|
d.Relation = VersionLessOrEqual
|
||||||
case ">", ">=":
|
case ">", ">=":
|
||||||
relation = VersionGreaterOrEqual
|
d.Relation = VersionGreaterOrEqual
|
||||||
case "<<":
|
case "<<":
|
||||||
relation = VersionLess
|
d.Relation = VersionLess
|
||||||
case ">>":
|
case ">>":
|
||||||
relation = VersionGreater
|
d.Relation = VersionGreater
|
||||||
case "=":
|
case "=":
|
||||||
relation = VersionEqual
|
d.Relation = VersionEqual
|
||||||
default:
|
default:
|
||||||
err = fmt.Errorf("relation unknown: %s", rel)
|
err = fmt.Errorf("relation unknown: %s", rel)
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+34
-34
@@ -99,57 +99,57 @@ func (s *VersionSuite) TestCompareVersions(c *C) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *VersionSuite) TestParseDependency(c *C) {
|
func (s *VersionSuite) TestParseDependency(c *C) {
|
||||||
p, r, v, e := parseDependency("dpkg (>= 1.6)")
|
d, e := parseDependency("dpkg (>= 1.6)")
|
||||||
c.Check(e, IsNil)
|
c.Check(e, IsNil)
|
||||||
c.Check(p, Equals, "dpkg")
|
c.Check(d.Pkg, Equals, "dpkg")
|
||||||
c.Check(r, Equals, VersionGreaterOrEqual)
|
c.Check(d.Relation, Equals, VersionGreaterOrEqual)
|
||||||
c.Check(v, Equals, "1.6")
|
c.Check(d.Version, Equals, "1.6")
|
||||||
|
|
||||||
p, r, v, e = parseDependency("dpkg(>>1.6)")
|
d, e = parseDependency("dpkg(>>1.6)")
|
||||||
c.Check(e, IsNil)
|
c.Check(e, IsNil)
|
||||||
c.Check(p, Equals, "dpkg")
|
c.Check(d.Pkg, Equals, "dpkg")
|
||||||
c.Check(r, Equals, VersionGreater)
|
c.Check(d.Relation, Equals, VersionGreater)
|
||||||
c.Check(v, Equals, "1.6")
|
c.Check(d.Version, Equals, "1.6")
|
||||||
|
|
||||||
p, r, v, e = parseDependency("dpkg (> 1.6)")
|
d, e = parseDependency("dpkg (> 1.6)")
|
||||||
c.Check(e, IsNil)
|
c.Check(e, IsNil)
|
||||||
c.Check(p, Equals, "dpkg")
|
c.Check(d.Pkg, Equals, "dpkg")
|
||||||
c.Check(r, Equals, VersionGreaterOrEqual)
|
c.Check(d.Relation, Equals, VersionGreaterOrEqual)
|
||||||
c.Check(v, Equals, "1.6")
|
c.Check(d.Version, Equals, "1.6")
|
||||||
|
|
||||||
p, r, v, e = parseDependency("dpkg (< 1.6)")
|
d, e = parseDependency("dpkg (< 1.6)")
|
||||||
c.Check(e, IsNil)
|
c.Check(e, IsNil)
|
||||||
c.Check(p, Equals, "dpkg")
|
c.Check(d.Pkg, Equals, "dpkg")
|
||||||
c.Check(r, Equals, VersionLessOrEqual)
|
c.Check(d.Relation, Equals, VersionLessOrEqual)
|
||||||
c.Check(v, Equals, "1.6")
|
c.Check(d.Version, Equals, "1.6")
|
||||||
|
|
||||||
p, r, v, e = parseDependency("dpkg (= 1.6)")
|
d, e = parseDependency("dpkg (= 1.6)")
|
||||||
c.Check(e, IsNil)
|
c.Check(e, IsNil)
|
||||||
c.Check(p, Equals, "dpkg")
|
c.Check(d.Pkg, Equals, "dpkg")
|
||||||
c.Check(r, Equals, VersionEqual)
|
c.Check(d.Relation, Equals, VersionEqual)
|
||||||
c.Check(v, Equals, "1.6")
|
c.Check(d.Version, Equals, "1.6")
|
||||||
|
|
||||||
p, r, v, e = parseDependency("dpkg (<< 1.6)")
|
d, e = parseDependency("dpkg (<< 1.6)")
|
||||||
c.Check(e, IsNil)
|
c.Check(e, IsNil)
|
||||||
c.Check(p, Equals, "dpkg")
|
c.Check(d.Pkg, Equals, "dpkg")
|
||||||
c.Check(r, Equals, VersionLess)
|
c.Check(d.Relation, Equals, VersionLess)
|
||||||
c.Check(v, Equals, "1.6")
|
c.Check(d.Version, Equals, "1.6")
|
||||||
|
|
||||||
p, r, v, e = parseDependency("dpkg(>>1.6)")
|
d, e = parseDependency("dpkg(>>1.6)")
|
||||||
c.Check(e, IsNil)
|
c.Check(e, IsNil)
|
||||||
c.Check(p, Equals, "dpkg")
|
c.Check(d.Pkg, Equals, "dpkg")
|
||||||
c.Check(r, Equals, VersionGreater)
|
c.Check(d.Relation, Equals, VersionGreater)
|
||||||
c.Check(v, Equals, "1.6")
|
c.Check(d.Version, Equals, "1.6")
|
||||||
|
|
||||||
p, r, v, e = parseDependency("dpkg ")
|
d, e = parseDependency("dpkg ")
|
||||||
c.Check(e, IsNil)
|
c.Check(e, IsNil)
|
||||||
c.Check(p, Equals, "dpkg")
|
c.Check(d.Pkg, Equals, "dpkg")
|
||||||
c.Check(r, Equals, VersionDontCare)
|
c.Check(d.Relation, Equals, VersionDontCare)
|
||||||
c.Check(v, Equals, "")
|
c.Check(d.Version, Equals, "")
|
||||||
|
|
||||||
p, r, v, e = parseDependency("dpkg(==1.6)")
|
d, e = parseDependency("dpkg(==1.6)")
|
||||||
c.Check(e, ErrorMatches, "relation unknown.*")
|
c.Check(e, ErrorMatches, "relation unknown.*")
|
||||||
|
|
||||||
p, r, v, e = parseDependency("dpkg==1.6)")
|
d, e = parseDependency("dpkg==1.6)")
|
||||||
c.Check(e, ErrorMatches, "unable to parse.*")
|
c.Check(e, ErrorMatches, "unable to parse.*")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user