./sysutils/py-borgbackup, Deduplicating backup program with compression and encryption

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ] [ Add to tracker ]


Branch: CURRENT, Version: 1.2.2, Package name: py310-borgbackup-1.2.2, Maintainer: bsiegert

BorgBackup (short: Borg) is a deduplicating backup program. Optionally,
it supports compression and authenticated encryption.

The main goal of Borg is to provide an efficient and secure way to
backup data. The data deduplication technique used makes Borg suitable
for daily backups since only changes are stored. The authenticated
encryption technique makes it suitable for backups to not fully trusted
targets.


Required to run:
[security/openssl] [devel/py-setuptools] [devel/py-cython] [archivers/lz4] [archivers/zstd] [lang/python37] [security/libb2]

Required to build:
[pkgtools/cwrappers] [devel/py-setuptools_scm]

Master sites:

Filesize: 3948.227 KB

Version history: (Expand)


CVS history: (Expand)


   2022-08-22 13:10:13 by Thomas Klausner | Files touched by this commit (2) | Package updated
Log message:
py-borgbackup: update to 1.2.2.

Version 1.2.2 (2022-08-20)
--------------------------

Compatibility notes:

- matching of path patterns has been aligned with borg storing relative paths.
  Borg archives file paths without leading slashes. Previously, include/exclude
  patterns could contain leading slashes. You should check your patterns and
  remove leading slashes.
- dropped support / testing for older Pythons, minimum requirement is 3.8.
  In case your OS does not provide Python >= 3.8, consider using our binary,
  which does not need an external Python interpreter. Or continue using
  borg 1.1.x, which is still supported.
- freeing repository space only happens when "borg compact" is invoked.
- mount: the default for --numeric-ids is False now (same as borg extract)
- borg create --noatime is deprecated. Not storing atime is the default behaviour
  now (use --atime if you want to store the atime).
- --prefix is deprecated, use -a / --glob-archives, see #6806
- list: corrected mix-up of "isomtime" and "mtime" formats.
  Previously, "isomtime" was the default but produced a verbose human \ 
format,
  while "mtime" produced a ISO-8601-like format.
  The behaviours have been swapped (so "mtime" is human, \ 
"isomtime" is ISO-like),
  and the default is now "mtime".
  "isomtime" is now a real ISO-8601 format ("T" between date \ 
and time, not a space).
- create/recreate --list: file status for all files used to get announced *AFTER*
  the file (with borg < 1.2). Now, file status is announced *BEFORE* the file
  contents are processed. If the file status changes later (e.g. due to an error
  or a content change), the updated/final file status will be printed again.
- removed deprecated-since-long stuff (deprecated since):

  - command "borg change-passphrase" (2017-02), use "borg key \ 
..."
  - option "--keep-tag-files" (2017-01), use \ 
"--keep-exclude-tags"
  - option "--list-format" (2017-10), use "--format"
  - option "--ignore-inode" (2017-09), use "--files-cache" \ 
w/o "inode"
  - option "--no-files-cache" (2017-09), use \ 
"--files-cache=disabled"
- removed BORG_HOSTNAME_IS_UNIQUE env var.
  to use borg you must implement one of these 2 scenarios:

  - 1) the combination of FQDN and result of uuid.getnode() must be unique
       and stable (this should be the case for almost everybody, except when
       having duplicate FQDN *and* MAC address or all-zero MAC address)
  - 2) if you are aware that 1) is not the case for you, you must set
       BORG_HOST_ID env var to something unique.
- exit with 128 + signal number, #5161.
  if you have scripts expecting rc == 2 for a signal exit, you need to update
  them to check for >= 128.

New features:

- prune/delete --checkpoint-interval=1800 and ctrl-c/SIGINT support, #6284

Fixes:

- SaveFile: use a custom mkstemp with mode support, #6933, #6400, #6786.
  This fixes umask/mode/ACL issues (and also "chmod not supported" \ 
exceptions
  seen in 1.2.1) of files updated using SaveFile, e.g. the repo config.
- hashindex_compact: fix eval order (check idx before use), #5899
- create --paths-from-(stdin|command): normalize paths, #6778
- secure_erase: avoid collateral damage, #6768.
  If a hardlink copy of a repo was made and a new repo config shall be saved,
  do NOT fill in random garbage before deleting the previous repo config,
  because that would damage the hardlink copy.
- list: fix {flags:<WIDTH>} formatting, #6081
- check: try harder to create the key, #5719
- misc commands: ctrl-c must not kill other subprocesses, #6912

  - borg create with a remote repo via ssh
  - borg create --content-from-command
  - borg create --paths-from-command
  - (de)compression filter process of import-tar / export-tar

Other changes:

- deprecate --prefix, use -a / --glob-archives, see #6806
- make setuptools happy ("package would be ignored"), #6874
- fix pyproject.toml to create a fixed _version.py file, compatible with both
  old and new setuptools_scm version, #6875
- automate asciinema screencasts
- CI: test on macOS 12 without fuse / fuse tests
  (too troublesome on github CI due to kernel extensions needed by macFUSE)
- tests: fix test_obfuscate byte accounting
- repository: add debug logging for issue #6687
- _chunker.c: fix warnings on macOS
- requirements.lock.txt: use the latest cython 0.29.32
- docs:

  - add info on man page installation, #6894
  - update archive_progress json description about "finished", #6570
  - json progress_percent: some values are optional, #4074
  - FAQ: full quota / full disk, #5960
  - correct shell syntax for installation using git
   2022-07-03 14:49:52 by Thomas Klausner | Files touched by this commit (2) | Package updated
Log message:
py-borgbackup: update to 1.2.1.

Version 1.2.1 (2022-06-06)
--------------------------

Upgrade notes:

Some things can be recommended for the upgrade process from borg 1.1.x
(please also read the important compatibility notes below):

- do you already want to upgrade? 1.1.x also will get fixes for a while.
- be careful, first upgrade your less critical / smaller repos.
- first upgrade to a recent 1.1.x release - especially if you run some older
  1.1.* or even 1.0.* borg release.
