@@ 604,19 604,26 @@ def _get_editor_on_file(filename):
Popen(cmd, shell=True).wait()
-def editer(name, appended=None, prepended=None, removed=None, keep_others=False):
+def editer(
+ name, appended=None, prepended=None, removed=None,
+ stop_others=False, keep_others=False):
"""Ask user to edit lowers of the given overlay name, rewrite
the metadata and unit files accordingly, finaly retart systemd units
of the edited overlay.
"""
layer = build_layer(name)
+ to_stop = []
if not keep_others:
- to_stop = [layer for layer in _iter_descendants(layer) if layer.automountunit.is_active()]
+ to_stop[:] = [layer for layer in _iter_descendants(layer)
+ if layer.automountunit.is_active()]
if to_stop:
- # XXX automatic stop/start
- logger.error(
- 'You should prefere to stop the following overlays: \n\n%s\n',
- ', '.join(x.name for x in to_stop))
+ if stop_others:
+ for descendant in to_stop:
+ descendant.stop()
+ else:
+ logger.error(
+ 'You should prefere to stop the following overlays: \n\n%s\n',
+ ', '.join(x.name for x in to_stop))
return
if not appended and not prepended and not removed:
with NamedTemporaryFile() as fobj:
@@ 647,7 654,9 @@ def editer(name, appended=None, prepende
with layer.temporary_stop():
layer.lowers[:] = lowers
layer.dump()
- systemctl.daemon_reload()
+ systemctl.daemon_reload()
+ for descendant in to_stop:
+ descendant.start()
# XXX propagate to descendants
logger.debug("Systemd \"%s\" restarted", layer.unitname)
logger.info("\"%s\" updated", layer.name)
@@ 1019,6 1028,13 @@ def main():
'-d', '--delete', action='append', help="append the following names",
)
edit.add_argument(
+ '--stop-others', '-s',
+ action='store_true',
+ default=False,
+ help=('automatically stop descendants to prevent broken mount point. '
+ 'Restart them afterward.')
+ )
+ edit.add_argument(
'--keep-others', '-K',
action='store_true',
default=False,
@@ 1035,7 1051,7 @@ def main():
)
def _editer(args):
- editer(args.mountdir, args.append, args.prepend, args.delete, args.keep_others)
+ editer(args.mountdir, args.append, args.prepend, args.delete, args.stop_others, args.keep_others)
edit.set_defaults(func=_editer)