11#!/usr/bin/env python
2+
23# This script merges two Arduino Board Manager package json files.
34# Usage:
45# python merge_packages.py package_esp8266com_index.json version/new/package_esp8266com_index.json
56# Written by Ivan Grokhotkov, 2015
67#
8+
79from __future__ import print_function
8- #from distutils.version import LooseVersion
10+
11+ # from distutils.version import LooseVersion
912from packaging .version import Version
1013import re
1114import json
1215import sys
1316
17+
1418def 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 )
1822 return pkg
1923
24+
2025def merge_objects (versions , obj ):
2126 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 :
2530 print ("found new object, {0}" .format (name ), file = sys .stderr )
2631 versions [name ] = {}
27- if not ver in versions [name ]:
32+ if ver not in versions [name ]:
2833 print ("found new version {0} for object {1}" .format (ver , name ), file = sys .stderr )
2934 versions [name ][ver ] = o
3035 return versions
3136
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)
3442def pkgVersionNormalized (versionString ):
3543
3644 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+
3947 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+
4553 elif len (verParts ) != 4 :
4654 print ("pkgVersionNormalized WARNING: unexpected version format: {0})" .format (verStr ), file = sys .stderr )
47-
55+
4856 return verStr
4957
5058
@@ -54,31 +62,37 @@ def main(args):
5462 return 1
5563
5664 tools = {}
57- platforms = {}
65+ platforms = {}
5866 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" ])
6169 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" ])
6472
65- pkg1 [' tools' ] = []
66- pkg1 [' platforms' ] = []
73+ pkg1 [" tools" ] = []
74+ pkg1 [" platforms" ] = []
6775
6876 for name in tools :
6977 for version in tools [name ]:
7078 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 ])
7280
7381 for name in platforms :
7482 for version in platforms [name ]:
7583 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 )
8095
81- json .dump ({'packages' :[pkg1 ]}, sys .stdout , indent = 2 )
8296
83- if __name__ == ' __main__' :
97+ if __name__ == " __main__" :
8498 sys .exit (main (sys .argv ))
0 commit comments