mirror of
https://github.com/borgbackup/borg.git
synced 2025-02-23 14:41:43 +00:00
borg delete: implement --dry-run, fixes #3822
This commit is contained in:
parent
a88a3153ad
commit
ec4ccc0b6b
1 changed files with 37 additions and 19 deletions
|
@ -1230,6 +1230,8 @@ def do_delete(self, args, repository):
|
||||||
|
|
||||||
def _delete_archives(self, args, repository):
|
def _delete_archives(self, args, repository):
|
||||||
"""Delete archives"""
|
"""Delete archives"""
|
||||||
|
dry_run = args.dry_run
|
||||||
|
|
||||||
manifest, key = Manifest.load(repository, (Manifest.Operation.DELETE,))
|
manifest, key = Manifest.load(repository, (Manifest.Operation.DELETE,))
|
||||||
|
|
||||||
if args.location.archive or args.archives:
|
if args.location.archive or args.archives:
|
||||||
|
@ -1252,8 +1254,11 @@ def _delete_archives(self, args, repository):
|
||||||
logger.warning('Archive {} not found ({}/{}).'.format(archive_name, i, len(archive_names)))
|
logger.warning('Archive {} not found ({}/{}).'.format(archive_name, i, len(archive_names)))
|
||||||
else:
|
else:
|
||||||
deleted = True
|
deleted = True
|
||||||
logger.info('Deleted {} ({}/{}).'.format(archive_name, i, len(archive_names)))
|
msg = 'Would delete: {} ({}/{})' if dry_run else 'Deleted archive: {} ({}/{})'
|
||||||
if deleted:
|
logger.info(msg.format(archive_name, i, len(archive_names)))
|
||||||
|
if dry_run:
|
||||||
|
logger.info('Finished dry-run.')
|
||||||
|
elif deleted:
|
||||||
manifest.write()
|
manifest.write()
|
||||||
# note: might crash in compact() after committing the repo
|
# note: might crash in compact() after committing the repo
|
||||||
repository.commit()
|
repository.commit()
|
||||||
|
@ -1265,23 +1270,28 @@ def _delete_archives(self, args, repository):
|
||||||
stats = Statistics()
|
stats = Statistics()
|
||||||
with Cache(repository, key, manifest, progress=args.progress, lock_wait=self.lock_wait) as cache:
|
with Cache(repository, key, manifest, progress=args.progress, lock_wait=self.lock_wait) as cache:
|
||||||
for i, archive_name in enumerate(archive_names, 1):
|
for i, archive_name in enumerate(archive_names, 1):
|
||||||
logger.info('Deleting archive: {} ({}/{})'.format(archive_name, i, len(archive_names)))
|
msg = 'Would delete archive: {} ({}/{})' if dry_run else 'Deleting archive: {} ({}/{})'
|
||||||
Archive(repository, key, manifest, archive_name, cache=cache).delete(
|
logger.info(msg.format(archive_name, i, len(archive_names)))
|
||||||
stats, progress=args.progress, forced=args.forced)
|
if not dry_run:
|
||||||
manifest.write()
|
Archive(repository, key, manifest, archive_name, cache=cache).delete(
|
||||||
repository.commit(save_space=args.save_space)
|
stats, progress=args.progress, forced=args.forced)
|
||||||
cache.commit()
|
if not dry_run:
|
||||||
if args.stats:
|
manifest.write()
|
||||||
log_multi(DASHES,
|
repository.commit(save_space=args.save_space)
|
||||||
STATS_HEADER,
|
cache.commit()
|
||||||
stats.summary.format(label='Deleted data:', stats=stats),
|
if args.stats:
|
||||||
str(cache),
|
log_multi(DASHES,
|
||||||
DASHES, logger=logging.getLogger('borg.output.stats'))
|
STATS_HEADER,
|
||||||
|
stats.summary.format(label='Deleted data:', stats=stats),
|
||||||
|
str(cache),
|
||||||
|
DASHES, logger=logging.getLogger('borg.output.stats'))
|
||||||
|
|
||||||
return self.exit_code
|
return self.exit_code
|
||||||
|
|
||||||
def _delete_repository(self, args, repository):
|
def _delete_repository(self, args, repository):
|
||||||
"""Delete a repository"""
|
"""Delete a repository"""
|
||||||
|
dry_run = args.dry_run
|
||||||
|
|
||||||
if not args.cache_only:
|
if not args.cache_only:
|
||||||
msg = []
|
msg = []
|
||||||
try:
|
try:
|
||||||
|
@ -1302,11 +1312,17 @@ def _delete_repository(self, args, repository):
|
||||||
retry=False, env_var_override='BORG_DELETE_I_KNOW_WHAT_I_AM_DOING'):
|
retry=False, env_var_override='BORG_DELETE_I_KNOW_WHAT_I_AM_DOING'):
|
||||||
self.exit_code = EXIT_ERROR
|
self.exit_code = EXIT_ERROR
|
||||||
return self.exit_code
|
return self.exit_code
|
||||||
repository.destroy()
|
if not dry_run:
|
||||||
logger.info("Repository deleted.")
|
repository.destroy()
|
||||||
SecurityManager.destroy(repository)
|
logger.info("Repository deleted.")
|
||||||
Cache.destroy(repository)
|
SecurityManager.destroy(repository)
|
||||||
logger.info("Cache deleted.")
|
else:
|
||||||
|
logger.info("Would delete repository.")
|
||||||
|
if not dry_run:
|
||||||
|
Cache.destroy(repository)
|
||||||
|
logger.info("Cache deleted.")
|
||||||
|
else:
|
||||||
|
logger.info("Would delete cache.")
|
||||||
return self.exit_code
|
return self.exit_code
|
||||||
|
|
||||||
def do_mount(self, args):
|
def do_mount(self, args):
|
||||||
|
@ -3374,6 +3390,8 @@ def define_archive_filters_group(subparser, *, sort_by=True, first_last=True):
|
||||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
help='delete archive')
|
help='delete archive')
|
||||||
subparser.set_defaults(func=self.do_delete)
|
subparser.set_defaults(func=self.do_delete)
|
||||||
|
subparser.add_argument('-n', '--dry-run', dest='dry_run', action='store_true',
|
||||||
|
help='do not change repository')
|
||||||
subparser.add_argument('-s', '--stats', dest='stats', action='store_true',
|
subparser.add_argument('-s', '--stats', dest='stats', action='store_true',
|
||||||
help='print statistics for the deleted archive')
|
help='print statistics for the deleted archive')
|
||||||
subparser.add_argument('--cache-only', dest='cache_only', action='store_true',
|
subparser.add_argument('--cache-only', dest='cache_only', action='store_true',
|
||||||
|
|
Loading…
Reference in a new issue