diff --git a/debian/version.go b/debian/version.go index 59017026..c015c59c 100644 --- a/debian/version.go +++ b/debian/version.go @@ -228,8 +228,19 @@ func ParseDependencyVariants(variants string) (l []Dependency, err error) { return } -// ParseDependency parses dependency in format "pkg (>= 1.35)" into parts +// ParseDependency parses dependency in format "pkg (>= 1.35) [arch]" into parts func ParseDependency(dep string) (d Dependency, err error) { + if strings.HasSuffix(dep, "]") { + i := strings.LastIndex(dep, "[") + if i == -1 { + err = fmt.Errorf("unable to parse dependency: %s", dep) + return + } + d.Architecture = dep[i+1 : len(dep)-1] + + dep = strings.TrimSpace(dep[:i]) + } + if !strings.HasSuffix(dep, ")") { d.Pkg = strings.TrimSpace(dep) d.Relation = VersionDontCare diff --git a/debian/version_test.go b/debian/version_test.go index 02a2963c..646f751d 100644 --- a/debian/version_test.go +++ b/debian/version_test.go @@ -104,6 +104,7 @@ func (s *VersionSuite) TestParseDependency(c *C) { c.Check(d.Pkg, Equals, "dpkg") c.Check(d.Relation, Equals, VersionGreaterOrEqual) c.Check(d.Version, Equals, "1.6") + c.Check(d.Architecture, Equals, "") d, e = ParseDependency("dpkg(>>1.6)") c.Check(e, IsNil) @@ -141,6 +142,20 @@ func (s *VersionSuite) TestParseDependency(c *C) { c.Check(d.Relation, Equals, VersionGreater) c.Check(d.Version, Equals, "1.6") + d, e = ParseDependency("dpkg (>>1.6) [i386]") + c.Check(e, IsNil) + c.Check(d.Pkg, Equals, "dpkg") + c.Check(d.Relation, Equals, VersionGreater) + c.Check(d.Version, Equals, "1.6") + c.Check(d.Architecture, Equals, "i386") + + d, e = ParseDependency("dpkg[i386]") + c.Check(e, IsNil) + c.Check(d.Pkg, Equals, "dpkg") + c.Check(d.Relation, Equals, VersionDontCare) + c.Check(d.Version, Equals, "") + c.Check(d.Architecture, Equals, "i386") + d, e = ParseDependency("dpkg ") c.Check(e, IsNil) c.Check(d.Pkg, Equals, "dpkg") @@ -152,6 +167,12 @@ func (s *VersionSuite) TestParseDependency(c *C) { d, e = ParseDependency("dpkg==1.6)") c.Check(e, ErrorMatches, "unable to parse.*") + + d, e = ParseDependency("dpkg i386]") + c.Check(e, ErrorMatches, "unable to parse.*") + + d, e = ParseDependency("dpkg ) [i386]") + c.Check(e, ErrorMatches, "unable to parse.*") } func (s *VersionSuite) TestParseDependencyVariants(c *C) {