summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorolly <olly@ollycope.com>2015-09-03 18:31:29 +0000
committerolly <olly@ollycope.com>2015-09-03 18:31:29 +0000
commit38e14e5daf0690fe4e4a9e976a8d798868a940e5 (patch)
treebc1bf5e7bde883fd1ab6139aa700fddc4a705d4b
parentfc71a4d87f059d3b4104117248b4110719347283 (diff)
downloadyoyo-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-xyoyo/scripts/main.py58
-rw-r--r--yoyo/tests/test_cli_script.py3
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):