summaryrefslogtreecommitdiff
path: root/test/libapt/pattern_test.cc
Commit message (Collapse)AuthorAgeFilesLines
* patterns: Terminate short pattern by ~ and !Julian Andres Klode2020-12-071-0/+2
| | | | | | | | | | This allows patterns like ~nalpha~nbeta and ~nalpha!~nbeta to work like they do in APT. Also add a comment to remind readers that everything in START should be in short too. Cc: stable >= 2.0
* patterns: test for empty terms, reject themJulian Andres Klode2020-02-031-0/+26
|
* Correctly stop parsing short form arguments on space, also on ?Julian Andres Klode2020-02-031-0/+2
| | | | | | | | | we have to stop parsing on space so that things like ~ramd64 | ~rall work correctly. aptitude does not stop parsing on ?, but we'll do as it gets very confusing otherwise if you write stuff like ~ramd64?name(foo), and it resolves to ?and(?architecture(amd64?name), (foo))...
* patterns: Implement parsing of (...) groupsJulian Andres Klode2020-02-031-0/+4
|
* Implement | as orJulian Andres Klode2020-02-031-0/+3
|
* patterns: Parse sequence of patterns as ?andJulian Andres Klode2020-02-031-0/+8
|
* patterns: Allow bare words only in argumentsJulian Andres Klode2020-02-031-7/+24
| | | | | | | | | | | | | | | | This changes the syntax from approximately expr = unary unary = '!'? primary primary = pattern | short-pattern | word | quoted-word pattern = '?' name [ '(' expr [',' expr]* ')' ] short-pattern = ~ name | ~name expr to: primary = pattern | short-pattern argument = word | quoted-word | expr pattern = '?' name [ '(' argument [',' argument]* ')' ] short-pattern = ~ name | ~name argument
* patterns: Implement unary !Julian Andres Klode2020-02-031-0/+1
|
* Implement short patterns (patterns starting with ~)Julian Andres Klode2020-02-031-0/+66
| | | | | | Also make pattern detector in cacheset and private's list accept such patterns. We probably should just try to parse and see if it is a (start of a) pattern.
* Add initial support for parsing patterns into parse treesJulian Andres Klode2019-08-151-0/+95
Introduce a parser for patterns that generates a parse tree. The language understood by the parser is: pattern = '?'TERM | '?'TERM '(' pattern (',' pattern)* ','? ')' | WORD | QUOTED-WORD TERM = [0-9a-zA-Z-] WORD = [0-9a-ZA-Z-.*^$\[\]_\\] QUOTED_WORD = "..." # you know what I mean This language is context free, which is a massive simplification from aptitude's language, where ?foo(bar) could have two different meanings depending on whether ?foo takes an argument or not.