[MIRROR] Makes update paths remove keys left after merging. [MDB IGNORE] (#13588)

* Makes update paths remove keys left after merging. (#66916)

Fixes #66914

* Makes update paths remove keys left after merging.

Co-authored-by: AnturK <AnturK@users.noreply.github.com>
This commit is contained in:
SkyratBot
2022-05-14 01:06:45 +02:00
committed by GitHub
parent 45390a661f
commit 2fbe3fd167
2 changed files with 14 additions and 1 deletions
+6 -1
View File
@@ -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)
+8
View File
@@ -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)