From 50035d5bc4302a34f3f43cb81f298f9c50665b31 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Mon, 18 Sep 2017 21:36:06 +0300 Subject: [PATCH] Allow uppercase package name in package query expressions Fixes: #636 Before this fix, aptly was always treating strings starting with uppercase letter as field name, which was breaking package queries like `VMware-Horizon-Client_4.5.0_all`. Now aptly accepts only fields which don't contain underscore, and everything else would be parsed as package reference. --- query/syntax.go | 2 +- query/syntax_test.go | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/query/syntax.go b/query/syntax.go index 129d8905..5c6c3023 100644 --- a/query/syntax.go +++ b/query/syntax.go @@ -135,7 +135,7 @@ func (p *parser) D() deb.PackageQuery { operator, value := p.Condition() r, _ := utf8.DecodeRuneInString(field) - if strings.HasPrefix(field, "$") || unicode.IsUpper(r) { + if strings.HasPrefix(field, "$") || (unicode.IsUpper(r) && !strings.ContainsRune(field, '_')) { // special field or regular field q := &deb.FieldQuery{Field: field, Relation: operatorToRelation(operator), Value: value} if q.Relation == deb.VersionRegexp { diff --git a/query/syntax_test.go b/query/syntax_test.go index 1acf3e15..28a9c30c 100644 --- a/query/syntax_test.go +++ b/query/syntax_test.go @@ -57,6 +57,18 @@ func (s *SyntaxSuite) TestParsing(c *C) { c.Assert(err, IsNil) c.Check(q, DeepEquals, &deb.PkgQuery{Pkg: "alien-data", Version: "1.3.4~dev", Arch: "i386"}) + l, _ = lex("query", "Alien-data_1.3.4~dev_i386") + q, err = parse(l) + + c.Assert(err, IsNil) + c.Check(q, DeepEquals, &deb.PkgQuery{Pkg: "Alien-data", Version: "1.3.4~dev", Arch: "i386"}) + + l, _ = lex("query", "Name") + q, err = parse(l) + + c.Assert(err, IsNil) + c.Check(q, DeepEquals, &deb.FieldQuery{Field: "Name"}) + l, _ = lex("query", "package (> 5.3.7) {amd64}") q, err = parse(l)