mirror of
https://github.com/borgbackup/borg.git
synced 2024-12-26 01:37:20 +00:00
make some code from with_repository reusable
This commit is contained in:
parent
65c7829216
commit
a375335859
1 changed files with 37 additions and 18 deletions
|
@ -112,6 +112,35 @@ def argument(args, str_or_bool):
|
||||||
return str_or_bool
|
return str_or_bool
|
||||||
|
|
||||||
|
|
||||||
|
def get_repository(location, *, create, exclusive, lock_wait, lock, append_only,
|
||||||
|
make_parent_dirs, storage_quota, args):
|
||||||
|
if location.proto == 'ssh':
|
||||||
|
repository = RemoteRepository(location.omit_archive(), create=create, exclusive=exclusive,
|
||||||
|
lock_wait=lock_wait, lock=lock, append_only=append_only,
|
||||||
|
make_parent_dirs=make_parent_dirs, args=args)
|
||||||
|
|
||||||
|
else:
|
||||||
|
repository = Repository(location.path, create=create, exclusive=exclusive,
|
||||||
|
lock_wait=lock_wait, lock=lock, append_only=append_only,
|
||||||
|
make_parent_dirs=make_parent_dirs, storage_quota=storage_quota)
|
||||||
|
return repository
|
||||||
|
|
||||||
|
|
||||||
|
def compat_check(*, create, manifest, key, cache, compatibility, decorator_name):
|
||||||
|
if not create and (manifest or key or cache):
|
||||||
|
if compatibility is None:
|
||||||
|
raise AssertionError(f"{decorator_name} decorator used without compatibility argument")
|
||||||
|
if type(compatibility) is not tuple:
|
||||||
|
raise AssertionError(f"{decorator_name} decorator compatibility argument must be of type tuple")
|
||||||
|
else:
|
||||||
|
if compatibility is not None:
|
||||||
|
raise AssertionError(f"{decorator_name} called with compatibility argument, "
|
||||||
|
f"but would not check {compatibility!r}")
|
||||||
|
if create:
|
||||||
|
compatibility = Manifest.NO_OPERATION_CHECK
|
||||||
|
return compatibility
|
||||||
|
|
||||||
|
|
||||||
def with_repository(fake=False, invert_fake=False, create=False, lock=True,
|
def with_repository(fake=False, invert_fake=False, create=False, lock=True,
|
||||||
exclusive=False, manifest=True, cache=False, secure=True,
|
exclusive=False, manifest=True, cache=False, secure=True,
|
||||||
compatibility=None):
|
compatibility=None):
|
||||||
|
@ -128,17 +157,9 @@ def with_repository(fake=False, invert_fake=False, create=False, lock=True,
|
||||||
:param secure: do assert_secure after loading manifest
|
:param secure: do assert_secure after loading manifest
|
||||||
:param compatibility: mandatory if not create and (manifest or cache), specifies mandatory feature categories to check
|
:param compatibility: mandatory if not create and (manifest or cache), specifies mandatory feature categories to check
|
||||||
"""
|
"""
|
||||||
|
# Note: with_repository decorator does not have a "key" argument (yet?)
|
||||||
if not create and (manifest or cache):
|
compatibility = compat_check(create=create, manifest=manifest, key=manifest, cache=cache,
|
||||||
if compatibility is None:
|
compatibility=compatibility, decorator_name='with_repository')
|
||||||
raise AssertionError("with_repository decorator used without compatibility argument")
|
|
||||||
if type(compatibility) is not tuple:
|
|
||||||
raise AssertionError("with_repository decorator compatibility argument must be of type tuple")
|
|
||||||
else:
|
|
||||||
if compatibility is not None:
|
|
||||||
raise AssertionError("with_repository called with compatibility argument but would not check" + repr(compatibility))
|
|
||||||
if create:
|
|
||||||
compatibility = Manifest.NO_OPERATION_CHECK
|
|
||||||
|
|
||||||
# To process the `--bypass-lock` option if specified, we need to
|
# To process the `--bypass-lock` option if specified, we need to
|
||||||
# modify `lock` inside `wrapper`. Therefore we cannot use the
|
# modify `lock` inside `wrapper`. Therefore we cannot use the
|
||||||
|
@ -159,14 +180,12 @@ def wrapper(self, args, **kwargs):
|
||||||
make_parent_dirs = getattr(args, 'make_parent_dirs', False)
|
make_parent_dirs = getattr(args, 'make_parent_dirs', False)
|
||||||
if argument(args, fake) ^ invert_fake:
|
if argument(args, fake) ^ invert_fake:
|
||||||
return method(self, args, repository=None, **kwargs)
|
return method(self, args, repository=None, **kwargs)
|
||||||
elif location.proto == 'ssh':
|
|
||||||
repository = RemoteRepository(location.omit_archive(), create=create, exclusive=argument(args, exclusive),
|
repository = get_repository(location, create=create, exclusive=argument(args, exclusive),
|
||||||
lock_wait=self.lock_wait, lock=lock, append_only=append_only,
|
|
||||||
make_parent_dirs=make_parent_dirs, args=args)
|
|
||||||
else:
|
|
||||||
repository = Repository(location.path, create=create, exclusive=argument(args, exclusive),
|
|
||||||
lock_wait=self.lock_wait, lock=lock, append_only=append_only,
|
lock_wait=self.lock_wait, lock=lock, append_only=append_only,
|
||||||
storage_quota=storage_quota, make_parent_dirs=make_parent_dirs)
|
make_parent_dirs=make_parent_dirs, storage_quota=storage_quota,
|
||||||
|
args=args)
|
||||||
|
|
||||||
with repository:
|
with repository:
|
||||||
if manifest or cache:
|
if manifest or cache:
|
||||||
kwargs['manifest'], kwargs['key'] = Manifest.load(repository, compatibility)
|
kwargs['manifest'], kwargs['key'] = Manifest.load(repository, compatibility)
|
||||||
|
|
Loading…
Reference in a new issue