Skip to content

Commit 4491d2e

Browse files
committed
Prevent modifying existing targets.
A warning will be printed if it is attempted.
1 parent 6bd55a1 commit 4491d2e

File tree

2 files changed

+9
-21
lines changed

2 files changed

+9
-21
lines changed

tools/targets/__init__.py

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -128,23 +128,6 @@ class Target(namedtuple("Target", "name json_data resolution_order resolution_or
128128
# Extra custom targets files
129129
__extra_target_json_files = []
130130

131-
@staticmethod
132-
def _merge_dict(dct, merge_dct):
133-
""" Recursive dict merge. Inspired by `dict.update()` however instead of
134-
updating only top-level keys, dict_merge recurses down into dicts nested
135-
to an arbitrary depth, updating keys.
136-
The provided ``merge_dct`` is merged into ``dct`` in place.
137-
:param dct: dict onto which the merge is executed
138-
:param merge_dct: dct merged into dct
139-
:return: None
140-
"""
141-
for k, v in merge_dct.iteritems():
142-
if (k in dct and isinstance(dct[k], dict)
143-
and isinstance(merge_dct[k], Mapping)):
144-
Target._merge_dict(dct[k], merge_dct[k])
145-
else:
146-
dct[k] = merge_dct[k]
147-
148131
@staticmethod
149132
@cached
150133
def get_json_target_data():
@@ -153,7 +136,11 @@ def get_json_target_data():
153136
Target.__targets_json_location_default)
154137

155138
for extra_target in Target.__extra_target_json_files:
156-
Target._merge_dict(targets, json_file_to_dict(extra_target))
139+
for k, v in json_file_to_dict(extra_target).iteritems():
140+
if k in targets:
141+
print 'WARNING: Custom target "%s" cannot replace existing target.' % k
142+
else:
143+
targets[k] = v
157144

158145
return targets
159146

tools/test/targets/target_test.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def test_add_extra_targets(self):
7676
assert TARGET_MAP['Test_Target'].core is None, \
7777
"attributes should be inherited from Target"
7878

79-
def test_modify_default_target(self):
79+
def test_modify_existing_target(self):
8080
"""Set default targets file, then override base Target definition"""
8181
initial_target_json = """
8282
{
@@ -132,8 +132,9 @@ def test_modify_default_target(self):
132132
update_target_data()
133133

134134
assert TARGET_MAP["Test_Target"].core == "Cortex-M4"
135-
assert TARGET_MAP["Test_Target"].default_toolchain == 'GCC_ARM'
136-
assert TARGET_MAP["Test_Target"].bootloader_supported == True
135+
# The existing target should not be modified by custom targets
136+
assert TARGET_MAP["Test_Target"].default_toolchain != 'GCC_ARM'
137+
assert TARGET_MAP["Test_Target"].bootloader_supported != True
137138

138139

139140
if __name__ == '__main__':

0 commit comments

Comments
 (0)