mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-01-12 03:21:33 +00:00
Refactor to use single struct Dependency.
This commit is contained in:
16
debian/list.go
vendored
16
debian/list.go
vendored
@@ -66,8 +66,8 @@ const (
|
||||
// VerifyDependencies looks for missing dependencies in package list.
|
||||
//
|
||||
// Analysis would be peformed for each architecture
|
||||
func (l *PackageList) VerifyDependencies(options int, architectures []string, sources *PackageIndexedList) ([]string, error) {
|
||||
missing := make([]string, 0, 100)
|
||||
func (l *PackageList) VerifyDependencies(options int, architectures []string, sources *PackageIndexedList) ([]Dependency, error) {
|
||||
missing := make([]Dependency, 0, 100)
|
||||
|
||||
for _, arch := range architectures {
|
||||
for _, p := range l.packages {
|
||||
@@ -76,13 +76,15 @@ func (l *PackageList) VerifyDependencies(options int, architectures []string, so
|
||||
}
|
||||
|
||||
for _, dep := range p.GetDependencies(options) {
|
||||
pkg, relation, version, err := parseDependency(dep)
|
||||
dep, err := parseDependency(dep)
|
||||
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 {
|
||||
missing = append(missing, fmt.Sprintf("%s [%s]", formatDependency(pkg, relation, version), arch))
|
||||
dep.Architecture = 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
|
||||
func (l *PackageIndexedList) Search(arch string, pkg string, relation int, version string) *Package {
|
||||
func (l *PackageIndexedList) Search(dep Dependency) *Package {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
30
debian/version.go
vendored
30
debian/version.go
vendored
@@ -180,11 +180,19 @@ const (
|
||||
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
|
||||
func parseDependency(dep string) (pkg string, relation int, version string, err error) {
|
||||
func parseDependency(dep string) (d Dependency, err error) {
|
||||
if !strings.HasSuffix(dep, ")") {
|
||||
pkg = strings.TrimSpace(dep)
|
||||
relation = VersionDontCare
|
||||
d.Pkg = strings.TrimSpace(dep)
|
||||
d.Relation = VersionDontCare
|
||||
return
|
||||
}
|
||||
|
||||
@@ -194,27 +202,27 @@ func parseDependency(dep string) (pkg string, relation int, version string, err
|
||||
return
|
||||
}
|
||||
|
||||
pkg = strings.TrimSpace(dep[0:i])
|
||||
d.Pkg = strings.TrimSpace(dep[0:i])
|
||||
|
||||
rel := dep[i+1 : i+2]
|
||||
if dep[i+2] == '>' || dep[i+2] == '<' || dep[i+2] == '=' {
|
||||
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 {
|
||||
version = strings.TrimSpace(dep[i+2 : len(dep)-1])
|
||||
d.Version = strings.TrimSpace(dep[i+2 : len(dep)-1])
|
||||
}
|
||||
|
||||
switch rel {
|
||||
case "<", "<=":
|
||||
relation = VersionLessOrEqual
|
||||
d.Relation = VersionLessOrEqual
|
||||
case ">", ">=":
|
||||
relation = VersionGreaterOrEqual
|
||||
d.Relation = VersionGreaterOrEqual
|
||||
case "<<":
|
||||
relation = VersionLess
|
||||
d.Relation = VersionLess
|
||||
case ">>":
|
||||
relation = VersionGreater
|
||||
d.Relation = VersionGreater
|
||||
case "=":
|
||||
relation = VersionEqual
|
||||
d.Relation = VersionEqual
|
||||
default:
|
||||
err = fmt.Errorf("relation unknown: %s", rel)
|
||||
}
|
||||
|
||||
68
debian/version_test.go
vendored
68
debian/version_test.go
vendored
@@ -99,57 +99,57 @@ func (s *VersionSuite) TestCompareVersions(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(p, Equals, "dpkg")
|
||||
c.Check(r, Equals, VersionGreaterOrEqual)
|
||||
c.Check(v, Equals, "1.6")
|
||||
c.Check(d.Pkg, Equals, "dpkg")
|
||||
c.Check(d.Relation, Equals, VersionGreaterOrEqual)
|
||||
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(p, Equals, "dpkg")
|
||||
c.Check(r, Equals, VersionGreater)
|
||||
c.Check(v, Equals, "1.6")
|
||||
c.Check(d.Pkg, Equals, "dpkg")
|
||||
c.Check(d.Relation, Equals, VersionGreater)
|
||||
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(p, Equals, "dpkg")
|
||||
c.Check(r, Equals, VersionGreaterOrEqual)
|
||||
c.Check(v, Equals, "1.6")
|
||||
c.Check(d.Pkg, Equals, "dpkg")
|
||||
c.Check(d.Relation, Equals, VersionGreaterOrEqual)
|
||||
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(p, Equals, "dpkg")
|
||||
c.Check(r, Equals, VersionLessOrEqual)
|
||||
c.Check(v, Equals, "1.6")
|
||||
c.Check(d.Pkg, Equals, "dpkg")
|
||||
c.Check(d.Relation, Equals, VersionLessOrEqual)
|
||||
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(p, Equals, "dpkg")
|
||||
c.Check(r, Equals, VersionEqual)
|
||||
c.Check(v, Equals, "1.6")
|
||||
c.Check(d.Pkg, Equals, "dpkg")
|
||||
c.Check(d.Relation, Equals, VersionEqual)
|
||||
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(p, Equals, "dpkg")
|
||||
c.Check(r, Equals, VersionLess)
|
||||
c.Check(v, Equals, "1.6")
|
||||
c.Check(d.Pkg, Equals, "dpkg")
|
||||
c.Check(d.Relation, Equals, VersionLess)
|
||||
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(p, Equals, "dpkg")
|
||||
c.Check(r, Equals, VersionGreater)
|
||||
c.Check(v, Equals, "1.6")
|
||||
c.Check(d.Pkg, Equals, "dpkg")
|
||||
c.Check(d.Relation, Equals, VersionGreater)
|
||||
c.Check(d.Version, Equals, "1.6")
|
||||
|
||||
p, r, v, e = parseDependency("dpkg ")
|
||||
d, e = parseDependency("dpkg ")
|
||||
c.Check(e, IsNil)
|
||||
c.Check(p, Equals, "dpkg")
|
||||
c.Check(r, Equals, VersionDontCare)
|
||||
c.Check(v, Equals, "")
|
||||
c.Check(d.Pkg, Equals, "dpkg")
|
||||
c.Check(d.Relation, Equals, VersionDontCare)
|
||||
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.*")
|
||||
|
||||
p, r, v, e = parseDependency("dpkg==1.6)")
|
||||
d, e = parseDependency("dpkg==1.6)")
|
||||
c.Check(e, ErrorMatches, "unable to parse.*")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user