From 0265915c2c7d2d82b76260da898ee5dedb0cb261 Mon Sep 17 00:00:00 2001 From: Dominik Picheta Date: Thu, 27 Jan 2011 18:21:07 +0000 Subject: [PATCH] Now only one & is allowed in a version range. --- version.nim | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/version.nim b/version.nim index 465b0fc..1e62325 100644 --- a/version.nim +++ b/version.nim @@ -2,10 +2,11 @@ import strutils type TVersion* = distinct string + TVersionRangeEnum* = enum verLater, # > V verEarlier, # < V - verEqLater, # >= V -- Equal or laterparseInt(sVer[i]) + verEqLater, # >= V -- Equal or later verEqEarlier, # <= V -- Equal or earlier verIntersect, # > V & < V verAny # * @@ -97,7 +98,13 @@ proc parseVersionRange*(s: string): PVersionRange = # Parse everything after & # Recursion <3 var right = parseVersionRange(copy(s, i + 1)) - + + # Disallow more than one verIntersect. It's pointless and could lead to + # major unknown mistakes. + if right.kind == verIntersect: + raise newException(EParseVersion, + "Having more than one `&` in a version range is pointless") + result.kind = verIntersect result.verI = (left, right) break @@ -121,10 +128,10 @@ when isMainModule: assert(newVersion("1.0.1") > newVersion("1.0")) assert(newVersion("1.0.6") <= newVersion("1.0.6")) - var inter1 = parseVersionRange(">= 1.0 & <= 1.5") + var inter1 = parseVersionRange(">= 1.0 & <= 1.5 & > 1.1 ") assert(not withinRange(newVersion("1.5.1"), inter1)) - assert(withinRange(newVersion("1.2.3.4.5.6.7.8.9.10.11.12"), inter1)) + assert(withinRange(newVersion("1.0.2.3.4.5.6.7.8.9.10.11.12"), inter1)) assert(newVersion("1") == newVersion("1"))