Version range compression utils (#2840)

* DNF normalization wip

* a bunch of wip stuff

* it is alive!

* tests

* deduplicate strings in tests

* fix != flavor behavior & parse flavor constraints & equals shorthand for normalize

* use normalization

* more comments & fix tests not running because of bad rebase

* fix comments+tests

* slightly better comment

* fix dependency & typos

---------

Co-authored-by: Aiden McClelland <me@drbonez.dev>
This commit is contained in:
Sam Sartor
2025-03-04 15:55:20 -07:00
committed by GitHub
parent 63bc71da13
commit e662b2f393
7 changed files with 779 additions and 156 deletions

View File

@@ -14,6 +14,7 @@ VersionRangeAtom
/ Not
/ Any
/ None
/ FlavorAtom
Parens
= "(" _ expr:VersionRange _ ")" { return { type: "Parens", expr } }
@@ -24,13 +25,16 @@ Anchor
VersionSpec
= flavor:Flavor? upstream:Version downstream:( ":" Version )? { return { flavor: flavor || null, upstream, downstream: downstream ? downstream[1] : { number: [0], prerelease: [] } } }
FlavorAtom
= "#" flavor:Lowercase { return { type: "Flavor", flavor: flavor } }
Not = "!" _ value:VersionRangeAtom { return { type: "Not", value: value }}
Any = "*" { return { type: "Any" } }
None = "!" { return { type: "None" } }
CmpOp
CmpOp
= ">=" { return ">="; }
/ "<=" { return "<="; }
/ ">" { return ">"; }
@@ -89,7 +93,7 @@ String
Version
= number:VersionNumber prerelease: PreRelease? {
return {
return {
number,
prerelease: prerelease || []
};
@@ -106,7 +110,7 @@ PreReleaseSegment
}
VersionNumber
= first:Digit rest:("." Digit)* {
= first:Digit rest:("." Digit)* {
return [first].concat(rest.map(r => r[1]));
}
@@ -114,4 +118,4 @@ Digit
= [0-9]+ { return parseInt(text(), 10); }
_ "whitespace"
= [ \t\n\r]*
= [ \t\n\r]*