M overlayctl +3 -4
@@ 674,8 674,9 @@ def editer(
return
layer.lowers[:] = lowers
layer.dump()
+ for layer in _iter_descendants(layer):
+ layer.dump()
systemctl.daemon_reload()
- # XXX propagate to descendants
logger.debug("Systemd \"%s\" restarted", layer.unitname)
logger.info("\"%s\" updated", layer.name)
@@ 768,7 769,6 @@ def deplacer(oldname, newname, interrupt
return
with _stop_branch(layer, interrupt=interrupt, preserve=preserve, restart=interrupt):
-
# Move overlay dirs.
layer.upperdir.rename(_new.upperdir)
layer.workdir.rename(_new.workdir)
@@ 776,9 776,8 @@ def deplacer(oldname, newname, interrupt
layer.delete()
layer.name = newname
+
layer.dump()
-
- # Update existing layers that depends on the moved one.
for layer in _iter_descendants(layer):
layer.dump()
M test_overlayctl.py +17 -0
@@ 389,6 389,7 @@ class TestStop(BaseTest):
class TestEdit(BaseTest):
+ """Test for `edit` command."""
def test_prepending_lowers(self):
# User can augment lowers with the --prepend option.
@@ 446,6 447,22 @@ class TestEdit(BaseTest):
self.get_mount_dir('base1'),
])
+ def test_modifications_propagated_to_descendants(self):
+ # Modifications are propagated to descendants.
+ self.get_mount_dir('base').mkdir()
+ overlayctl.creater('lower1', ['base'])
+ overlayctl.creater('lower2', ['base'])
+ overlayctl.creater('layer', ['lower2'])
+ self.systemctl.reset_mock()
+ self.systemctl.status.return_value = {'Active': 'inactive'}
+ overlayctl.editer('lower2', prepended=['lower1'])
+ self.assert_daemon_reload_called()
+ self.check_mount_unit('layer', [
+ self.get_upper_dir('lower2'),
+ self.get_upper_dir('lower1'),
+ self.get_mount_dir('base'),
+ ])
+
def test_with_editor(self):
# The user's editor is started with no options.
# In the editor, user can move, add and remove lower freely.