mirror of
https://github.com/borgbackup/borg.git
synced 2025-01-01 04:37:34 +00:00
delete: support naming multiple archives (#3017)
(cherry picked from commit 7c5a9d89b2
)
This commit is contained in:
parent
cd107c6fd2
commit
ecc5ceec07
2 changed files with 24 additions and 3 deletions
|
@ -1183,7 +1183,12 @@ def do_rename(self, args, repository, manifest, key, cache, archive):
|
|||
@with_repository(exclusive=True, manifest=False)
|
||||
def do_delete(self, args, repository):
|
||||
"""Delete an existing repository or archives"""
|
||||
if any((args.location.archive, args.first, args.last, args.prefix, args.glob_archives)):
|
||||
archive_filter_specified = args.first or args.last or args.prefix or args.glob_archives
|
||||
explicit_archives_specified = args.location.archive or args.archives
|
||||
if archive_filter_specified and explicit_archives_specified:
|
||||
self.print_error('Mixing archive filters and explicitly named archives is not supported.')
|
||||
return self.exit_code
|
||||
if archive_filter_specified or explicit_archives_specified:
|
||||
return self._delete_archives(args, repository)
|
||||
else:
|
||||
return self._delete_repository(args, repository)
|
||||
|
@ -1192,8 +1197,11 @@ def _delete_archives(self, args, repository):
|
|||
"""Delete archives"""
|
||||
manifest, key = Manifest.load(repository, (Manifest.Operation.DELETE,))
|
||||
|
||||
if args.location.archive:
|
||||
archive_names = (args.location.archive,)
|
||||
if args.location.archive or args.archives:
|
||||
archives = list(args.archives)
|
||||
if args.location.archive:
|
||||
archives.insert(0, args.location.archive)
|
||||
archive_names = tuple(archives)
|
||||
else:
|
||||
archive_names = tuple(x.name for x in manifest.archives.list_considering(args))
|
||||
if not archive_names:
|
||||
|
@ -3096,6 +3104,8 @@ def define_archive_filters_group(subparser, *, sort_by=True, first_last=True):
|
|||
subparser.add_argument('location', metavar='TARGET', nargs='?', default='',
|
||||
type=location_validator(),
|
||||
help='archive or repository to delete')
|
||||
subparser.add_argument('archives', metavar='ARCHIVE', nargs='*',
|
||||
help='archives to delete')
|
||||
define_archive_filters_group(subparser)
|
||||
|
||||
list_epilog = process_epilog("""
|
||||
|
|
|
@ -1367,6 +1367,17 @@ def test_delete(self):
|
|||
with Repository(self.repository_path) as repository:
|
||||
self.assert_equal(len(repository), 1)
|
||||
|
||||
def test_delete_multiple(self):
|
||||
self.create_regular_file('file1', size=1024 * 80)
|
||||
self.cmd('init', '--encryption=repokey', self.repository_location)
|
||||
self.cmd('create', self.repository_location + '::test1', 'input')
|
||||
self.cmd('create', self.repository_location + '::test2', 'input')
|
||||
self.cmd('create', self.repository_location + '::test3', 'input')
|
||||
self.cmd('delete', self.repository_location + '::test1', 'test2')
|
||||
self.cmd('extract', '--dry-run', self.repository_location + '::test3')
|
||||
self.cmd('delete', self.repository_location, 'test3')
|
||||
assert not self.cmd('list', self.repository_location)
|
||||
|
||||
def test_delete_repo(self):
|
||||
self.create_regular_file('file1', size=1024 * 80)
|
||||
self.create_regular_file('dir2/file2', size=1024 * 80)
|
||||
|
|
Loading…
Reference in a new issue