backup: add support for calling a function after backing up a file/volume
When Volume.export is called late and can be also a coroutine, it may make sense to also have a cleanup function for changes made by it. This commit only adjust backup code internals, but doesn't call appropriate Volume function yet. QubesOS/qubes-issues#5935
This commit is contained in:
parent
ebd0ca7e79
commit
f48327f636
@ -252,7 +252,8 @@ class Backup:
|
|||||||
# pylint: disable=too-many-instance-attributes
|
# pylint: disable=too-many-instance-attributes
|
||||||
class FileToBackup:
|
class FileToBackup:
|
||||||
# pylint: disable=too-few-public-methods
|
# pylint: disable=too-few-public-methods
|
||||||
def __init__(self, file_path_or_func, subdir=None, name=None, size=None):
|
def __init__(self, file_path_or_func, subdir=None, name=None, size=None,
|
||||||
|
cleanup_func=None):
|
||||||
"""Store a single file to backup
|
"""Store a single file to backup
|
||||||
|
|
||||||
:param file_path_or_func: path to the file or a function
|
:param file_path_or_func: path to the file or a function
|
||||||
@ -262,6 +263,8 @@ class Backup:
|
|||||||
:param subdir: directory in a backup archive to place file in
|
:param subdir: directory in a backup archive to place file in
|
||||||
:param name: name of the file in the backup archive
|
:param name: name of the file in the backup archive
|
||||||
:param size: size
|
:param size: size
|
||||||
|
:param cleanup_func: function to call after processing the file;
|
||||||
|
the function will get the file path as an argument
|
||||||
"""
|
"""
|
||||||
if callable(file_path_or_func):
|
if callable(file_path_or_func):
|
||||||
assert subdir is not None \
|
assert subdir is not None \
|
||||||
@ -295,6 +298,8 @@ class Backup:
|
|||||||
self.subdir = subdir
|
self.subdir = subdir
|
||||||
#: use this name in the archive (aka rename)
|
#: use this name in the archive (aka rename)
|
||||||
self.name = name
|
self.name = name
|
||||||
|
#: function to call after processing the file
|
||||||
|
self.cleanup_func = cleanup_func
|
||||||
|
|
||||||
class VMToBackup:
|
class VMToBackup:
|
||||||
# pylint: disable=too-few-public-methods
|
# pylint: disable=too-few-public-methods
|
||||||
@ -674,6 +679,10 @@ class Backup:
|
|||||||
except ProcessLookupError:
|
except ProcessLookupError:
|
||||||
pass
|
pass
|
||||||
raise
|
raise
|
||||||
|
finally:
|
||||||
|
if file_info.cleanup_func is not None:
|
||||||
|
yield from qubes.utils.coro_maybe(
|
||||||
|
file_info.cleanup_func(path))
|
||||||
|
|
||||||
yield from tar_sparse.wait()
|
yield from tar_sparse.wait()
|
||||||
if tar_sparse.returncode:
|
if tar_sparse.returncode:
|
||||||
|
Loading…
Reference in New Issue
Block a user