From d262a131cc81925b5ee5e827f3a88ffa8b486377 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Thu, 10 Jul 2014 21:16:30 +0400 Subject: [PATCH] Preparation for query matching: introduce Regexp + PatternMatch. --- deb/package.go | 5 +++++ deb/package_test.go | 11 +++++++++++ deb/version.go | 6 ++++++ 3 files changed, 22 insertions(+) diff --git a/deb/package.go b/deb/package.go index 01b638dd..c9abe938 100644 --- a/deb/package.go +++ b/deb/package.go @@ -224,6 +224,11 @@ func (p *Package) MatchesDependency(dep Dependency) bool { return r <= 0 case VersionGreaterOrEqual: return r >= 0 + case VersionPatternMatch: + matched, err := filepath.Match(dep.Version, p.Version) + return err == nil && matched + case VersionRegexp: + panic("regexp matching not implemented yet") } panic("unknown relation") diff --git a/deb/package_test.go b/deb/package_test.go index 9f967ec7..d2c45721 100644 --- a/deb/package_test.go +++ b/deb/package_test.go @@ -207,6 +207,17 @@ func (s *PackageSuite) TestMatchesDependency(c *C) { // <= c.Check(p.MatchesDependency(Dependency{Pkg: "alien-arena-common", Architecture: "i386", Relation: VersionLessOrEqual, Version: "7.40-2"}), Equals, true) c.Check(p.MatchesDependency(Dependency{Pkg: "alien-arena-common", Architecture: "i386", Relation: VersionLessOrEqual, Version: "7.40-1"}), Equals, false) + + // % + c.Check(p.MatchesDependency(Dependency{Pkg: "alien-arena-common", Architecture: "i386", Relation: VersionPatternMatch, Version: "7.40-*"}), Equals, true) + c.Check(p.MatchesDependency(Dependency{Pkg: "alien-arena-common", Architecture: "i386", Relation: VersionPatternMatch, Version: "7.40-[2]"}), Equals, true) + c.Check(p.MatchesDependency(Dependency{Pkg: "alien-arena-common", Architecture: "i386", Relation: VersionPatternMatch, Version: "7.40-[2"}), Equals, false) + c.Check(p.MatchesDependency(Dependency{Pkg: "alien-arena-common", Architecture: "i386", Relation: VersionPatternMatch, Version: "7.40-[34]"}), Equals, false) + + // % + c.Check(func() { + p.MatchesDependency(Dependency{Pkg: "alien-arena-common", Architecture: "i386", Relation: VersionRegexp, Version: "7\\.40-.*"}) + }, Panics, "regexp matching not implemented yet") } func (s *PackageSuite) TestGetDependencies(c *C) { diff --git a/deb/version.go b/deb/version.go index e7b11584..048576bc 100644 --- a/deb/version.go +++ b/deb/version.go @@ -178,6 +178,8 @@ const ( VersionEqual VersionGreaterOrEqual VersionGreater + VersionPatternMatch + VersionRegexp ) // Dependency is a parsed version of Debian dependency to package @@ -207,6 +209,10 @@ func (d *Dependency) String() string { rel = ">=" case VersionLessOrEqual: rel = "<=" + case VersionPatternMatch: + rel = "%" + case VersionRegexp: + rel = "~" case VersionDontCare: return fmt.Sprintf("%s [%s]", d.Pkg, d.Architecture) }