|
@@ -54,6 +54,7 @@ class FilePool(qubes.storage.Pool):
|
|
|
driver = 'file'
|
|
|
|
|
|
def __init__(self, revisions_to_keep=1, dir_path=None, **kwargs):
|
|
|
+ self._revisions_to_keep = 0
|
|
|
super(FilePool, self).__init__(revisions_to_keep=revisions_to_keep,
|
|
|
**kwargs)
|
|
|
assert dir_path, "No pool dir_path specified"
|
|
@@ -85,19 +86,27 @@ class FilePool(qubes.storage.Pool):
|
|
|
volume_config['revisions_to_keep'] = 0
|
|
|
except KeyError:
|
|
|
pass
|
|
|
- finally:
|
|
|
- if 'revisions_to_keep' not in volume_config:
|
|
|
- volume_config['revisions_to_keep'] = self.revisions_to_keep
|
|
|
|
|
|
- if int(volume_config['revisions_to_keep']) > 1:
|
|
|
- raise NotImplementedError(
|
|
|
- 'FilePool supports maximum 1 volume revision to keep')
|
|
|
+ if 'revisions_to_keep' not in volume_config:
|
|
|
+ volume_config['revisions_to_keep'] = self.revisions_to_keep
|
|
|
|
|
|
volume_config['pool'] = self
|
|
|
volume = FileVolume(**volume_config)
|
|
|
self._volumes += [volume]
|
|
|
return volume
|
|
|
|
|
|
+ @property
|
|
|
+ def revisions_to_keep(self):
|
|
|
+ return self._revisions_to_keep
|
|
|
+
|
|
|
+ @revisions_to_keep.setter
|
|
|
+ def revisions_to_keep(self, value):
|
|
|
+ value = int(value)
|
|
|
+ if value > 1:
|
|
|
+ raise NotImplementedError(
|
|
|
+ 'FilePool supports maximum 1 volume revision to keep')
|
|
|
+ self._revisions_to_keep = value
|
|
|
+
|
|
|
def destroy(self):
|
|
|
pass
|
|
|
|
|
@@ -162,12 +171,24 @@ class FileVolume(qubes.storage.Volume):
|
|
|
def __init__(self, dir_path, **kwargs):
|
|
|
self.dir_path = dir_path
|
|
|
assert self.dir_path, "dir_path not specified"
|
|
|
+ self._revisions_to_keep = 0
|
|
|
super(FileVolume, self).__init__(**kwargs)
|
|
|
|
|
|
if self.snap_on_start:
|
|
|
img_name = self.source.vid + '-cow.img'
|
|
|
self.path_source_cow = os.path.join(self.dir_path, img_name)
|
|
|
|
|
|
+ @property
|
|
|
+ def revisions_to_keep(self):
|
|
|
+ return self._revisions_to_keep
|
|
|
+
|
|
|
+ @revisions_to_keep.setter
|
|
|
+ def revisions_to_keep(self, value):
|
|
|
+ if int(value) > 1:
|
|
|
+ raise NotImplementedError(
|
|
|
+ 'FileVolume supports maximum 1 volume revision to keep')
|
|
|
+ self._revisions_to_keep = int(value)
|
|
|
+
|
|
|
def create(self):
|
|
|
assert isinstance(self.size, int) and self.size > 0, \
|
|
|
'Volume size must be > 0'
|