diff options
author | 2023-03-09 14:50:35 +0900 | |
---|---|---|
committer | 2023-03-09 07:46:00 +0000 | |
commit | f6fd4c28235af62f2e5babe8f7060b1ad935fa83 (patch) | |
tree | 386c825b2857d1006a90f971ae0efeba766d1b5e /scripts/conv_linker_config.py | |
parent | ae3e4cc2fd4e74e94510e671a98769ec428f6f39 (diff) |
Fix conv_linker_config with multiple input json files
`conv_linker_config proto -s` should work with multiple json input
files, but ParseDict() overwrites list fields (e.g. provideLibs), not
appending elements.
Also added a test.
Bug: 264330513
Test: conv_linker_config_test
Change-Id: Idc482f941201f15e5fc276c0ffc0dfeaa09d0cc2
Diffstat (limited to 'scripts/conv_linker_config.py')
-rw-r--r-- | scripts/conv_linker_config.py | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/scripts/conv_linker_config.py b/scripts/conv_linker_config.py index 784a92f4c..3ac1b7e5e 100644 --- a/scripts/conv_linker_config.py +++ b/scripts/conv_linker_config.py @@ -27,6 +27,19 @@ from google.protobuf.json_format import ParseDict from google.protobuf.text_format import MessageToString +def LoadJsonMessage(path): + """ + Loads a message from a .json file with `//` comments strippedfor convenience. + """ + json_content = '' + with open(path) as f: + for line in f: + if not line.lstrip().startswith('//'): + json_content += line + obj = json.loads(json_content, object_pairs_hook=collections.OrderedDict) + return ParseDict(obj, linker_config_pb2.LinkerConfig()) + + def Proto(args): """ Merges input json files (--source) into a protobuf message (--output). @@ -48,13 +61,7 @@ def Proto(args): if args.source: for input in args.source.split(':'): - json_content = '' - with open(input) as f: - for line in f: - if not line.lstrip().startswith('//'): - json_content += line - obj = json.loads(json_content, object_pairs_hook=collections.OrderedDict) - ParseDict(obj, pb) + pb.MergeFrom(LoadJsonMessage(input)) with open(args.output, 'wb') as f: f.write(pb.SerializeToString()) |