浏览代码

config: accept non-int value for storage_quota

borg config REPO storage_quota 100G

note: when setting a non-int value for this in a repo config, using the repo will require borg >= 1.1.16.
Thomas Waldmann 4 年之前
父节点
当前提交
c4f73c9061
共有 2 个文件被更改,包括 6 次插入3 次删除
  1. 5 2
      src/borg/archiver.py
  2. 1 1
      src/borg/repository.py

+ 5 - 2
src/borg/archiver.py

@@ -1798,7 +1798,7 @@ class Archiver:
         def repo_validate(section, name, value=None, check_value=True):
             if section not in ['repository', ]:
                 raise ValueError('Invalid section')
-            if name in ['segments_per_dir', 'max_segment_size', 'storage_quota', ]:
+            if name in ['segments_per_dir', 'max_segment_size', ]:
                 if check_value:
                     try:
                         int(value)
@@ -1807,12 +1807,15 @@ class Archiver:
                     if name == 'max_segment_size':
                         if int(value) >= MAX_SEGMENT_SIZE_LIMIT:
                             raise ValueError('Invalid value: max_segment_size >= %d' % MAX_SEGMENT_SIZE_LIMIT)
-            elif name in ['additional_free_space', ]:
+            elif name in ['additional_free_space', 'storage_quota', ]:
                 if check_value:
                     try:
                         parse_file_size(value)
                     except ValueError:
                         raise ValueError('Invalid value') from None
+                    if name == 'storage_quota':
+                        if parse_file_size(value) < parse_file_size('10M'):
+                            raise ValueError('Invalid value: storage_quota < 10M')
             elif name in ['append_only', ]:
                 if check_value and value not in ['0', '1']:
                     raise ValueError('Invalid value')

+ 1 - 1
src/borg/repository.py

@@ -442,7 +442,7 @@ class Repository:
         self.append_only = self.append_only or self.config.getboolean('repository', 'append_only', fallback=False)
         if self.storage_quota is None:
             # self.storage_quota is None => no explicit storage_quota was specified, use repository setting.
-            self.storage_quota = self.config.getint('repository', 'storage_quota', fallback=0)
+            self.storage_quota = parse_file_size(self.config.get('repository', 'storage_quota', fallback=0))
         self.id = unhexlify(self.config.get('repository', 'id').strip())
         self.io = LoggedIO(self.path, self.max_segment_size, self.segments_per_dir)
         if self.check_segment_magic: