diff --git a/tools/UpdatePaths/__main__.py b/tools/UpdatePaths/__main__.py index 8ce7a3a92ca..804f34c88c0 100644 --- a/tools/UpdatePaths/__main__.py +++ b/tools/UpdatePaths/__main__.py @@ -138,20 +138,25 @@ def update_path(dmm_data, replacement_string, verbose=False): return [element] bad_keys = {} + modified_keys = [] keys = list(dmm_data.dictionary.keys()) for definition_key in keys: def_value = dmm_data.dictionary[definition_key] new_value = tuple(y for x in def_value for y in get_result(x) if y != None) if new_value != def_value: dmm_data.overwrite_key(definition_key, new_value, bad_keys) + modified_keys.append(definition_key) dmm_data.reassign_bad_keys(bad_keys) + return modified_keys def update_map(map_filepath, updates, verbose=False): print("Updating: {0}".format(map_filepath)) dmm_data = DMM.from_file(map_filepath) + modified_keys = [] for update_string in updates: - update_path(dmm_data, update_string, verbose) + modified_keys.extend(update_path(dmm_data, update_string, verbose)) + dmm_data.remove_unused_keys(modified_keys) dmm_data.to_file(map_filepath) diff --git a/tools/mapmerge2/dmm.py b/tools/mapmerge2/dmm.py index 453cdf5c8af..cd6869d4c1e 100644 --- a/tools/mapmerge2/dmm.py +++ b/tools/mapmerge2/dmm.py @@ -83,6 +83,14 @@ class DMM: # reassign the grid entries which used the old key self.grid[k] = bad_keys.get(v, v) + def remove_unused_keys(self, modified_keys = None): + unused_keys = modified_keys if modified_keys is not None else self.dictionary.keys() + for key in self.grid.values(): + if key in unused_keys: + unused_keys.remove(key) + for key in unused_keys: + del self.dictionary[key] + def _presave_checks(self): # last-second handling of bogus keys to help prevent and fix broken maps self._ensure_free_keys(0)