mirror of https://github.com/borgbackup/borg.git
Merge pull request #2166 from enkore/issue/2165
init: mandatory --encryption arg
This commit is contained in:
commit
4c7784bf20
|
@ -1850,9 +1850,8 @@ class Archiver:
|
||||||
subparser.add_argument('location', metavar='REPOSITORY', nargs='?', default='',
|
subparser.add_argument('location', metavar='REPOSITORY', nargs='?', default='',
|
||||||
type=location_validator(archive=False),
|
type=location_validator(archive=False),
|
||||||
help='repository to create')
|
help='repository to create')
|
||||||
subparser.add_argument('-e', '--encryption', dest='encryption',
|
subparser.add_argument('-e', '--encryption', dest='encryption', required=True,
|
||||||
choices=('none', 'keyfile', 'repokey', 'keyfile-blake2', 'repokey-blake2', 'authenticated'),
|
choices=('none', 'keyfile', 'repokey', 'keyfile-blake2', 'repokey-blake2', 'authenticated'),
|
||||||
default=None,
|
|
||||||
help='select encryption key mode')
|
help='select encryption key mode')
|
||||||
subparser.add_argument('-a', '--append-only', dest='append_only', action='store_true',
|
subparser.add_argument('-a', '--append-only', dest='append_only', action='store_true',
|
||||||
help='create an append-only mode repository')
|
help='create an append-only mode repository')
|
||||||
|
|
|
@ -98,8 +98,10 @@ def key_creator(repository, args):
|
||||||
return Blake2RepoKey.create(repository, args)
|
return Blake2RepoKey.create(repository, args)
|
||||||
elif args.encryption == 'authenticated':
|
elif args.encryption == 'authenticated':
|
||||||
return AuthenticatedKey.create(repository, args)
|
return AuthenticatedKey.create(repository, args)
|
||||||
else:
|
elif args.encryption == 'none':
|
||||||
return PlaintextKey.create(repository, args)
|
return PlaintextKey.create(repository, args)
|
||||||
|
else:
|
||||||
|
raise ValueError('Invalid encryption mode "%s"' % args.encryption)
|
||||||
|
|
||||||
|
|
||||||
def key_factory(repository, manifest_data):
|
def key_factory(repository, manifest_data):
|
||||||
|
|
|
@ -79,7 +79,13 @@ def exec_cmd(*args, archiver=None, fork=False, exe=None, **kw):
|
||||||
archiver = Archiver()
|
archiver = Archiver()
|
||||||
archiver.prerun_checks = lambda *args: None
|
archiver.prerun_checks = lambda *args: None
|
||||||
archiver.exit_code = EXIT_SUCCESS
|
archiver.exit_code = EXIT_SUCCESS
|
||||||
args = archiver.parse_args(list(args))
|
try:
|
||||||
|
args = archiver.parse_args(list(args))
|
||||||
|
# argparse parsing may raise SystemExit when the command line is bad or
|
||||||
|
# actions that abort early (eg. --help) where given. Catch this and return
|
||||||
|
# the error code as-if we invoked a Borg binary.
|
||||||
|
except SystemExit as e:
|
||||||
|
return e.code, output.getvalue()
|
||||||
ret = archiver.run(args)
|
ret = archiver.run(args)
|
||||||
return ret, output.getvalue()
|
return ret, output.getvalue()
|
||||||
finally:
|
finally:
|
||||||
|
@ -879,16 +885,12 @@ class ArchiverTestCase(ArchiverTestCaseBase):
|
||||||
|
|
||||||
def test_create_without_root(self):
|
def test_create_without_root(self):
|
||||||
"""test create without a root"""
|
"""test create without a root"""
|
||||||
self.cmd('init', self.repository_location)
|
self.cmd('init', '--encryption=repokey', self.repository_location)
|
||||||
args = ['create', self.repository_location + '::test']
|
self.cmd('create', self.repository_location + '::test', exit_code=2)
|
||||||
if self.FORK_DEFAULT:
|
|
||||||
self.cmd(*args, exit_code=2)
|
|
||||||
else:
|
|
||||||
self.assert_raises(SystemExit, lambda: self.cmd(*args))
|
|
||||||
|
|
||||||
def test_create_pattern_root(self):
|
def test_create_pattern_root(self):
|
||||||
"""test create with only a root pattern"""
|
"""test create with only a root pattern"""
|
||||||
self.cmd('init', self.repository_location)
|
self.cmd('init', '--encryption=repokey', self.repository_location)
|
||||||
self.create_regular_file('file1', size=1024 * 80)
|
self.create_regular_file('file1', size=1024 * 80)
|
||||||
self.create_regular_file('file2', size=1024 * 80)
|
self.create_regular_file('file2', size=1024 * 80)
|
||||||
output = self.cmd('create', '-v', '--list', '--pattern=R input', self.repository_location + '::test')
|
output = self.cmd('create', '-v', '--list', '--pattern=R input', self.repository_location + '::test')
|
||||||
|
@ -897,7 +899,7 @@ class ArchiverTestCase(ArchiverTestCaseBase):
|
||||||
|
|
||||||
def test_create_pattern(self):
|
def test_create_pattern(self):
|
||||||
"""test file patterns during create"""
|
"""test file patterns during create"""
|
||||||
self.cmd('init', self.repository_location)
|
self.cmd('init', '--encryption=repokey', self.repository_location)
|
||||||
self.create_regular_file('file1', size=1024 * 80)
|
self.create_regular_file('file1', size=1024 * 80)
|
||||||
self.create_regular_file('file2', size=1024 * 80)
|
self.create_regular_file('file2', size=1024 * 80)
|
||||||
self.create_regular_file('file_important', size=1024 * 80)
|
self.create_regular_file('file_important', size=1024 * 80)
|
||||||
|
@ -910,7 +912,7 @@ class ArchiverTestCase(ArchiverTestCaseBase):
|
||||||
self.assert_in('x input/file2', output)
|
self.assert_in('x input/file2', output)
|
||||||
|
|
||||||
def test_extract_pattern_opt(self):
|
def test_extract_pattern_opt(self):
|
||||||
self.cmd('init', self.repository_location)
|
self.cmd('init', '--encryption=repokey', self.repository_location)
|
||||||
self.create_regular_file('file1', size=1024 * 80)
|
self.create_regular_file('file1', size=1024 * 80)
|
||||||
self.create_regular_file('file2', size=1024 * 80)
|
self.create_regular_file('file2', size=1024 * 80)
|
||||||
self.create_regular_file('file_important', size=1024 * 80)
|
self.create_regular_file('file_important', size=1024 * 80)
|
||||||
|
@ -921,9 +923,6 @@ class ArchiverTestCase(ArchiverTestCaseBase):
|
||||||
self.repository_location + '::test')
|
self.repository_location + '::test')
|
||||||
self.assert_equal(sorted(os.listdir('output/input')), ['file_important'])
|
self.assert_equal(sorted(os.listdir('output/input')), ['file_important'])
|
||||||
|
|
||||||
def test_exclude_caches(self):
|
|
||||||
self.cmd('init', self.repository_location)
|
|
||||||
|
|
||||||
def _assert_test_caches(self):
|
def _assert_test_caches(self):
|
||||||
with changedir('output'):
|
with changedir('output'):
|
||||||
self.cmd('extract', self.repository_location + '::test')
|
self.cmd('extract', self.repository_location + '::test')
|
||||||
|
@ -1516,12 +1515,8 @@ class ArchiverTestCase(ArchiverTestCaseBase):
|
||||||
self.cmd('break-lock', self.repository_location)
|
self.cmd('break-lock', self.repository_location)
|
||||||
|
|
||||||
def test_usage(self):
|
def test_usage(self):
|
||||||
if self.FORK_DEFAULT:
|
self.cmd()
|
||||||
self.cmd(exit_code=0)
|
self.cmd('-h')
|
||||||
self.cmd('-h', exit_code=0)
|
|
||||||
else:
|
|
||||||
self.assert_raises(SystemExit, lambda: self.cmd())
|
|
||||||
self.assert_raises(SystemExit, lambda: self.cmd('-h'))
|
|
||||||
|
|
||||||
def test_help(self):
|
def test_help(self):
|
||||||
assert 'Borg' in self.cmd('help')
|
assert 'Borg' in self.cmd('help')
|
||||||
|
@ -1777,6 +1772,9 @@ class ArchiverTestCase(ArchiverTestCaseBase):
|
||||||
self.cmd('init', '--encryption=repokey', self.repository_location, exit_code=1)
|
self.cmd('init', '--encryption=repokey', self.repository_location, exit_code=1)
|
||||||
assert not os.path.exists(self.repository_location)
|
assert not os.path.exists(self.repository_location)
|
||||||
|
|
||||||
|
def test_init_requires_encryption_option(self):
|
||||||
|
self.cmd('init', self.repository_location, exit_code=2)
|
||||||
|
|
||||||
def check_cache(self):
|
def check_cache(self):
|
||||||
# First run a regular borg check
|
# First run a regular borg check
|
||||||
self.cmd('check', self.repository_location)
|
self.cmd('check', self.repository_location)
|
||||||
|
@ -2476,10 +2474,10 @@ class RemoteArchiverTestCase(ArchiverTestCase):
|
||||||
path_prefix = os.path.dirname(self.repository_path)
|
path_prefix = os.path.dirname(self.repository_path)
|
||||||
# restrict to repo directory's parent directory:
|
# restrict to repo directory's parent directory:
|
||||||
with patch.object(RemoteRepository, 'extra_test_args', ['--restrict-to-path', path_prefix]):
|
with patch.object(RemoteRepository, 'extra_test_args', ['--restrict-to-path', path_prefix]):
|
||||||
self.cmd('init', self.repository_location + '_2')
|
self.cmd('init', '--encryption=repokey', self.repository_location + '_2')
|
||||||
# restrict to repo directory's parent directory and another directory:
|
# restrict to repo directory's parent directory and another directory:
|
||||||
with patch.object(RemoteRepository, 'extra_test_args', ['--restrict-to-path', '/foo', '--restrict-to-path', path_prefix]):
|
with patch.object(RemoteRepository, 'extra_test_args', ['--restrict-to-path', '/foo', '--restrict-to-path', path_prefix]):
|
||||||
self.cmd('init', self.repository_location + '_3')
|
self.cmd('init', '--encryption=repokey', self.repository_location + '_3')
|
||||||
|
|
||||||
@unittest.skip('only works locally')
|
@unittest.skip('only works locally')
|
||||||
def test_debug_put_get_delete_obj(self):
|
def test_debug_put_get_delete_obj(self):
|
||||||
|
@ -2682,7 +2680,7 @@ def test_get_args():
|
||||||
assert args.restrict_to_paths == ['/p1', '/p2']
|
assert args.restrict_to_paths == ['/p1', '/p2']
|
||||||
# trying to cheat - try to execute different subcommand
|
# trying to cheat - try to execute different subcommand
|
||||||
args = archiver.get_args(['borg', 'serve', '--restrict-to-path=/p1', '--restrict-to-path=/p2', ],
|
args = archiver.get_args(['borg', 'serve', '--restrict-to-path=/p1', '--restrict-to-path=/p2', ],
|
||||||
'borg init /')
|
'borg init --encryption=repokey /')
|
||||||
assert args.func == archiver.do_serve
|
assert args.func == archiver.do_serve
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue