diff options
author | olly <olly@ollycope.com> | 2015-09-03 18:31:29 +0000 |
---|---|---|
committer | olly <olly@ollycope.com> | 2015-09-03 18:31:29 +0000 |
commit | 38e14e5daf0690fe4e4a9e976a8d798868a940e5 (patch) | |
tree | bc1bf5e7bde883fd1ab6139aa700fddc4a705d4b | |
parent | fc71a4d87f059d3b4104117248b4110719347283 (diff) | |
download | yoyo-38e14e5daf0690fe4e4a9e976a8d798868a940e5.tar.gz |
Fix config file migration
This now writes all currently active config options to the file, and copies the
legacy config on top. Also fix the double prompt for creating the new
config file.
-rwxr-xr-x | yoyo/scripts/main.py | 58 | ||||
-rw-r--r-- | yoyo/tests/test_cli_script.py | 3 |
2 files changed, 36 insertions, 25 deletions
diff --git a/yoyo/scripts/main.py b/yoyo/scripts/main.py index a2a3ec3..92413ca 100755 --- a/yoyo/scripts/main.py +++ b/yoyo/scripts/main.py @@ -190,29 +190,32 @@ def upgrade_legacy_config(args, config, sources): if utils.confirm("Move legacy configuration in {!r} to {!r}?" .format(path, config_path)): save_config(config, config_path) - try: - if utils.confirm("Delete legacy configuration file {!r}" - .format(path)): - os.unlink(path) - except OSError: - logger.warn("Could not remove %r. Manually remove this file " - "to avoid future warnings", path) + try: + if utils.confirm("Delete legacy configuration file {!r}" + .format(path)): + os.unlink(path) + except OSError: + logger.warn("Could not remove %r. Manually remove this file " + "to avoid future warnings", path) + return True else: logger.warn("Found legacy configuration in %r. Run " "yoyo-migrate in interactive mode to update your " "configuration files", path) - try: - args.database = ( - args.database or legacy_config.get('DEFAULT', 'dburi')) - except configparser.NoOptionError: - pass - try: - args.migration_table = ( - args.migration_table or - legacy_config.get('DEFAULT', 'migration_table')) - except configparser.NoOptionError: - pass + try: + args.database = ( + args.database or legacy_config.get('DEFAULT', 'dburi')) + except configparser.NoOptionError: + pass + try: + args.migration_table = ( + args.migration_table or + legacy_config.get('DEFAULT', 'migration_table')) + except configparser.NoOptionError: + pass + + return False def get_backend(args, config): @@ -246,24 +249,29 @@ def main(argv=None): config.items('DEFAULT') == []) sources = getattr(args, 'sources', None) - if sources: - if upgrade_legacy_config(args, config, sources.split()): - return main(argv) verbosity = args.verbosity verbosity = min(max_verbosity, max(min_verbosity, verbosity)) configure_logging(verbosity) + if args.sources: + config.set('DEFAULT', 'sources', args.sources) + if args.database: + config.set('DEFAULT', 'database', args.database) + config.set('DEFAULT', 'migration_table', args.migration_table) + config.set('DEFAULT', 'batch_mode', 'on' if args.batch_mode else 'off') + config.set('DEFAULT', 'verbosity', str(args.verbosity)) + + if sources: + if upgrade_legacy_config(args, config, sources.split()): + return main(argv) + try: args.func(args, config) except InvalidArgument as e: argparser.error(e.args[0]) if config_is_empty and args.use_config_file and not args.batch_mode: - config.set('DEFAULT', 'sources', args.sources) - config.set('DEFAULT', 'database', args.database) - config.set('DEFAULT', 'migration_table', args.migration_table) - config.set('DEFAULT', 'batch_mode', 'off' if args.batch_mode else 'on') prompt_save_config(config, args.config or CONFIG_FILENAME) diff --git a/yoyo/tests/test_cli_script.py b/yoyo/tests/test_cli_script.py index 9c7e552..53e7e35 100644 --- a/yoyo/tests/test_cli_script.py +++ b/yoyo/tests/test_cli_script.py @@ -172,6 +172,7 @@ class TestYoyoScript(TestInteractiveScript): main(['apply', tmpdir]) prompts = [args[0].lower() for args, kwargs in self.confirm.call_args_list] + assert len(prompts) == 2 assert prompts[0].startswith('move legacy configuration') assert prompts[1].startswith('delete legacy configuration') assert not os.path.exists(legacy_config_path) @@ -180,6 +181,8 @@ class TestYoyoScript(TestInteractiveScript): config = f.read() assert 'database = sqlite:///\n' in config assert 'migration_table = _yoyo_migration\n' in config + assert 'batch_mode = off\n' in config + assert 'verbosity = 0\n' in config @with_migrations() def test_it_upgrades_migration_table_None(self, tmpdir): |