1
1
#!/usr/bin/env python
2
+
2
3
# This script merges two Arduino Board Manager package json files.
3
4
# Usage:
4
5
# python merge_packages.py package_esp8266com_index.json version/new/package_esp8266com_index.json
5
6
# Written by Ivan Grokhotkov, 2015
6
7
#
8
+
7
9
from __future__ import print_function
8
- #from distutils.version import LooseVersion
10
+
11
+ # from distutils.version import LooseVersion
9
12
from packaging .version import Version
10
13
import re
11
14
import json
12
15
import sys
13
16
17
+
14
18
def load_package (filename ):
15
- pkg = json .load (open (filename ))[' packages' ][0 ]
16
- print ("Loaded package {0} from {1}" .format (pkg [' name' ], filename ), file = sys .stderr )
17
- print ("{0} platform(s), {1} tools" .format (len (pkg [' platforms' ]), len (pkg [' tools' ])), file = sys .stderr )
19
+ pkg = json .load (open (filename ))[" packages" ][0 ]
20
+ print ("Loaded package {0} from {1}" .format (pkg [" name" ], filename ), file = sys .stderr )
21
+ print ("{0} platform(s), {1} tools" .format (len (pkg [" platforms" ]), len (pkg [" tools" ])), file = sys .stderr )
18
22
return pkg
19
23
24
+
20
25
def merge_objects (versions , obj ):
21
26
for o in obj :
22
- name = o [' name' ].encode (' ascii' )
23
- ver = o [' version' ].encode (' ascii' )
24
- if not name in versions :
27
+ name = o [" name" ].encode (" ascii" )
28
+ ver = o [" version" ].encode (" ascii" )
29
+ if name not in versions :
25
30
print ("found new object, {0}" .format (name ), file = sys .stderr )
26
31
versions [name ] = {}
27
- if not ver in versions [name ]:
32
+ if ver not in versions [name ]:
28
33
print ("found new version {0} for object {1}" .format (ver , name ), file = sys .stderr )
29
34
versions [name ][ver ] = o
30
35
return versions
31
36
32
- # Normalize ESP release version string (x.x.x) by adding '-rc<MAXINT>' (x.x.x-rc9223372036854775807) to ensure having REL above any RC
33
- # Dummy approach, functional anyway for current ESP package versioning (unlike NormalizedVersion/LooseVersion/StrictVersion & similar crap)
37
+
38
+ # Normalize ESP release version string (x.x.x) by adding '-rc<MAXINT>' (x.x.x-rc9223372036854775807)
39
+ # to ensure having REL above any RC
40
+ # Dummy approach, functional anyway for current ESP package versioning
41
+ # (unlike NormalizedVersion/LooseVersion/StrictVersion & similar crap)
34
42
def pkgVersionNormalized (versionString ):
35
43
36
44
verStr = str (versionString )
37
- verParts = re .split (' \.|-rc|-alpha' , verStr , flags = re .IGNORECASE )
38
-
45
+ verParts = re .split (r" \.|-rc|-alpha" , verStr , flags = re .IGNORECASE )
46
+
39
47
if len (verParts ) == 3 :
40
- if ( sys .version_info > (3 , 0 )): # Python 3
41
- verStr = str (versionString ) + ' -rc' + str (sys .maxsize )
42
- else : # Python 2
43
- verStr = str (versionString ) + ' -rc' + str (sys .maxint )
44
-
48
+ if sys .version_info > (3 , 0 ): # Python 3
49
+ verStr = str (versionString ) + " -rc" + str (sys .maxsize )
50
+ else : # Python 2
51
+ verStr = str (versionString ) + " -rc" + str (sys .maxint )
52
+
45
53
elif len (verParts ) != 4 :
46
54
print ("pkgVersionNormalized WARNING: unexpected version format: {0})" .format (verStr ), file = sys .stderr )
47
-
55
+
48
56
return verStr
49
57
50
58
@@ -54,31 +62,37 @@ def main(args):
54
62
return 1
55
63
56
64
tools = {}
57
- platforms = {}
65
+ platforms = {}
58
66
pkg1 = load_package (args [1 ])
59
- tools = merge_objects (tools , pkg1 [' tools' ]);
60
- platforms = merge_objects (platforms , pkg1 [' platforms' ]);
67
+ tools = merge_objects (tools , pkg1 [" tools" ])
68
+ platforms = merge_objects (platforms , pkg1 [" platforms" ])
61
69
pkg2 = load_package (args [2 ])
62
- tools = merge_objects (tools , pkg2 [' tools' ]);
63
- platforms = merge_objects (platforms , pkg2 [' platforms' ]);
70
+ tools = merge_objects (tools , pkg2 [" tools" ])
71
+ platforms = merge_objects (platforms , pkg2 [" platforms" ])
64
72
65
- pkg1 [' tools' ] = []
66
- pkg1 [' platforms' ] = []
73
+ pkg1 [" tools" ] = []
74
+ pkg1 [" platforms" ] = []
67
75
68
76
for name in tools :
69
77
for version in tools [name ]:
70
78
print ("Adding tool {0}-{1}" .format (name , version ), file = sys .stderr )
71
- pkg1 [' tools' ].append (tools [name ][version ])
79
+ pkg1 [" tools" ].append (tools [name ][version ])
72
80
73
81
for name in platforms :
74
82
for version in platforms [name ]:
75
83
print ("Adding platform {0}-{1}" .format (name , version ), file = sys .stderr )
76
- pkg1 ['platforms' ].append (platforms [name ][version ])
77
-
78
- #pkg1['platforms'] = sorted(pkg1['platforms'], key=lambda k: LooseVersion(pkgVersionNormalized(k['version'])), reverse=True)
79
- pkg1 ['platforms' ] = sorted (pkg1 ['platforms' ], key = lambda k : Version (pkgVersionNormalized (k ['version' ])), reverse = True )
84
+ pkg1 ["platforms" ].append (platforms [name ][version ])
85
+
86
+ # pkg1["platforms"] = sorted(
87
+ # pkg1["platforms"], key=lambda k: LooseVersion(pkgVersionNormalized(k["version"])), reverse=True
88
+ # )
89
+
90
+ pkg1 ["platforms" ] = sorted (
91
+ pkg1 ["platforms" ], key = lambda k : Version (pkgVersionNormalized (k ["version" ])), reverse = True
92
+ )
93
+
94
+ json .dump ({"packages" : [pkg1 ]}, sys .stdout , indent = 2 )
80
95
81
- json .dump ({'packages' :[pkg1 ]}, sys .stdout , indent = 2 )
82
96
83
- if __name__ == ' __main__' :
97
+ if __name__ == " __main__" :
84
98
sys .exit (main (sys .argv ))
0 commit comments