summaryrefslogtreecommitdiff
path: root/scripts/conv_linker_config.py
diff options
context:
space:
mode:
author Jooyung Han <jooyung@google.com> 2023-03-09 14:50:35 +0900
committer Jooyung Han <jooyung@google.com> 2023-03-09 07:46:00 +0000
commitf6fd4c28235af62f2e5babe8f7060b1ad935fa83 (patch)
tree386c825b2857d1006a90f971ae0efeba766d1b5e /scripts/conv_linker_config.py
parentae3e4cc2fd4e74e94510e671a98769ec428f6f39 (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.py21
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())