From ac4c133733457acde2f1a2ef94a914321c0628cc Mon Sep 17 00:00:00 2001 From: Gabor Mezei Date: Thu, 19 Sep 2024 13:19:52 +0200 Subject: [PATCH] Add backup support for config files Move the backup functionality from `depends.py` Signed-off-by: Gabor Mezei --- scripts/mbedtls_framework/config_common.py | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/scripts/mbedtls_framework/config_common.py b/scripts/mbedtls_framework/config_common.py index 4dcefb0e6..ade572126 100644 --- a/scripts/mbedtls_framework/config_common.py +++ b/scripts/mbedtls_framework/config_common.py @@ -8,6 +8,7 @@ import argparse import os import re +import shutil import sys from abc import ABCMeta @@ -194,6 +195,18 @@ def filename(self, name=None): return self._get_configfile(name).filename + def backup(self, suffix='.bak'): + """Back up the configuration file.""" + + for configfile in self.configfiles: + configfile.backup(suffix) + + def restore(self): + """Restore the configuration file.""" + + for configfile in self.configfiles: + configfile.restore() + class ConfigFile(metaclass=ABCMeta): """Representation of a configuration file.""" @@ -214,6 +227,8 @@ def __init__(self, default_path, name, filename=None): self.current_section = None self.inclusion_guard = None self.modified = False + self._backupname = None + self._own_backup = False _define_line_regexp = (r'(?P\s*)' + r'(?P(//\s*)?)' + @@ -324,6 +339,37 @@ def write(self, settings, filename=None): with open(filename, 'w', encoding='utf-8') as output: self.write_to_stream(settings, output) + def backup(self, suffix='.bak'): + """Back up the configuration file. + + If the backup file already exists, it is presumed to be the desired backup, + so don't make another backup. + """ + if self._backupname: + return + + self._backupname = self.filename + suffix + if os.path.exists(self._backupname): + self._own_backup = False + else: + self._own_backup = True + shutil.copy(self.filename, self._backupname) + + def restore(self): + """Restore the configuration file. + + Only delete the backup file if it was created earlier. + """ + if not self._backupname: + return + + if self._own_backup: + shutil.move(self._backupname, self.filename) + else: + shutil.copy(self._backupname, self.filename) + + self._backupname = None + class ConfigTool(metaclass=ABCMeta): """Command line config manipulation tool.