- using that, run at least one `borg create` (your normal backup), `prune`
  and especially a `check` to see everything is in a good state.
- check the output of `borg check` - if there is anything special, consider
  a `borg check --repair` followed by another `borg check`.
- if everything is fine so far (borg check reports no issues), you can consider
  upgrading to 1.2.x. if not, please first fix any already existing issue.
- if you want to play safer, first **create a backup of your borg repository**.
- upgrade to latest borg 1.2.x release (you could use the fat binary from
  github releases page)
- run `borg compact --cleanup-commits` to clean up a ton of 17 bytes long files
  in your repo caused by a borg 1.1 bug
- run `borg check` again (now with borg 1.2.x) and check if there is anything
  special.
- run `borg info` (with borg 1.2.x) to build the local pre12-meta cache (can
  take significant time, but after that it will be fast) - for more details
  see below.
- check the compatibility notes (see below) and adapt your scripts, if needed.
- if you run into any issues, please check the github issue tracker before
  posting new issues there or elsewhere.

If you follow this procedure, you can help avoiding that we get a lot of
"borg 1.2" issue reports that are not really 1.2 issues, but existed before
and maybe just were not noticed.

Compatibility notes:

- matching of path patterns has been aligned with borg storing relative paths.
  Borg archives file paths without leading slashes. Previously, include/exclude
  patterns could contain leading slashes. You should check your patterns and
  remove leading slashes.
- dropped support / testing for older Pythons, minimum requirement is 3.8.
  In case your OS does not provide Python >= 3.8, consider using our binary,
  which does not need an external Python interpreter. Or continue using
  borg 1.1.x, which is still supported.
- freeing repository space only happens when "borg compact" is invoked.
- mount: the default for --numeric-ids is False now (same as borg extract)
- borg create --noatime is deprecated. Not storing atime is the default behaviour
  now (use --atime if you want to store the atime).
- list: corrected mix-up of "isomtime" and "mtime" formats.
  Previously, "isomtime" was the default but produced a verbose human \ 
format,
  while "mtime" produced a ISO-8601-like format.
  The behaviours have been swapped (so "mtime" is human, \ 
"isomtime" is ISO-like),
  and the default is now "mtime".
  "isomtime" is now a real ISO-8601 format ("T" between date \ 
and time, not a space).
- create/recreate --list: file status for all files used to get announced *AFTER*
  the file (with borg < 1.2). Now, file status is announced *BEFORE* the file
  contents are processed. If the file status changes later (e.g. due to an error
  or a content change), the updated/final file status will be printed again.
- removed deprecated-since-long stuff (deprecated since):

  - command "borg change-passphrase" (2017-02), use "borg key \ 
..."
  - option "--keep-tag-files" (2017-01), use \ 
"--keep-exclude-tags"
  - option "--list-format" (2017-10), use "--format"
  - option "--ignore-inode" (2017-09), use "--files-cache" \ 
w/o "inode"
  - option "--no-files-cache" (2017-09), use \ 
"--files-cache=disabled"
- removed BORG_HOSTNAME_IS_UNIQUE env var.
  to use borg you must implement one of these 2 scenarios:

  - 1) the combination of FQDN and result of uuid.getnode() must be unique
       and stable (this should be the case for almost everybody, except when
       having duplicate FQDN *and* MAC address or all-zero MAC address)
  - 2) if you are aware that 1) is not the case for you, you must set
       BORG_HOST_ID env var to something unique.
- exit with 128 + signal number, #5161.
  if you have scripts expecting rc == 2 for a signal exit, you need to update
  them to check for >= 128.

Fixes:

- create: skip with warning if opening the parent dir of recursion root fails, #6374
- create: fix crash. metadata stream can produce all-zero chunks, #6587
- fix crash when computing stats, escape % chars in archive name, #6500
- fix transaction rollback: use files cache filename as found in txn.active/, #6353
- import-tar: kill filter process in case of borg exceptions, #6401 #6681
- import-tar: fix mtime type bug
- ensure_dir: respect umask for created directory modes, #6400
- SaveFile: respect umask for final file mode, #6400
- check archive: improve error handling for corrupt archive metadata block, make
  robust_iterator more robust, #4777
- pre12-meta cache: do not use the cache if want_unique is True, #6612
- fix scp-style repo url parsing for ip v6 address, #6526
- mount -o versions: give clear error msg instead of crashing.
  it does not make sense to request versions view if you only look at 1 archive,
  but the code shall not crash in that case as it did, but give a clear error msg.
- show_progress: add finished=true/false to archive_progress json, #6570
- delete/prune: fix --iec mode output (decimal vs. binary units), #6606
- info: fix authenticated mode repo to show "Encrypted: No", #6462
- diff: support presence change for blkdev, chrdev and fifo items, #6615

New features:

- delete: add repository id and location to prompt, #6453
- borg debug dump-repo-objs --ghost: new --segment=S --offset=O options

Other changes:

- support python 3.11
- allow msgpack 1.0.4, #6716
- load_key: no key is same as empty key, #6441
- give a more helpful error msg for unsupported key formats, #6561
- better error msg for defect or unsupported repo configs, #6566
- docs:

  - document borg 1.2 pattern matching behavior change, #6407
    Make clear that absolute paths always go into the matcher as if they are
    relative (without leading slash). Adapt all examples accordingly.
  - authentication primitives: improved security and performance infos
  - mention BORG_FILES_CACHE_SUFFIX as alternative to BORG_FILES_CACHE_TTL, #5602
  - FAQ: add a hint about --debug-topic=files_cache
  - improve borg check --max-duration description
  - fix values of TAG bytes, #6515
  - borg compact --cleanup-commits also runs a normal compaction, #6324
  - virtualization speed tips
  - recommend umask for passphrase file perms
  - borg 1.2 is security supported
  - update link to ubuntu packages, #6485
  - use --numeric-ids in pull mode docs
  - remove blake2 docs, blake2 code not bundled any more, #6371
  - clarify on-disk order and size of segment file log entry fields, #6357
  - docs building: do not transform --/--- to unicode dashes
