Only write config files if it is modified
Signed-off-by: Gabor Mezei <gabor.mezei@arm.com>
diff --git a/scripts/config.py b/scripts/config.py
index 929aee6..ba5a00c 100755
--- a/scripts/config.py
+++ b/scripts/config.py
@@ -418,6 +418,7 @@
self.templates = []
self.current_section = None
self.inclusion_guard = None
+ self.modified = False
_define_line_regexp = (r'(?P<indentation>\s*)' +
r'(?P<commented_out>(//\s*)?)' +
@@ -495,6 +496,11 @@
"""
if filename is None:
filename = self.filename
+
+ # Not modified so no need to write to the file
+ if not self.modified and filename == self.filename:
+ return
+
with open(filename, 'w', encoding='utf-8') as output:
self.write_to_stream(settings, output)
@@ -661,6 +667,10 @@
else:
return self.mbedtls_configfile
+ def __setitem__(self, name, value):
+ super().__setitem__(name, value)
+ self.settings[name].configfile.modified = True
+
def set(self, name, value=None):
configfile = self._get_configfile(name)
@@ -674,11 +684,55 @@
if not value:
value = '1'
- if name not in self.settings:
+ if name in self.settings:
+ setting = self.settings[name]
+ if not setting.active or (value is not None and setting.value != value):
+ configfile.modified = True
+ else:
configfile.templates.append((name, '', '#define ' + name + ' '))
+ configfile.modified = True
super().set(name, value)
+ def unset(self, name):
+ if name in self.settings and self.settings[name].active:
+ self.settings[name].configfile.modified = True
+
+ super().unset(name)
+
+ def adapt(self, adapter):
+ # Determine if the config files will be modified
+ unmodified = {config for config in [self.mbedtls_configfile, self.crypto_configfile]
+ if not config.modified}
+ if unmodified:
+ for setting in self.settings.values():
+ if not setting.configfile.modified and \
+ setting.active != adapter(setting.name, setting.active, setting.section):
+ setting.configfile.modified = True
+ unmodified.remove(setting.configfile)
+ if not unmodified:
+ break
+
+ super().adapt(adapter)
+
+ def change_matching(self, regexs, enable):
+ # Determine if the config files will be modified
+ if regexs:
+ regex = re.compile('|'.join(regexs))
+ unmodified = {config for config in [self.mbedtls_configfile, self.crypto_configfile]
+ if not config.modified}
+ if unmodified:
+ for setting in self.settings.values():
+ if not setting.configfile.modified and \
+ setting.active != enable and \
+ regex.search(setting.name):
+ setting.configfile.modified = True
+ unmodified.remove(setting.configfile)
+ if not unmodified:
+ break
+
+ super().change_matching(regexs, enable)
+
def write(self, mbedtls_file=None, crypto_file=None):
"""Write the whole configuration to the file it was read from.