Notes:
[language] added support for Ren'Py #560 @TabulateJarl8
[info] added language bar distribution #585 @o2sh @spenserblack
[misc] granted read access to onefetch snap to gitconfig files #588 @o2sh
[language] added support for Ceylon #602 @DenverCoder1
[misc] default to terminal foreground color for tilde, underline, colon
and info #604 @o2sh
[language] fix Lua logo so that it can be read even without color #610
@yutkat
[misc] replace colored crate with owo-colors #620 @o2sh @spenserblack
[misc] remap White ANSI color to Default #625 @spenserblack
[language] added support for Wolfram #609 @rcon56
[misc] match circle color with github linguist #630 @o2sh
[language] added support for VHDL #632 @BHatGuy
enhancement:
-Open files whether its extension in lowercase or uppercase d946b5f
-Follow symlink if it leads to a directory dac7f88
-Implement memoization of move when going to symlink dir 6860c5d
-Print help by fx -h | fx --help 884180f
Improvements to aggregate progress reporting
Previously, aggregate mode progress reports were handled by an
infinitely-looping thread carrying a 64-bit atomic of the current count,
which it would print periodically.
This resulted in #99 - breaking on platforms without 64-bit atomics,
for which a feature was added to disable it.
It also implied a race condition, where the "Enumerating ..." message
could be printed after results had been gathered but before dua exited.
Additionally, part of the status message could be left on the display if
the first line of a report was too short to cover it.
This commit should resolve these:
The 64-bit atomic counter is replaced with an 8-bit AtomicBool
All printing is controlled from the main thread
The first line is cleared prior to printing a report
The only notable drawback I see with this approach is that progress
reporting can sometimes be delayed, since the display is only evaluated
for update during periods the aggregation loop makes progress. The
practical difference appears relatively minor.
Since this should resolve#99, the aggregate-scan-progress feature is
removed.
Special thanks to @Freaky for the contribution!
BREAKING change for package maintainers
The aggregate-scan-progress feature was removed as it shouldn't be required
anymore.
-don't query size of remote filesystems anymore. This fixes some 10 seconds
hangs in some cases (e.g. filesystem screen) when a remote filesystem is
unreachable.
A modern Python interface to DBus notifications, supporting Python 3.
This effectively replaces what was once called "py-notify" in pkgsrc,
and then became "py-notify-python". It is actually required by
print/hplip, if the qt5 option is enabled (which I am working on
fixing).
(There is also a completely unrelated package as sysutils/py-notify at
present, co-incidentally also at version 0.3.1, which apparently was
mistakenly imported overtop the original py-notify, but is not the same
package at all: it should have been placed in devel, not sysutils, as
it doesn't deal with notifications integration but rather with general
development abstractions.)
Originally packaged in wip by K.I.A. Derouiche. Minor adjustments for
pkgsrc and a correction (missing py-dbus dependency) by me.
This package (in this incarnation) has been dead upstream since 2008,
and there are no longer any packages in pkgsrc that depend on it.
(There is a newer Python "notify2" upstream that replaces this, and
works with Python 3.x, but this isn't in pkgsrc proper at present,
though it is in pkgsrc-wip.)
1.14.x is a new stable branch, superseding 1.12.x.
Summary of major changes between 1.12.x and 1.14.0
--------------------------------------------------
Dependencies:
• On Unix platforms, if getpwnam_r() and getgrnam_r() are implemented,
they must be POSIX-conformant. The non-POSIX signature seen in ancient
Solaris versions will no longer work.
...
Deprecations:
• Third-party software should install default dbus policies for the system
bus into ${datadir}/dbus-1/system.d (this has been supported since dbus
1.10, released in August 2015). Installing default dbus policies in
${sysconfdir}/dbus-1/system.d is now considered to be deprecated. Policy
files in ${sysconfdir}/dbus-1/system.d continue to be read, but this
directory should only be used by system administrators wishing to
override the default policies.
The ${datadir} applicable to dbus is usually /usr/share and the
${sysconfdir} is usually /etc.
• A similar pattern applies to the session bus policies in session.d.
• The dbus-send(1) man page now documents --bus and --peer instead of
the old --address synonym for --peer, which has been deprecated since
the introduction of --bus and --peer in 1.7.6
• The dbus-daemon man page now has scarier warnings about
<allow_anonymous/> and non-local TCP, which are insecure and should
not be used, particularly for the standard system and session buses
• DBusServer (and hence the dbus-daemon) no longer accepts usernames
(login names) for the recommended EXTERNAL authentication mechanism,
only numeric user IDs or the empty string. See 1.13.0 release notes
for full details.
New features:
• On Linux 4.13 or later when built against a suitable glibc version,
GetConnectionCredentials() now includes UnixGroupIDs, the effective
group IDs of the initiator of the connection, taken from
SO_PEERGROUPS.
• On Linux 4.13 or later, <policy group="…"> now uses the SO_PEERGROUPS
credentials-passing socket option to get the effective group IDs
of the initiator of the connection. See 1.13.4 release notes for details.
• Add a --sender option to dbus-send, which requests a name and holds it
until the signal has been sent
• dbus-daemon <allow> and <deny> rules can now specify a
send_destination_prefix attribute, which is like a combination of
send_destination and the arg0namespace keyword in match rules.
See 1.13.12 release notes for more details
• The dbus-daemon now filters the messages that it relays, removing
header fields that it does not understand. Clients must not rely on
this behaviour unless they have confirmed that they are connected to
a suitable message bus implementation, for example by querying its
Features property.
• The dbus-daemon now emits a signal, ActivatableServicesChanged, when
the list of activatable services may have changed. Support for this
signal can be discovered by querying the Features property.
• It is now possible to disable traditional (non-systemd) service
activation at build-time (Autotools: --disable-traditional-activation,
CMake: -DENABLE_TRADITIONAL_ACTIVATION=OFF). See 1.13.10 release notes
for details.
• The API reference manual can be built as a Qt compiled help file if
qhelpgenerator(-qt5) is available. See 1.13.16 release notes for details.
Miscellaneous behaviour changes:
• When using the "user bus" (--enable-user-session), put the dbus-daemon
in the session slice
• Several environment variables set by systemd are no longer passed
on to activated services
• If the dbus-daemon is compiled for Linux with systemd support, it
now informs systemd that it is ready for use via the sd_notify()
mechanism
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
v1.9.3
======
- keep same line visible in preview when resizing
- :previous_dir and :next_dir internals - Fix#502
v1.9.2
======
- instead of crashing on syntect panic in code preview, fall back to unstyled
text - Fix#485
- fix files in worktree missing from git statuses - Fix#428
Changes & fixes:
-Added new fields border_type and border_style for all the panels to enable
customizing the borders (see #450).
-Added boolean option xplr.config.general.enforce_bounded_index_navigation to
configure wrapping on move (see #441).
-The built-in init.lua has been fully documented (see #445).
-Categorized the full list of messages using auto generation of docs from
code (see #444).
-Some code refactor and documentation improvements.
-Feature/Bugfix: Allow multiple regexs to be used.
The -e and -v flags allow multiple values. Before values after the first
were ignored. This change allows the user to specify multiple regexs and
have them all applied.
-Feature: Implement ISO output.
-Fix: Add assert for low terminal width.
If terminal is not wide enought to print text, then print an error message.
-Fix: Bug: names may be shortened unnecessarily.
The code calculating the width of a row to use vs the width of the terminal
wasn't quite right.