- tests:

  - check that borg does not require pytest for normal usage, fixes #6563
  - fix OpenBSD symlink mode test failure, #2055
- vagrant:

  - darwin64: remove fakeroot, #6314
  - update development.lock.txt
  - use pyinstaller 4.10 and python 3.9.13 for binary build
  - upgrade VMCPUS and xdistn from 4 to 16, maybe this speeds up the tests
- crypto:

  - use hmac.compare_digest instead of ==, #6470
  - hmac_sha256: replace own cython wrapper code by hmac.digest python stdlib \ 
(since py38)
  - hmac and blake2b minor optimizations and cleanups
  - removed some unused crypto related code, #6472
  - avoid losing the key (potential use-after-free). this never could happen in
    1.2 due to the way we use the code. The issue was discovered in master after
    other changes, so we also "fixed" it here before it bites us.
- setup / build:

  - add pyproject.toml, fix sys.path, #6466
  - setuptools_scm: also require it via pyproject.toml
  - allow extra compiler flags for every extension build
  - fix misc. C / Cython compiler warnings, deprecation warnings
  - fix zstd.h include for bundled zstd, #6369
- source using python 3.8 features: ``pyupgrade --py38-plus ./**/*.py``
   2022-03-03 13:01:09 by Thomas Klausner | Files touched by this commit (3) | Package updated
Log message:
py-borgbackup: update to 1.2.0.

Version 1.2.0 (2022-02-22 22:02:22 :-)
--------------------------------------

Please note:

This is the first borg 1.2 release, so be careful and read the notes below.

Upgrade notes:

Strictly taken, nothing special is required for upgrading to 1.2, but some
things can be recommended:

- do you already want to upgrade? 1.1.x also will get fixes for a while.
- be careful, first upgrade your less critical / smaller repos.
- first upgrade to a recent 1.1.x release - especially if you run some older
  1.1.* or even 1.0.* borg release.
- using that, run at least one `borg create` (your normal backup), `prune`
  and especially a `check` to see everything is in a good state.
- check the output of `borg check` - if there is anything special, consider
  a `borg check --repair` followed by another `borg check`.
- if everything is fine so far (borg check reports no issues), you can consider
  upgrading to 1.2.0. if not, please first fix any already existing issue.
- if you want to play safer, first **create a backup of your borg repository**.
- upgrade to latest borg 1.2.x release (you could use the fat binary from
  github releases page)
- run `borg compact --cleanup-commits` to clean up a ton of 17 bytes long files
  in your repo caused by a borg 1.1 bug
- run `borg check` again (now with borg 1.2.x) and check if there is anything
  special.
- run `borg info` (with borg 1.2.x) to build the local pre12-meta cache (can
  take significant time, but after that it will be fast) - for more details
  see below.
- check the compatibility notes (see below) and adapt your scripts, if needed.
- if you run into any issues, please check the github issue tracker before
  posting new issues there or elsewhere.

If you follow this procedure, you can help avoiding that we get a lot of
"borg 1.2" issue reports that are not really 1.2 issues, but existed before
and maybe just were not noticed.

Compatibility notes:

- dropped support / testing for older Pythons, minimum requirement is 3.8.
  In case your OS does not provide Python >= 3.8, consider using our binary,
  which does not need an external Python interpreter. Or continue using
  borg 1.1.x, which is still supported.
- freeing repository space only happens when "borg compact" is invoked.
- mount: the default for --numeric-ids is False now (same as borg extract)
- borg create --noatime is deprecated. Not storing atime is the default behaviour
  now (use --atime if you want to store the atime).
- list: corrected mix-up of "isomtime" and "mtime" formats.
  Previously, "isomtime" was the default but produced a verbose human \ 
format,
  while "mtime" produced a ISO-8601-like format.
  The behaviours have been swapped (so "mtime" is human, \ 
"isomtime" is ISO-like),
  and the default is now "mtime".
  "isomtime" is now a real ISO-8601 format ("T" between date \ 
and time, not a space).
- create/recreate --list: file status for all files used to get announced *AFTER*
  the file (with borg < 1.2). Now, file status is announced *BEFORE* the file
  contents are processed. If the file status changes later (e.g. due to an error
  or a content change), the updated/final file status will be printed again.
- removed deprecated-since-long stuff (deprecated since):

  - command "borg change-passphrase" (2017-02), use "borg key \ 
..."
  - option "--keep-tag-files" (2017-01), use \ 
"--keep-exclude-tags"
  - option "--list-format" (2017-10), use "--format"
  - option "--ignore-inode" (2017-09), use "--files-cache" \ 
w/o "inode"
  - option "--no-files-cache" (2017-09), use \ 
"--files-cache=disabled"
- removed BORG_HOSTNAME_IS_UNIQUE env var.
  to use borg you must implement one of these 2 scenarios:

  - 1) the combination of FQDN and result of uuid.getnode() must be unique
       and stable (this should be the case for almost everybody, except when
       having duplicate FQDN *and* MAC address or all-zero MAC address)
  - 2) if you are aware that 1) is not the case for you, you must set
       BORG_HOST_ID env var to something unique.
- exit with 128 + signal number, #5161.
  if you have scripts expecting rc == 2 for a signal exit, you need to update
  them to check for >= 128.

Fixes:

- diff: reduce memory consumption, fix is_hardlink_master, #6295
- compact: fix / improve freeable / freed space log output

  - derive really freed space from quota use before/after, #5679
  - do not say "freeable", but "maybe freeable" (based on \ 
hint, unsure)
- fix race conditions in internal SaveFile function, #6306 #6028
- implement internal safe_unlink (was: truncate_and_unlink) function more safely:
  usually it does not truncate any more, only under "disk full" \ 
circumstances
  and only if there is only one hardlink.
  see: https://github.com/borgbackup/borg/discussions/6286

Other changes:

- info: use a pre12-meta cache to accelerate stats for borg < 1.2 archives.
  the first time borg info is invoked on a borg 1.1 repo, it can take a
  rather long time computing and caching some stats values for 1.1 archives,
  which borg 1.2 archives have in their archive metadata structure.
  be patient, esp. if you have lots of old archives.
  following invocations are much faster due to the cache.
  related change: add archive name to calc_stats progress display.
- docs:

  - add borg 1.2 upgrade notes, #6217
  - link to borg placeholders and borg patterns help
  - init: explain the encryption modes better
  - clarify usage of patternfile roots
  - put import-tar docs into same file as export-tar docs
  - explain the difference between a path that ends with or without a slash,
    #6297

Version 1.2.0rc1 (2022-02-05)
-----------------------------

Fixes:

- repo::archive location placeholder expansion fixes, #5826, #5998
- repository: fix intermediate commits, shall be at end of current segment
- delete: don't commit if nothing was deleted, avoid cache sync, #6060
- argument parsing: accept some options only once, #6026
- disallow overwriting of existing keyfiles on init, #6036
- if ensure_dir() fails, give more informative error message, #5952

New features:

- delete --force: do not ask when deleting a repo, #5941

Other changes:

- requirements: exclude broken or incompatible-with-pyinstaller setuptools
- add a requirements.d/development.lock.txt and use it for vagrant
- tests:

  - added nonce-related tests
  - refactor: remove assert_true
  - vagrant: macos box tuning, netbsd box fixes, #5370, #5922
- docs:

  - update install docs / requirements docs, #6180
  - borg mount / FUSE "versions" view is not experimental any more
  - --pattern* is not experimental any more, #6134
  - impact of deleting path/to/repo/nonce, #5858
  - key export: add examples, #6204
  - ~/.config/borg/keys is not used for repokey keys, #6107
  - excluded parent dir's metadata can't restore

Version 1.2.0b4 (2022-01-23)
----------------------------

Fixes:

- create: fix passing device nodes and symlinks to --paths-from-stdin, #6009
- create --dry-run: fix display of kept tagfile, #5834
- check --repair: fix missing parameter in "did not consistently fail" \ 
msg, #5822
- fix hardlinkable file type check, #6037
- list: remove placeholders for shake_* hashes, #6082
- prune: handle case of calling prune_split when there are no archives, #6015
- benchmark crud: make sure cleanup of borg-test-data files/dir happens, #5630
- do not show archive name in repository-related error msgs, #6014
- prettier error msg (no stacktrace) if exclude file is missing, #5734
- do not require BORG_CONFIG_DIR if BORG_{SECURITY,KEYS}_DIR are set, #5979
- fix pyinstaller detection for dir-mode, #5897
- atomically create the CACHE_TAG file, #6028
- deal with the SaveFile/SyncFile race, docs, see #6056 708a5853
- avoid expanding path into LHS of formatting operation + tests, #6064 #6063
- repository: quota / compactable computation fixes
- info: emit repo info even if repo has 0 archives + test, #6120

New features:

- check --repair: significantly speed up search for next valid object in \ 
segment, #6022
- check: add progress indicator for archive check, #5809
- create: add retry_erofs workaround for O_NOATIME issue on volume shadow copies \ 
in WSL1, #6024
- create: allow --files-cache=size (this is potentially dangerous, use on your \ 
own risk), #5686
- import-tar: implement import-tar to complement export-tar, #2233
- implement BORG_SELFTEST env variable (can be carefully used to speedup borg \ 
hosting), #5871
- key export: print key if path is '-' or not given, #6092
- list --format: Add command_line to format keys

Other changes:

- pypi metadata: alpha -> beta
- require python 3.8+, #5975
- use pyinstaller 4.7
- allow msgpack 1.0.3
- upgrade to bundled xxhash to 0.8.1
- import-tar / export-tar: tar file related changes:

  - check for short tarfile extensions
  - add .lz4 and .zstd
  - fix docs about extensions and decompression commands
- add github codeql analysis, #6148
- vagrant:

  - box updates / add new boxes / remove outdated and broken boxes
  - use Python 3.9.10 (incl. binary builds) and 3.10.0
  - fix pyenv initialisation, #5798
  - fix vagrant scp on macOS, #5921
  - use macfuse instead of osxfuse
- shell completions:

  - update shell completions to 1.1.17, #5923
  - remove BORG_LIBC completion, since 9914968 borg no longer uses find_library().
- docs:

  - fixed readme.rst irc webchat link (we use libera chat now, not freenode)
  - fix exceptions thrown by `setup.py build_man`
  - check --repair: recommend checking hw before check --repair, #5855
  - check --verify-data: clarify and document conflict with --repository-only, #5808
  - serve: improve ssh forced commands docs, #6083
  - list: improve docs for `borg list` --format, #6061
  - list: remove --list-format from borg list
  - FAQ: fix manifest-timestamp path (inside security dir)
  - fix the broken link to .nix file
  - document behavior for filesystems with inconsistent inodes, #5770
  - clarify user_id vs uid for fuse, #5723
  - clarify pattern usage with commands, #5176
  - clarify pp vs. pf pattern type, #5300
  - update referenced freebsd/macOS versions used for binary build, #5942
  - pull mode: add some warnings, #5827
  - clarify "you will need key and passphrase" borg init warning, #4622
  - add missing leading slashes in help patterns, #5857
  - add info on renaming repositories, #5240
  - check: add notice about defective hardware, #5753
  - mention tar --compare (compare archive to fs files), #5880
  - add note about grandfather-father-son backup retention policy / rotation \ 
