1+ load (
2+ ":semver.bzl" ,
3+ "Version" ,
4+ "eq" ,
5+ "gte" ,
6+ "lt" ,
7+ "version_from_string" ,
8+ )
9+
110def hex_package_info (ctx , name ):
211 curl = ctx .which ("curl" )
312 endpoint = "https://hex.pm/api/packages/{}" .format (name )
@@ -20,68 +29,19 @@ def hex_release_info(ctx, name, version):
2029 fail ("hex.pm api returned {} for {}" .format (response .return_code , endpoint ))
2130 return json .decode (response .stdout )
2231
23- Version = provider (fields = ["major" , "minor" , "patch" ])
24-
25- def _version (version ):
26- [major , minor , patch ] = version .split ("." , 2 )
27- if not patch .isdigit ():
28- return None
29- return Version (
30- major = int (major ),
31- minor = int (minor ),
32- patch = int (patch ),
33- )
34-
35- def _gte (a , b ):
36- if a .major > b .major :
37- return True
38- elif a .major == b .major :
39- if a .minor > b .minor :
40- return True
41- elif a .minor == b .minor :
42- return a .patch >= b .patch
43- else :
44- return False
45- else :
46- return False
47-
48- def _lt (a , b ):
49- if a .major < b .major :
50- return True
51- elif a .major == b .major :
52- if a .minor < b .minor :
53- return True
54- elif a .minor == b .minor :
55- return a .patch < b .patch
56- else :
57- return False
58- else :
59- return False
60-
61- def _eq (a , b ):
62- return a .major == b .major and a .minor == b .minor and a .patch == b .patch
63-
64- def newest (a , b ):
65- if a .version == b .version :
66- return a
67- if _lt (_version (a .version ), _version (b .version )):
68- return b
69- else :
70- return a
71-
7232def satisfies (version , requirement ):
73- v = _version (version )
33+ v = version_from_string (version )
7434 if v == None :
7535 # print("Ignoring version", version)
7636 return False
7737 if requirement .startswith ("~>" ):
78- min = _version (requirement .removeprefix ("~>" ).lstrip ())
38+ min = version_from_string (requirement .removeprefix ("~>" ).lstrip ())
7939 if min == None :
8040 print ("Ignoring requirement" , requirement )
8141 return False
8242 max = Version (major = min .major , minor = min .minor + 1 , patch = 0 )
83- return _gte (v , min ) and _lt (v , max )
84- elif _version (requirement ) != None :
85- return _eq (v , _version (requirement ))
43+ return gte (v , min ) and lt (v , max )
44+ elif version_from_string (requirement ) != None :
45+ return eq (v , version_from_string (requirement ))
8646 else :
8747 fail (requirement )
0 commit comments