2
0
Эх сурвалжийг харах

fixed version comparison: consider unlisted sub versions as 0 (version("4") == version("4.0.0")) (close #8297)

Nicolas Cannasse 6 жил өмнө
parent
commit
78ce9e42b9

+ 13 - 3
src/syntax/parserEntry.ml

@@ -37,6 +37,16 @@ let is_true = function
 let make_version s =
 	List.map (fun s -> try int_of_string s with _ -> 0) (ExtString.String.nsplit s ".")
 
+let rec compare_version a b =
+	match a, b with
+	| [], [] -> 0
+	| 0 :: l1, [] -> compare_version l1 []
+	| [], 0 :: l2 -> compare_version [] l2
+	| a :: l1 , b :: l2 when a = b -> compare_version l1 l2
+	| a :: _, b :: _ -> compare a b
+	| (_ :: _, []) -> 1
+	| ([] , _ :: _) -> -1
+
 let cmp v1 v2 =
 	match v1, v2 with
 	| TNull, TNull -> 0
@@ -45,9 +55,9 @@ let cmp v1 v2 =
 	| TBool a, TBool b -> compare a b
 	| TString a, TFloat b -> compare (float_of_string a) b
 	| TFloat a, TString b -> compare a (float_of_string b)
-	| TVersion a, TVersion b -> compare a b
-	| TString a, TVersion b -> compare (make_version a) b
-	| TVersion a, TString b -> compare a (make_version b)
+	| TVersion a, TVersion b -> compare_version a b
+	| TString a, TVersion b -> compare_version (make_version a) b
+	| TVersion a, TString b -> compare_version a (make_version b)
 	| _ -> raise Exit (* always false *)
 
 let rec eval ctx (e,p) =