scheme, #6006
  - permissions note rewritten to make it less confusing
  - create github security policy
  - remove leftovers of BORG_HOSTNAME_IS_UNIQUE
  - excluded parent dir's metadata can't restore. (#6062)
  - if parent dir is not extracted, we do not have its metadata
  - clarify who starts the remote agent

Version 1.2.0b3 (2021-05-12)
----------------------------

Fixes:

- create: fix --progress --log-json, #4360#issuecomment-774580052
- do not load files cache for commands not using it, #5673
- fix repeated cache tag file writing bug

New features:

- create/recreate: print preliminary file status early, #5417
- create/extract: add --noxattrs and --noacls options, #3955
- create: verbose files cache logging via --debug-topic=files_cache, #5659
- mount: implement --numeric-ids (default: False!), #2377
- diff: add --json-lines option
- info / create --stats: add --iec option to print sizes in powers of 1024.

Other changes:

- create: add --upload-(ratelimit|buffer), deprecate --remote-* options, #5611
- create/extract/mount: add --numeric-ids, deprecate --numeric-owner option, #5724
- config: accept non-int value for max_segment_size / storage_quota
- use PyInstaller v4.3, #5671
- vagrant: use Python 3.9.5 to build binaries
- tox.ini: modernize and enable execution without preinstalling deps
- cleanup code style checks
- get rid of distutils, use setuptools+packaging
- github CI: test on Python 3.10-dev
- check: missing / healed chunks: always tell chunk ID, #5704
- docs:

  - remove bad /var/cache exclusion in example commands, #5625
  - misc. fixes and improvements, esp. for macOS
  - add unsafe workaround to use an old repo copy, #5722

Version 1.2.0b2 (2021-02-06)
----------------------------

Fixes:

- create: do not recurse into duplicate roots, #5603
- create: only print stats if not ctrl-c'ed, fixes traceback, #5668
- extract:
  improve exception handling when setting xattrs, #5092.
  emit a warning message giving the path, xattr key and error message.
  continue trying to restore other xattrs and bsdflags of the same file
  after an exception with xattr-setting happened.
- export-tar:
  fix memory leak with ssh: remote repository, #5568.
  fix potential memory leak with ssh: remote repository with partial extraction.
- remove empty shadowed_segments lists, #5275
- fix bad default: manifest.archives.list(consider_checkpoints=False),
  fixes tracebacks / KeyErros for missing objects in ChunkIndex, #5668

New features:

- create: improve sparse file support

  - create --sparse (detect sparse file holes) and file map support,
    only for the "fixed" chunker, #14
  - detect all-zero chunks in read data in "buzhash" and \ 
"fixed" chunkers
  - cached_hash: use a small LRU cache to accelerate all-zero chunks hashing
  - use cached_hash also to generate all-zero replacement chunks
- create --remote-buffer, add a upload buffer for remote repos, #5574
- prune: keep oldest archive when retention target not met

Other changes:

- use blake2 from python 3.6+ hashlib
  (this removes the requirement for libb2 and the bundled blake2 code)
- also accept msgpack up to 1.0.2.
  exclude 1.0.1 though, which had some issues (not sure they affect borg).
- create: add repository location to --stats output, #5491
- check: debug log the segment filename
- delete: add a --list switch to borg delete, #5116
- borg debug dump-hints - implemented to e.g. to look at shadow_index
- Tab completion support for additional archives for 'borg delete'
- refactor: have one borg.constants.zero all-zero bytes object
- refactor shadow_index updating repo.put/delete, #5661, #5636.
- docs:

  - add another case of attempted hardlink usage
  - fix description of borg upgrade hardlink usage, #5518
  - use HTTPS everywhere
  - add examples for --paths-from-stdin, --paths-from-command, \ 
--paths-separator, #5644
  - fix typos/grammar
  - update docs for dev environment installation instructions
  - recomend running tests only on installed versions for setup
  - add badge with current status of package
- vagrant:

  - use brew install --cask ..., #5557
  - use Python 3.9.1 and PyInstaller 4.1 to build the borg binary

Version 1.2.0b1 (2020-12-06)
----------------------------

Fixes:

- BORG_CACHE_DIR crashing borg if empty, atomic handling of
  recursive directory creation, #5216
- fix --dry-run and --stats coexistence, #5415
- allow EIO with warning when trying to hardlink, #4336
- export-tar: set tar format to GNU_FORMAT explicitly, #5274
- use --timestamp for {utcnow} and {now} if given, #5189
- make timestamp helper timezone-aware

New features:

- create: implement --paths-from-stdin and --paths-from-command, see #5492.
  These switches read paths to archive from stdin. Delimiter can specified
  by --paths-delimiter=DELIM. Paths read will be added honoring every
  option but exclusion options and --one-file-system. borg won't recurse
  into directories.
- 'obfuscate' pseudo compressor obfuscates compressed chunk size in repo
- add pyfuse3 (successor of llfuse) as an alternative lowlevel fuse
  implementation to llfuse (deprecated), #5407.
  FUSE implementation can be switched via env var BORG_FUSE_IMPL.
- allow appending to the files cache filename with BORG_FILES_CACHE_SUFFIX
- create: implement --stdin-mode, --stdin-user and --stdin-group, #5333

Other changes:

- split recursive directory walking/processing into directory walking and
  item processing.
- fix warning by importing setuptools before distutils.
- debug info: include infos about FUSE implementation, #5546
- testing:

  - add a test for the hashindex corruption bug, #5531 #4829
  - move away from travis-ci, use github actions, #5528 #5467
  - test both on fuse2 and fuse3
  - upload coverage reports to codecov
  - fix spurious failure in test_cache_files, #5438
  - add tests for Location.with_timestamp
  - tox: add a non-fuse env to the envlist
- vagrant:

  - use python 3.7.latest and pyinstaller 4.0 for binary creation
  - pyinstaller: compute basepath from spec file location
  - vagrant: updates/fixes for archlinux box, #5543
- docs:

  - "filename with spaces" example added to exclude file, #5236
  - add a hint about sleeping computer, #5301
  - how to adjust macOS >= Catalina security settings, #5303
  - process/policy for adding new compression algorithms
  - updated docs about hacked backup client, #5480
  - improve ansible deployment docs, make it more generic
  - how to approach borg speed issues, give speed example, #5371
  - fix mathematical inaccuracy about chunk size, #5336
  - add example for excluding content using --pattern cli option
  - clarify borg create's '--one-file-system' option, #4009
  - improve docs/FAQ about append-only remote repos, #5497
  - fix reST markup issues, labels
  - add infos about contributor retirement status

Version 1.2.0a9 (2020-10-05)
----------------------------

Fixes:

- fix memory leak related to preloading, #5202
- check --repair: fix potential data loss, #5325
- persist shadow_index in between borg runs, #4830
- fix hardlinked CACHEDIR.TAG processing, #4911
- --read-special: .part files also should be regular files, #5217
- allow server side enforcing of umask, --umask is for the local borg
  process only (see docs), #4947
- exit with 128 + signal number, #5161
- borg config --list does not show last_segment_checked, #5159
- locking:

  - fix ExclusiveLock race condition bug, #4923
  - fix race condition in lock migration, #4953
  - fix locking on openindiana, #5271

New features:

- --content-from-command: create archive using stdout of given command, #5174
- allow key-import + BORG_KEY_FILE to create key files
- build directory-based binary for macOS to avoid Gatekeeper delays

Other changes:

- upgrade bundled zstd to 1.4.5
- upgrade bundled xxhash to 0.8.0, #5362
- if self test fails, also point to OS and hardware, #5334
- misc. shell completions fixes/updates, rewrite zsh completion
- prettier error message when archive gets too big, #5307
- stop relying on `false` exiting with status code 1
- rephrase some warnings, #5164
- parseformat: unnecessary calls removed, #5169
- testing:

  - enable Python3.9 env for test suite and VMs, #5373
  - drop python 3.5, #5344
  - misc. vagrant fixes/updates
  - misc. testing fixes, #5196
- docs:

  - add ssh-agent pull backup method to doc, #5288
  - mention double --force in prune docs
  - update Homebrew install instructions, #5185
  - better description of how cache and rebuilds of it work
    and how the workaround applies to that
  - point to borg create --list item flags in recreate usage, #5165
  - add a note to create from stdin regarding files cache, #5180
  - add security faq explaining AES-CTR crypto issues, #5254
  - clarify --exclude-if-present in recreate, #5193
  - add socat pull mode, #5150, #900
  - move content of resources doc page to community project, #2088
  - explain hash collision, #4884
  - clarify --recompress option, #5154

Version 1.2.0a8 (2020-04-22)
----------------------------

Fixes:

- fixed potential index corruption / data loss issue due to bug in \ 
hashindex_set, #4829.
  Please read and follow the more detailed notes close to the top of this document.
- fix crash when upgrading erroneous hints file, #4922
- commit-time free space calc: ignore bad compact map entries, #4796
- info: if the archive doesn't exist, print a pretty message, #4793
- --prefix / -P: fix processing, avoid argparse issue, #4769
- ignore EACCES (errno 13) when hardlinking, #4730
- add a try catch when formatting the info string, #4818
- check: do not stumble over invalid item key, #4845
- update prevalence of env vars to set config and cache paths
- mount: fix FUSE low linear read speed on large files, #5032
- extract: fix confusing output of borg extract --list --strip-components, #4934
- recreate: support --timestamp option, #4745
- fix ProgressIndicator msgids (JSON output), #4935
- fuse: set f_namemax in statfs result, #2684
- accept absolute paths on windows
- pyinstaller: work around issue with setuptools > 44

New features:

- chunker speedup (plus regression test)
- added --consider-checkpoints and related test, #4788
- added --noflags option, deprecate --nobsdflags option, #4489
- compact: add --threshold option, #4674
- mount: add birthtime to FUSE entries
- support platforms with no os.link, #4901 - if we don't have os.link,
  we just extract another copy instead of making a hardlink.
- move sync_file_range to its own extension for better platform compatibility.
- new --bypass-lock option to bypass locking, e.g. for read-only repos
- accept absolute paths by removing leading slashes in patterns of all
  sorts but re: style, #4029
- delete: new --keep-security-info option

Other changes:

- support msgpack 0.6.2 and 1.0.0, #5065
- upgrade bundled zstd to 1.4.4
- upgrade bundled lz4 to 1.9.2
- upgrade xxhash to 0.7.3
- require recent enough llfuse for birthtime support, #5064
- only store compressed data if the result actually is smaller, #4516
- check: improve error output for matching index size, see #4829
- ignore --stats when given with --dry-run, but continue, #4373
- replaced usage of os.statvfs with shutil.disk_usage (better cross-platform \ 
support).
- fuse: remove unneeded version check and compat code, micro opts
- docs:

  - improve description of path variables
  - document how to completely delete data, #2929
  - add FAQ about Borg config dir, #4941
  - add docs about errors not printed as JSON, #4073
  - update usage_general.rst.inc
  - added "Will move with BORG_CONFIG_DIR variable unless specified." \ 
to BORG_SECURITY_DIR info.
  - put BORG_SECURITY_DIR immediately below BORG_CONFIG_DIR (and moved \ 
BORG_CACHE_DIR up before them).
  - add paragraph regarding cache security assumptions, #4900
  - tell about borg cache security precautions
  - add FAQ describing difference between a local repo vs. repo on a server.
  - document how to test exclusion patterns without performing an actual backup
  - create: tell that "Calculating size" time and space needs are \ 
caused by --progress
  - fix/improve documentation for @api decorator, #4674
  - add a pull backup / push restore how-to, #1552
  - fix man pages creation, #4752
  - more general FAQ for backup and retain original paths, #4532
  - explain difference between --exclude and --pattern, #4118
  - add FAQ for preventing SSH timeout in extract, #3866
  - improve password FAQ (decrease pw length, add -w 0 option to base64 to \ 
prevent line wrap), #4591
  - add note about patterns and stored paths, #4160
  - add upgrade of tools to pip installation how-to, #5090
  - document one cause of orphaned chunks in check command, #2295
  - clean up the whole check usage paragraph
  - FAQ: linked recommended restrictions to ssh public keys on borg servers, #4946
  - fixed "doc downplays severity of Nonce reuse issue", #4883
  - borg repo restore instructions needed, #3428
  - new FAQ: A repo is corrupt and must be replaced with an older repo.
  - clarify borg init's encryption modes
- native windows port:

  - update README_WINDOWS.rst
  - updated pyinstaller spec file to support windows builds
- testing / CI:

  - improved travis config / install script, improved macOS builds
  - allow osx builds to fail, #4955
  - Windows 10 build on Appveyor CI
- vagrant:

  - upgrade pyinstaller to v3.5 + patch
  - use py369 for binary build, add py380 for tests
  - fix issue in stretch VM hanging at grub installation
  - add a debian buster and a ubuntu focal VM
  - update darwin box to 10.12
  - upgrade FreeBSD box to 12.1
  - fix debianoid virtualenv packages
  - use pyenv in freebsd64 VM
  - remove the flake8 test
  - darwin: avoid error if pkg is already installed
  - debianoid: don't interactively ask questions

Version 1.2.0a7 (2019-09-07)
----------------------------

Fixes:

- slave hardlinks extraction issue, see #4350
- extract: fix KeyError for "partial" extraction, #4607
- preload chunks for hardlink slaves w/o preloaded master, #4350
- fix preloading for old remote servers, #4652
- fix partial extract for hardlinked contentless file types, #4725
- Repository.open: use stat() to check for repo dir, #4695
- Repository.check_can_create_repository: use stat() to check, ~ #4695.
- SecurityManager.known(): check all files, #4614
- after double-force delete, warn about necessary repair, #4704
- cope with ANY error when importing pytest into borg.testsuite, #4652
- fix invalid archive error message
- setup.py: fix detection of missing Cython
- filter out selinux xattrs, #4574
- location arg - should it be optional? #4541
- enable placeholder usage in --comment, #4559
- use whitelist approach for borg serve, #4097

New features:

- minimal native Windows support, see windows readme (work in progress)
- create: first ctrl-c (SIGINT) triggers checkpoint and abort, #4606
- new BORG_WORKAROUNDS mechanism, basesyncfile, #4710
- remove WSL autodetection. if WSL still has this problem, you need to
  set BORG_WORKAROUNDS=basesyncfile in the borg process environment to
  work around it.
- support xxh64 checksum in addition to the hashlib hashes in borg list
- enable placeholder usage in all extra archive arguments
- enable placeholder usage in --comment, #4559
- enable placeholder usage in --glob-archives, #4495
- ability to use a system-provided version of "xxhash"
- create:

  - changed the default behaviour to not store the atime of fs items. atime is
    often rather not interesting and fragile - it easily changes even if nothing
    else has changed and, if stored into the archive, spoils deduplication of
    the archive metadata stream.
  - if you give the --noatime option, borg will output a deprecation warning
    because it is currently ignored / does nothing.
    Please remove the --noatime option when using borg 1.2.
  - added a --atime option for storing files' atime into an archive

Other changes:

- argparser: always use REPOSITORY in metavar
- do not check python/libc for borg serve, #4483
- small borg compact improvements, #4522
- compact: log freed space at INFO level
- tests:

  - tox / travis: add testing on py38-dev
  - fix broken test that relied on improper zlib assumptions
  - pure-py msgpack warning shall not make a lot of tests fail, #4558
  - rename test_mount_hardlinks to test_fuse_mount_hardlinks (master)
  - vagrant: add up-to-date openindiana box (py35, openssl10)
  - get rid of confusing coverage warning, #2069
- docs:

  - reiterate that 'file cache names are absolute' in FAQ,
    mention bind mount solution, #4738
  - add restore docs, #4670
  - updated docs to cover use of temp directory on remote, #4545
  - add a push-style example to borg-create(1), #4613
  - timestamps in the files cache are now usually ctime, #4583
  - benchmark crud: clarify that space is used until compact
  - update documentation of borg create,
    corrects a mention of borg 1.1 as a future version.
  - fix osxfuse github link in installation docs
  - how to supply a passphrase, use crypto devices, #4549
  - extract: document limitation "needs empty destination",  #4598
  - update macOS Brew link
  - add note about software for automating backup
  - compact: improve docs,
  - README: new URL for funding options

Version 1.2.0a6 (2019-04-22)
----------------------------

Fixes:

- delete / prune: consider part files correctly for stats, #4507
- fix "all archives" stats considering part files, #4329
- create: only run stat_simple_attrs() once
- create: --stats does not work with --dry-run, exit with error msg, #4373
- give "invalid repo" error msg if repo config not found, #4411

New features:

- display msgpack version as part of sysinfo (e.g. in tracebacks)

Other changes:

- docs:

  - sdd "SSH Configuration" section, #4493, #3988, #636, #4485
  - better document borg check --max-duration, #4473
  - sorted commands help in multiple steps, #4471
- testing:

  - travis: use py 3.5.3 and 3.6.7 on macOS to get a pyenv-based python
    build with openssl 1.1
  - vagrant: use py 3.5.3 and 3.6.8 on darwin64 VM to build python and
    borg with openssl 1.1
  - pytest: -v and default XDISTN to 1, #4481

Version 1.2.0a5 (2019-03-21)
----------------------------

Fixes:

- warn if a file has changed while being backed up, #1750
- lrucache: regularly remove old FDs, #4427
- borg command shall terminate with rc 2 for ImportErrors, #4424
- make freebsd xattr platform code api compatible with linux, #3952

Other changes:

- major setup code refactoring (especially how libraries like openssl, liblz4,
  libzstd, libb2 are discovered and how it falls back to code bundled with
  borg), new: uses pkg-config now (and needs python "pkgconfig" package
  installed), #1925

  if you are a borg package maintainer, please try packaging this
  (see comments in setup.py).
- Vagrantfile: add zstd, reorder, build env vars, #4444
- travis: install script improvements
- update shell completions
- docs:

  - add a sample logging.conf in docs/misc, #4380
  - fix spelling errors
  - update requirements / install docs, #4374

Version 1.2.0a4 (2019-03-11)
----------------------------

Fixes:

- do not use O_NONBLOCK for special files, like FIFOs, block and char devices
  when using --read-special. fixes backing up FIFOs. fixes to test. #4394
- more LibreSSL build fixes: LibreSSL has HMAC_CTX_free and HMAC_CTX_new

New features:

- check: incremental repo check (only checks crc32 for segment entries), #1657
  borg check --repository-only --max-duration SECONDS ...
- delete: timestamp for borg delete --info added, #4359

Other changes:

- redo stale lock handling, #3986
  drop BORG_HOSTNAME_IS_UNIQUE (please use BORG_HOST_ID if needed).
  borg now always assumes it has a unique host id - either automatically
  from fqdn plus uuid.getnode() or overridden via BORG_HOST_ID.
- docs:

  - added Alpine Linux to distribution list
  - elaborate on append-only mode docs
- vagrant:

  - darwin: new 10.12 box
  - freebsd: new 12.0 box
  - openbsd: new 6.4 box
  - misc. updates / fixes

Version 1.2.0a3 (2019-02-26)
----------------------------

Fixes:

- LibreSSL build fixes, #4403
- dummy ACL/xattr code fixes (used by OpenBSD and others), #4403
- create: fix openat/statat issues for root directory, #4405

Version 1.2.0a2 and earlier (2019-02-24)
----------------------------------------

New features:

- compact: "borg compact" needs to be used to free repository space by
  compacting the segments (reading sparse segments, rewriting still needed
  data to new segments, deleting the sparse segments).
  Borg < 1.2 invoked compaction automatically at the end of each repository
  writing command.
  Borg >= 1.2 does not do that any more to give better speed, more control,
  more segment file stability (== less stuff moving to newer segments) and
  more robustness.
  See the docs about "borg compact" for more details.
- "borg compact --cleanup-commits" is to cleanup the tons of 17byte long
  commit-only segment files caused by borg 1.1.x issue #2850.
  Invoke this once after upgrading (the server side) borg to 1.2.
  Compaction now automatically removes unneeded commit-only segment files.
- prune: Show which rule was applied to keep archive, #2886
- add fixed blocksize chunker (see --chunker-params docs), #1086

Fixes:

- avoid stale filehandle issues, #3265
- use more FDs, avoid race conditions on active fs, #906, #908, #1038
- add O_NOFOLLOW to base flags, #908
- compact:

  - require >10% freeable space in a segment, #2985
  - repository compaction now automatically removes unneeded 17byte
    commit-only segments, #2850
- make swidth available on all posix platforms, #2667

Other changes:

- repository: better speed and less stuff moving around by using separate
  segment files for manifest DELETEs and PUTs, #3947
- use pyinstaller v3.3.1 to build binaries
- update bundled zstd code to 1.3.8, #4210
- update bundled lz4 code to 1.8.3, #4209
- msgpack:

  - switch to recent "msgpack" pypi pkg name, #3890
  - wrap msgpack to avoid future compat complications, #3632, #2738
  - support msgpack 0.6.0 and 0.6.1, #4220, #4308

- llfuse: modernize / simplify llfuse version requirements
- code refactorings / internal improvements:

  - include size/csize/nfiles[_parts] stats into archive, #3241
  - calc_stats: use archive stats metadata, if available
  - crypto: refactored crypto to use an AEAD style API
  - crypto: new AES-OCB, CHACHA20-POLY1305
  - create: use less syscalls by not using a python file obj, #906, #3962
  - diff: refactor the diff functionality to new ItemDiff class, #2475
  - archive: create FilesystemObjectProcessors class
  - helpers: make a package, split into smaller modules
  - xattrs: move to platform package, use cython instead ctypes, #2495
  - xattrs/acls/bsdflags: misc. code/api optimizations
  - FUSE: separate creation of filesystem from implementation of llfuse funcs, #3042
  - FUSE: use unpacker.tell() instead of deprecated write_bytes, #3899
  - setup.py: move build_man / build_usage code to setup_docs.py
  - setup.py: update to use a newer Cython/setuptools API for compiling .pyx \ 
-> .c, #3788
  - use python 3.5's os.scandir / os.set_blocking
  - multithreading preparations (not used yet):

    - item.to_optr(), Item.from_optr()
    - fix chunker holding the GIL during blocking I/O
  - C code portability / basic MSC compatibility, #4147, #2677
- testing:

  - vagrant: new VMs for linux/bsd/darwin, most with OpenSSL 1.1 and py36
   2022-02-18 09:02:40 by Thomas Klausner | Files touched by this commit (3)
Log message:
py-borgbackup: remove ALTERNATIVES

The current ALTERNATIVES/post-install was not enough to make this package
avoid a self-conflict (due to the man pages). Since this is an application
that which no other packages depend upon, there is no need to have it
installed for multiple python versions at the same time, so simplify
this.

Bump PKGREVISION.
   2022-02-18 08:44:18 by Thomas Klausner | Files touched by this commit (1)
Log message:
py-borgbackup: fix typo in ALTERNATIVES
   2022-01-21 17:07:33 by Benny Siegert | Files touched by this commit (2)
Log message:
py-borgbackup: also install man pages, bump revision
   2022-01-05 16:41:32 by Thomas Klausner | Files touched by this commit (289)
Log message:
python: egg.mk: add USE_PKG_RESOURCES flag

This flag should be set for packages that import pkg_resources
and thus need setuptools after the build step.

Set this flag for packages that need it and bump PKGREVISION.
   2022-01-04 21:55:40 by Thomas Klausner | Files touched by this commit (1595)
Log message:
*: bump PKGREVISION for egg.mk users

They now have a tool dependency on py-setuptools instead of a DEPENDS