summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlly Cope <olly@ollycope.com>2022-11-03 10:45:59 +0000
committerOlly Cope <olly@ollycope.com>2022-11-03 10:45:59 +0000
commit07d8ef949f02abb3563faad58a1142c7400c2949 (patch)
treef13edcf6ab5c7e349da986968c1623ea68505629
parent50b31f170744a727801f9b684a4b3de20ffc7e0a (diff)
downloadyoyo-07d8ef949f02abb3563faad58a1142c7400c2949.tar.gz
config: prevent prompting to save config when it has not changed
-rw-r--r--yoyo/config.py9
-rwxr-xr-xyoyo/scripts/main.py10
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