From 07d8ef949f02abb3563faad58a1142c7400c2949 Mon Sep 17 00:00:00 2001 From: Olly Cope Date: Thu, 3 Nov 2022 10:45:59 +0000 Subject: config: prevent prompting to save config when it has not changed --- yoyo/config.py | 9 +++++++++ yoyo/scripts/main.py | 10 ++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/yoyo/config.py b/yoyo/config.py index 6d05f22..0569a12 100644 --- a/yoyo/config.py +++ b/yoyo/config.py @@ -206,3 +206,12 @@ def find_config(): return path d = os.path.dirname(d) return None + + +def config_changed(config: ConfigParser, path: str) -> bool: + def to_dict(config: ConfigParser): + return {k: dict(section.items()) for k, section in config.items()} + + if Path(path).exists(): + return to_dict(read_config(path)) != to_dict(config) + return True diff --git a/yoyo/scripts/main.py b/yoyo/scripts/main.py index 7ae7fed..d9894ef 100755 --- a/yoyo/scripts/main.py +++ b/yoyo/scripts/main.py @@ -28,6 +28,7 @@ from yoyo.config import CONFIG_FILENAME from yoyo.config import find_config from yoyo.config import read_config from yoyo.config import save_config +from yoyo.config import config_changed from yoyo.config import update_argparser_defaults verbosity_levels = { @@ -70,9 +71,8 @@ def parse_args( global_args, _ = globalparser.parse_known_args(argv) # Read the config file and create a dictionary of defaults for argparser - config = read_config( - (global_args.config or find_config()) if global_args.use_config_file else None - ) + configfile = global_args.config or find_config() + config = read_config(configfile if global_args.use_config_file else None) defaults = {} for argname, getter in config_args.items(): @@ -309,7 +309,9 @@ def main(argv=None): argparser.error(e.args[0]) if config_is_empty and args.use_config_file and not args.batch_mode: - prompt_save_config(config, args.config or CONFIG_FILENAME) + config_file = args.config or CONFIG_FILENAME + if config_changed(config, config_file): + prompt_save_config(config, config_file) return exitcode -- cgit v1.2.1