diff options
author | Anish Athalye <me@anishathalye.com> | 2019-12-31 14:47:32 -0500 |
---|---|---|
committer | Anish Athalye <me@anishathalye.com> | 2019-12-31 14:47:32 -0500 |
commit | 81f0d7495518a1fe441343024f2320c95eff86b4 (patch) | |
tree | db8b2a0dcc664f660cbc0898efb7956eeb130408 | |
parent | a7bfce3e231d8ce83a7425a13bef692f5162b5be (diff) |
Fix clean not respecting defaults
Previously, clean read the defaults once, and then it updated the
setting for each entry it read. This resulted in the defaults being
clobbered and then not being respected for subsequent entries. This
patch fixes the issue by re-reading the defaults before processing each
item.
The other plugins (link, shell) do not have this problem.
-rw-r--r-- | dotbot/plugins/clean.py | 4 | ||||
-rw-r--r-- | test/tests/clean-default.bash | 19 |
2 files changed, 21 insertions, 2 deletions
diff --git a/dotbot/plugins/clean.py b/dotbot/plugins/clean.py index 22c975e..89251b9 100644 --- a/dotbot/plugins/clean.py +++ b/dotbot/plugins/clean.py @@ -18,9 +18,9 @@ class Clean(dotbot.Plugin): def _process_clean(self, targets): success = True defaults = self._context.defaults().get(self._directive, {}) - force = defaults.get('force', False) for target in targets: - if isinstance(targets, dict): + force = defaults.get('force', False) + if isinstance(targets, dict) and isinstance(targets[target], dict): force = targets[target].get('force', force) success &= self._clean(target, force) if success: diff --git a/test/tests/clean-default.bash b/test/tests/clean-default.bash new file mode 100644 index 0000000..8bb405d --- /dev/null +++ b/test/tests/clean-default.bash @@ -0,0 +1,19 @@ +test_description='clean uses default unless overridden' +. '../test-lib.bash' + +test_expect_success 'setup' ' +ln -s /nowhere ~/.g +' + +test_expect_success 'run' ' +run_dotbot <<EOF +- clean: + ~/nonexistent: + force: true + ~/: +EOF +' + +test_expect_success 'test' ' +test -h ~/.g +' |