Implement actual removal from storage(s)
This MR is probably best reviewed by commit.
First, we split removal from the cli
module into a new operations
module and adjust CLI, logging, output and tests accordingly. The core removal operation is implemented in a Remover
helper class.
Once this is done, implementing actual removal can be done with proper unit testing in the Remover.remove()
method.
When calling this method, the CLI will make sure to restore the just-created recovery bundle in case it errors.
Remover.remove()
is then modified to verify if any new references have been added to the objects we just removed. Unless they are also coming from objects we’ve just removed, we raise an exception. This will make the CLI roll back from the recovery bundle if this happens.
Finally, we add support from removal from multiple storage.