From 16a2cdcf4161005a5ef8eebf8046355bd8c2ffc5 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Tue, 17 Nov 2015 15:41:41 +0300 Subject: [PATCH] Add script to merge boards manager packages --- package/merge_packages.py | 60 +++++++++++++++++++++++++++++++++++++++ tools/get.py | 6 ++-- 2 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 package/merge_packages.py diff --git a/package/merge_packages.py b/package/merge_packages.py new file mode 100644 index 000000000..350522bac --- /dev/null +++ b/package/merge_packages.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python +# This script merges two Arduino Board Manager package json files. +# Usage: +# python merge_packages.py package_esp8266com_index.json version/new/package_esp8266com_index.json +# Written by Ivan Grokhotkov, 2015 +# +from __future__ import print_function +import json +import sys + +def load_package(filename): + pkg = json.load(open(filename))['packages'][0] + print("Loaded package {0} from {1}".format(pkg['name'], filename)) + print("{0} platform(s), {1} tools".format(len(pkg['platforms']), len(pkg['tools']))) + return pkg + +def merge_objects(versions, obj): + for o in obj: + name = o['name'].encode('ascii') + ver = o['version'].encode('ascii') + if not name in versions: + print("found new object, {0}".format(name)) + versions[name] = {} + if not ver in versions[name]: + print("found new version {0} for object {1}".format(ver, name)) + versions[name][ver] = o + return versions + + +def main(args): + if len(args) < 3: + print("Usage: {0} ".format(args[0])) + return 1 + + tools = {} + platforms = {} + pkg1 = load_package(args[1]) + tools = merge_objects(tools, pkg1['tools']); + platforms = merge_objects(platforms, pkg1['platforms']); + pkg2 = load_package(args[2]) + tools = merge_objects(tools, pkg2['tools']); + platforms = merge_objects(platforms, pkg2['platforms']); + + pkg1['tools'] = [] + pkg1['platforms'] = [] + + for name in tools: + for version in tools[name]: + print("Adding tool {0}-{1}".format(name, version)) + pkg1['tools'].append(tools[name][version]) + + for name in platforms: + for version in platforms[name]: + print("Adding platform {0}-{1}".format(name, version)) + pkg1['platforms'].append(platforms[name][version]) + + json.dump({'packages':[pkg1]}, sys.stdout, indent=2) + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/tools/get.py b/tools/get.py index e47a535be..eb8051ef8 100755 --- a/tools/get.py +++ b/tools/get.py @@ -1,7 +1,7 @@ #!/usr/bin/env python -# This script will download and extract required tools into the current directory -# Tools list is obtained from tools.json file -# Written by Ivan Grokhotkov, 2015 +# This script will download and extract required tools into the current directory. +# Tools list is obtained from package/package_esp8266com_index.template.json file. +# Written by Ivan Grokhotkov, 2015. # from __future__ import print_function import urllib