mirror of
https://github.com/borgmatic-collective/borgmatic.git
synced 2026-08-06 16:23:00 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ca80a54d8 | ||
|
|
5c0b17ef39 | ||
|
|
1697d8aaef |
@@ -1,3 +1,10 @@
|
|||||||
|
1.2.11
|
||||||
|
* #108: Support for Borg create --progress via borgmatic command-line flag.
|
||||||
|
|
||||||
|
1.2.10
|
||||||
|
* #105: Support for Borg --chunker-params create option via "chunker_params" in borgmatic's storage
|
||||||
|
section.
|
||||||
|
|
||||||
1.2.9
|
1.2.9
|
||||||
* #102: Fix for syntax error that occurred in Python 3.5 and below.
|
* #102: Fix for syntax error that occurred in Python 3.5 and below.
|
||||||
* Make automated tests support running in Python 3.5.
|
* Make automated tests support running in Python 3.5.
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ def create_archive(
|
|||||||
storage_config,
|
storage_config,
|
||||||
local_path='borg',
|
local_path='borg',
|
||||||
remote_path=None,
|
remote_path=None,
|
||||||
|
progress=False,
|
||||||
json=False,
|
json=False,
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
@@ -115,6 +116,7 @@ def create_archive(
|
|||||||
pattern_file = _write_pattern_file(location_config.get('patterns'))
|
pattern_file = _write_pattern_file(location_config.get('patterns'))
|
||||||
exclude_file = _write_pattern_file(_expand_directories(location_config.get('exclude_patterns')))
|
exclude_file = _write_pattern_file(_expand_directories(location_config.get('exclude_patterns')))
|
||||||
checkpoint_interval = storage_config.get('checkpoint_interval', None)
|
checkpoint_interval = storage_config.get('checkpoint_interval', None)
|
||||||
|
chunker_params = storage_config.get('chunker_params', None)
|
||||||
compression = storage_config.get('compression', None)
|
compression = storage_config.get('compression', None)
|
||||||
remote_rate_limit = storage_config.get('remote_rate_limit', None)
|
remote_rate_limit = storage_config.get('remote_rate_limit', None)
|
||||||
umask = storage_config.get('umask', None)
|
umask = storage_config.get('umask', None)
|
||||||
@@ -135,6 +137,7 @@ def create_archive(
|
|||||||
+ _make_pattern_flags(location_config, pattern_file.name if pattern_file else None)
|
+ _make_pattern_flags(location_config, pattern_file.name if pattern_file else None)
|
||||||
+ _make_exclude_flags(location_config, exclude_file.name if exclude_file else None)
|
+ _make_exclude_flags(location_config, exclude_file.name if exclude_file else None)
|
||||||
+ (('--checkpoint-interval', str(checkpoint_interval)) if checkpoint_interval else ())
|
+ (('--checkpoint-interval', str(checkpoint_interval)) if checkpoint_interval else ())
|
||||||
|
+ (('--chunker-params', chunker_params) if chunker_params else ())
|
||||||
+ (('--compression', compression) if compression else ())
|
+ (('--compression', compression) if compression else ())
|
||||||
+ (('--remote-ratelimit', str(remote_rate_limit)) if remote_rate_limit else ())
|
+ (('--remote-ratelimit', str(remote_rate_limit)) if remote_rate_limit else ())
|
||||||
+ (('--one-file-system',) if location_config.get('one_file_system') else ())
|
+ (('--one-file-system',) if location_config.get('one_file_system') else ())
|
||||||
@@ -149,6 +152,7 @@ def create_archive(
|
|||||||
+ (('--stats',) if not dry_run and logger.isEnabledFor(logging.INFO) else ())
|
+ (('--stats',) if not dry_run and logger.isEnabledFor(logging.INFO) else ())
|
||||||
+ (('--debug', '--show-rc') if logger.isEnabledFor(logging.DEBUG) else ())
|
+ (('--debug', '--show-rc') if logger.isEnabledFor(logging.DEBUG) else ())
|
||||||
+ (('--dry-run',) if dry_run else ())
|
+ (('--dry-run',) if dry_run else ())
|
||||||
|
+ (('--progress',) if progress else ())
|
||||||
+ (('--json',) if json else ())
|
+ (('--json',) if json else ())
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -78,6 +78,13 @@ def parse_arguments(*arguments):
|
|||||||
action='store_true',
|
action='store_true',
|
||||||
help='Display summary information on archives',
|
help='Display summary information on archives',
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--progress',
|
||||||
|
dest='progress',
|
||||||
|
default=False,
|
||||||
|
action='store_true',
|
||||||
|
help='Display progress with --create option for each file as it is backed up',
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--json',
|
'--json',
|
||||||
dest='json',
|
dest='json',
|
||||||
@@ -103,6 +110,9 @@ def parse_arguments(*arguments):
|
|||||||
|
|
||||||
args = parser.parse_args(arguments)
|
args = parser.parse_args(arguments)
|
||||||
|
|
||||||
|
if args.progress and not args.create:
|
||||||
|
raise ValueError('The --progress option can only be used with the --create option')
|
||||||
|
|
||||||
if args.json and not (args.create or args.list or args.info):
|
if args.json and not (args.create or args.list or args.info):
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
'The --json option can only be used with the --create, --list, or --info options'
|
'The --json option can only be used with the --create, --list, or --info options'
|
||||||
@@ -212,6 +222,7 @@ def _run_commands_on_repository(
|
|||||||
storage,
|
storage,
|
||||||
local_path=local_path,
|
local_path=local_path,
|
||||||
remote_path=remote_path,
|
remote_path=remote_path,
|
||||||
|
progress=args.progress,
|
||||||
)
|
)
|
||||||
if args.check and checks.repository_enabled_for_checks(repository, consistency):
|
if args.check and checks.repository_enabled_for_checks(repository, consistency):
|
||||||
logger.info('{}: Running consistency checks'.format(repository))
|
logger.info('{}: Running consistency checks'.format(repository))
|
||||||
|
|||||||
@@ -138,6 +138,13 @@ map:
|
|||||||
https://borgbackup.readthedocs.io/en/stable/faq.html#if-a-backup-stops-mid-way-does-the-already-backed-up-data-stay-there
|
https://borgbackup.readthedocs.io/en/stable/faq.html#if-a-backup-stops-mid-way-does-the-already-backed-up-data-stay-there
|
||||||
for details. Defaults to checkpoints every 1800 seconds (30 minutes).
|
for details. Defaults to checkpoints every 1800 seconds (30 minutes).
|
||||||
example: 1800
|
example: 1800
|
||||||
|
chunker_params:
|
||||||
|
type: scalar
|
||||||
|
desc: |
|
||||||
|
Specify the parameters passed to then chunker (CHUNK_MIN_EXP, CHUNK_MAX_EXP,
|
||||||
|
HASH_MASK_BITS, HASH_WINDOW_SIZE). See https://borgbackup.readthedocs.io/en/stable/internals.html
|
||||||
|
for details.
|
||||||
|
example: 19,23,21,4095
|
||||||
compression:
|
compression:
|
||||||
type: scalar
|
type: scalar
|
||||||
desc: |
|
desc: |
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ for sub_command in prune create check list info; do
|
|||||||
| grep -v '^--list$' \
|
| grep -v '^--list$' \
|
||||||
| grep -v '^--nobsdflags$' \
|
| grep -v '^--nobsdflags$' \
|
||||||
| grep -v '^--pattern$' \
|
| grep -v '^--pattern$' \
|
||||||
|
| grep -v '^--progress$' \
|
||||||
| grep -v '^--read-special$' \
|
| grep -v '^--read-special$' \
|
||||||
| grep -v '^--repository-only$' \
|
| grep -v '^--repository-only$' \
|
||||||
| grep -v '^--show-rc$' \
|
| grep -v '^--show-rc$' \
|
||||||
|
|||||||
+1
-1
@@ -29,7 +29,7 @@ twine upload -r pypi dist/borgmatic-*-py3-none-any.whl
|
|||||||
# Set release changelogs on projects.evoworx.org and GitHub.
|
# Set release changelogs on projects.evoworx.org and GitHub.
|
||||||
release_changelog="$(cat NEWS | sed '/^$/q' | grep -v '^\S')"
|
release_changelog="$(cat NEWS | sed '/^$/q' | grep -v '^\S')"
|
||||||
escaped_release_changelog="$(echo "$release_changelog" | sed -z 's/\n/\\n/g' | sed -z 's/\"/\\"/g')"
|
escaped_release_changelog="$(echo "$release_changelog" | sed -z 's/\n/\\n/g' | sed -z 's/\"/\\"/g')"
|
||||||
curl --request POST \
|
curl --silent --request POST \
|
||||||
"https://projects.torsion.org/api/v1/repos/witten/borgmatic/releases?access_token=$projects_token" \
|
"https://projects.torsion.org/api/v1/repos/witten/borgmatic/releases?access_token=$projects_token" \
|
||||||
--header "Accept: application/json" \
|
--header "Accept: application/json" \
|
||||||
--header "Content-Type: application/json" \
|
--header "Content-Type: application/json" \
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from setuptools import setup, find_packages
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
|
|
||||||
VERSION = '1.2.9'
|
VERSION = '1.2.11'
|
||||||
|
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
|
|||||||
@@ -390,6 +390,25 @@ def test_create_archive_with_checkpoint_interval_calls_borg_with_checkpoint_inte
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_archive_with_chunker_params_calls_borg_with_chunker_params_parameters():
|
||||||
|
flexmock(module).should_receive('_expand_directories').and_return(('foo', 'bar')).and_return(())
|
||||||
|
flexmock(module).should_receive('_write_pattern_file').and_return(None)
|
||||||
|
flexmock(module).should_receive('_make_pattern_flags').and_return(())
|
||||||
|
flexmock(module).should_receive('_make_exclude_flags').and_return(())
|
||||||
|
insert_subprocess_mock(CREATE_COMMAND + ('--chunker-params', '1,2,3,4'))
|
||||||
|
|
||||||
|
module.create_archive(
|
||||||
|
dry_run=False,
|
||||||
|
repository='repo',
|
||||||
|
location_config={
|
||||||
|
'source_directories': ['foo', 'bar'],
|
||||||
|
'repositories': ['repo'],
|
||||||
|
'exclude_patterns': None,
|
||||||
|
},
|
||||||
|
storage_config={'chunker_params': '1,2,3,4'},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_create_archive_with_compression_calls_borg_with_compression_parameters():
|
def test_create_archive_with_compression_calls_borg_with_compression_parameters():
|
||||||
flexmock(module).should_receive('_expand_directories').and_return(('foo', 'bar')).and_return(())
|
flexmock(module).should_receive('_expand_directories').and_return(('foo', 'bar')).and_return(())
|
||||||
flexmock(module).should_receive('_write_pattern_file').and_return(None)
|
flexmock(module).should_receive('_write_pattern_file').and_return(None)
|
||||||
|
|||||||
Reference in New Issue
Block a user