mirror of https://github.com/borgbackup/borg.git
Merge remote-tracking branch 'jdchristensen/prune-docs-info'
This commit is contained in:
commit
1b42da1fa5
|
@ -15,7 +15,7 @@ from attic.key import key_creator
|
||||||
from attic.helpers import Error, location_validator, format_time, \
|
from attic.helpers import Error, location_validator, format_time, \
|
||||||
format_file_mode, ExcludePattern, exclude_path, adjust_patterns, to_localtime, \
|
format_file_mode, ExcludePattern, exclude_path, adjust_patterns, to_localtime, \
|
||||||
get_cache_dir, get_keys_dir, format_timedelta, prune_within, prune_split, \
|
get_cache_dir, get_keys_dir, format_timedelta, prune_within, prune_split, \
|
||||||
Manifest, remove_surrogates, update_excludes
|
Manifest, remove_surrogates, update_excludes, format_archive
|
||||||
from attic.remote import RepositoryServer, RemoteRepository
|
from attic.remote import RepositoryServer, RemoteRepository
|
||||||
|
|
||||||
|
|
||||||
|
@ -278,7 +278,7 @@ Type "Yes I am sure" if you understand this and want to continue.\n""")
|
||||||
remove_surrogates(item[b'path']), extra))
|
remove_surrogates(item[b'path']), extra))
|
||||||
else:
|
else:
|
||||||
for archive in sorted(Archive.list_archives(repository, key, manifest), key=attrgetter('ts')):
|
for archive in sorted(Archive.list_archives(repository, key, manifest), key=attrgetter('ts')):
|
||||||
print('%-20s %s' % (archive.metadata[b'name'], to_localtime(archive.ts).strftime('%c')))
|
print(format_archive(archive))
|
||||||
return self.exit_code
|
return self.exit_code
|
||||||
|
|
||||||
def do_info(self, args):
|
def do_info(self, args):
|
||||||
|
@ -330,12 +330,12 @@ Type "Yes I am sure" if you understand this and want to continue.\n""")
|
||||||
to_delete = [a for a in archives if a not in keep]
|
to_delete = [a for a in archives if a not in keep]
|
||||||
|
|
||||||
for archive in keep:
|
for archive in keep:
|
||||||
self.print_verbose('Keeping archive "%s"' % archive.name)
|
self.print_verbose('Keeping archive: %s' % format_archive(archive))
|
||||||
for archive in to_delete:
|
for archive in to_delete:
|
||||||
if args.dry_run:
|
if args.dry_run:
|
||||||
self.print_verbose('Would prune "%s"' % archive.name)
|
self.print_verbose('Would prune: %s' % format_archive(archive))
|
||||||
else:
|
else:
|
||||||
self.print_verbose('Pruning archive "%s"' % archive.name)
|
self.print_verbose('Pruning archive: %s' % format_archive(archive))
|
||||||
archive.delete(cache)
|
archive.delete(cache)
|
||||||
return self.exit_code
|
return self.exit_code
|
||||||
|
|
||||||
|
@ -549,11 +549,12 @@ Type "Yes I am sure" if you understand this and want to continue.\n""")
|
||||||
backups. As an example, "-d 7" means to keep the latest backup on each day
|
backups. As an example, "-d 7" means to keep the latest backup on each day
|
||||||
for 7 days. Days without backups do not count towards the total. The rules
|
for 7 days. Days without backups do not count towards the total. The rules
|
||||||
are applied from hourly to yearly, and backups selected by previous rules do
|
are applied from hourly to yearly, and backups selected by previous rules do
|
||||||
not count towards those of later rules. Dates and times are interpreted in
|
not count towards those of later rules. The time that each backup completes
|
||||||
|
is used for pruning purposes. Dates and times are interpreted in
|
||||||
the local timezone, and weeks go from Monday to Sunday. Specifying a
|
the local timezone, and weeks go from Monday to Sunday. Specifying a
|
||||||
negative number of archives to keep means that there is no limit.
|
negative number of archives to keep means that there is no limit.
|
||||||
The "--within" option takes an argument of the form "<int><char>",
|
The "--keep-within" option takes an argument of the form "<int><char>",
|
||||||
where char is "H", "d", "w", "m", "y". For example, "--within 2d" means
|
where char is "H", "d", "w", "m", "y". For example, "--keep-within 2d" means
|
||||||
to keep all archives that were created within the past 48 hours.
|
to keep all archives that were created within the past 48 hours.
|
||||||
"1m" is taken to mean "31d". The archives kept with this option do not
|
"1m" is taken to mean "31d". The archives kept with this option do not
|
||||||
count towards the totals specified by any other options. If a
|
count towards the totals specified by any other options. If a
|
||||||
|
|
|
@ -288,6 +288,10 @@ def format_file_size(v):
|
||||||
return '%d B' % v
|
return '%d B' % v
|
||||||
|
|
||||||
|
|
||||||
|
def format_archive(archive):
|
||||||
|
return '%-36s %s' % (archive.name, to_localtime(archive.ts).strftime('%c'))
|
||||||
|
|
||||||
|
|
||||||
class IntegrityError(Error):
|
class IntegrityError(Error):
|
||||||
"""Data integrity error"""
|
"""Data integrity error"""
|
||||||
|
|
||||||
|
|
|
@ -131,15 +131,19 @@ Examples
|
||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
::
|
::
|
||||||
|
|
||||||
# Keep 7 end of day and 4 additional end of week archives
|
# Keep 7 end of day and 4 additional end of week archives:
|
||||||
$ attic prune /data/myrepo --daily=7 --weekly=4
|
$ attic prune /data/myrepo --keep-daily=7 --keep-weekly=4
|
||||||
|
|
||||||
# Same as above but only apply to archive names starting with "foo"
|
# Same as above but only apply to archive names starting with "foo":
|
||||||
$ attic prune /data/myrepo --daily=7 --weekly=4 --prefix=foo
|
$ attic prune /data/myrepo --keep-daily=7 --keep-weekly=4 --prefix=foo
|
||||||
|
|
||||||
# Keep 7 end of day, 4 additional end of week archives, and an
|
# Keep 7 end of day, 4 additional end of week archives,
|
||||||
# end of month archive for every month:
|
# and an end of month archive for every month:
|
||||||
$ attic prune /data/myrepo --daily=7 --weekly=4 --monthly=-1
|
$ attic prune /data/myrepo --keep-daily=7 --keep-weekly=4 --monthly=-1
|
||||||
|
|
||||||
|
# Keep all backups in the last 10 days, 4 additional end of week archives,
|
||||||
|
# and an end of month archive for every month:
|
||||||
|
$ attic prune /data/myrepo --keep-within=10d --keep-weekly=4 --monthly=-1
|
||||||
|
|
||||||
|
|
||||||
.. include:: usage/info.rst.inc
|
.. include:: usage/info.rst.inc
|
||||||
|
|
Loading…
Reference in New Issue