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.
procfs.h had an inline function added that expects curlwp to be
defined. It isn't needed by this code base, and I don't see any other
way of fixing this than adding a basic definition to get this to
compile. It looks "wrong", but this code base requires _KERNEL to be
defined when including procfs.h, but we can't include lwp.h or machine/
cpu.h with that defined, header files that aren't available to userland
get referenced and break the build that way, instead.
This is a small wrapper around the directory, unix, and Win32 packages, for
use with system-filepath. It provides a consistent API to the various
versions of these packages distributed with different versions of GHC.
In particular, this library supports working with POSIX files that have
paths which can't be decoded in the current locale encoding.
Provides a FilePath datatype and utility functions for operating on
it. Unlike the filepath package, this package does not simply reuse String,
increasing type safety.
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.
* Noteworthy changes in release 4.9.0 (2022-02-22) [stable]
** New features in find
find now supports the -files0-from option to be able to safely pass an
arbitrary number of starting points to the tool. The option requires a file
name as argument, or "-" to read from standard input. The entries in that
file have to be separated by NUL characters. [#60383]
** Changes in locate / updatedb
updatedb now skips (fuse-mounted) s3fs filesystems by default,
i.e., unless PRUNEFS is set.
** Bug Fixes
'find -D stat -L ...' no longer determines SELinux security information as
if the -L option was not given.
[Bug present since the SELinux implementation in 4.5.6]
'find -inum' and 'find -printf %i' now also work on platforms which allow
the inode number Zero; e.g. the GNU/Hurd uses inode number 0 for /dev/console.
Previously, find(1) would abort when visiting such a file.
[Bug present since FINDUTILS_4_5_4-1.]
findutils-4.8.0 failed to build on some MacOS versions.
Fixed by a gnulib update. [#59972, #59991]
** Documentation Changes
The find.1 man page and the Texinfo manual now show environment variables
in a consistent style. [#59963]
Furthermore, both add the description of the -printf format directive '%B',
for a file's birth time, and its limitations. [#61327]
The description of the -delete action has been improved and aligned among
the manual page and the Texinfo documentation. [#61774]
Various other documentation fixes - syntax issues and typos.
[#61303, #60823, #61341]
The output of 'find --help' now reads better.
The HTML online manual is using the official GNU stylesheet again.
** Changes to the build process
The find version without FTS, oldfind, has been completely removed. It has
not been installed since 4.5.18 (2015), and was only still used in tests.
hslogger is a logging framework for Haskell, roughly similar to Python's
logging module.
hslogger lets each log message have a priority and source be associated
with it. The programmer can then define global handlers that route or
filter messages based on the priority and source. hslogger also has a
Syslog handler built in.
ctv - configurable tree view
Highly configurable tree view visualizer CLI tool written in Rust.
What does ctv do?
- Visualize your file hiearchy in a tree view
- Customize the apperance of your tree
- Display custom file information (permissions, time, user, etc)
- Personalize tree color and text styling
Tarsnap 1.0.40 is now available. This version brings several improvements
compared to tarsnap 1.0.39:
* tarsnap now accepts a --resume-extract option to skip extracting files whose
filesize and mtime match existing files on disk.
* tarsnap now accepts --progress-bytes SIZE, which prints a progress message
after each SIZE bytes are processed, up to once per file. This can be
disabled with --no-progress-bytes.
* tarsnap now accepts a --passphrase method:arg option which accepts:
* --passphrase dev:tty-stdin
* --passphrase dev:stdin-once
* --passphrase dev:tty-once
* --passphrase env:VARNAME
* --passphrase file:FILENAME
* tarsnap now accepts a --dump-config option to print the command-line and all
non-blank lines read from config files.
* tarsnap now exits with an error if there are unused command-line arguments.
(i.e. "tarsnap -d -f a1 a2", where "a2" is unused.)
* Improved performance on some x86, amd64, and arm64 systems by using
cryptographic instruction set extensions.
* When sent SIGINFO or SIGUSR1, tarsnap now prints the number of files and the
number of uncompressed bytes processed, in addition to the previous output.
* A zsh completion file can be installed with
configure --with-zsh-completion=DIR.
As usual, there are also lots of minor build fixes, harmless bug fixes, and
code cleanups.
rockpro64 does and avoid "saveenv" saving over the top of the
u-boot installation itself.
now my pbp can boot from just SPI and NVMe.
bump pkg revision.
0.2.8.0
Re-export ExitCode, ExitSuccess and ExitFailure.
0.2.7.0
Include empty argument in the show instance.
0.2.6.3
Doc improvements
0.2.6.2
Doc improvements
tested in sd, emmc, and spi on rockpro64, and on emmc on pbp.
should not affect u-boot-rockpro64-ayufan, but should finally
make it obsolete as the SPI version works again.
hslua-module-path-1.0.1
* Bumped upper bound of hslua-core and hslua-marshalling to allow their
respective version 2.1.
hslua-module-path-1.0.0
* Updated to hslua 2.0.
-Add copy-friendly feature
Usefuly when we want to copy output elsewhere.
The unused is then a separate character to
distinguish it from the used part.
support for rk3328 (not yet tested), rk3399 (tested), and fiptool.
these will obsolete the existing arm-trusted-firmware* (v2.3) packages
once all consumers are updated and tested, and currently the sun50i_a64
and sun50i-h6 targets are not yet available.
v2.10.17
========
Bugfixes
--------
- ansible-galaxy collection build - Ignore any existing ``MANIFEST.json`` and ``FILES.json`` in the root directory when building a collection.
- ansible-test - Fix traceback in the ``validate-modules`` sanity test when testing an Ansible module without any callables.
- backwards compatiblity copy of doc fragment action_common_attributes
Bump libmacchina to v6.1.0:
-Fixes a bug that causes the package readout to display "0 (cargo)" if
$CARGO_HOME/bin is empty. (Macchina-CLI/libmacchina@22a7df0)
-Fixes a bug that causes the network readout to return an IPv6 address in
some cases. (Macchina-CLI/libmacchina@608a1dd)
Change log:
1.2.6 (2022-02-02)
=====
- Fix translations not showing in the GUI
- Don't save some defaults to configuration files
- Fix visibility of the associated-command configuration
- Update configure.ac.in syntax
- Translation Updates:
Basque, Chinese (China), Croatian, Danish, Hebrew, Indonesian,
Occitan (post 1500), Portuguese (Brazil), Slovenian, Swedish
Version 1.8.0 -- 2021/08/08
---------------------------
* Add compatibility with pathlib paths
* Fix thread compatibility of modern windows implementation
* Fix handling of UNC names in legacy windows implementation
Version 1.7.1 -- 2021/06/21
---------------------------
* Release stable version with changes from last 3 releases
* Fix handling of UNC names
Version 1.7.0a1 -- 2021/05/14
-----------------------------
* Changed conditional for when to try to use pyobjc version
Version 1.7.0a0 -- 2021/04/20
-----------------------------
* Add console_script entry point
* Increased python CI versions
* Fix minor issue in setup.py
* Fix issue with windows tests importing modules on non-windows
* Unit test cleanups, rewrites, and flake8 cleanups
* Windows: Fix legacy windows platform for multi-byte unicode and add tests
* macOS: Add alternative pyobjc version to potentially improve compatibility
Version 1.6.0b1 -- 2020/06/18
-----------------------------
* Add main method which allows calling via ``python -m send2trash somefile``
* Windows: Add support for using IFileOperation when pywin32 is present on Vista and newer
* Add support for passing multiple files at once in a list
* Windows: Batch multi-file calls to improve performance
* Windows: Fix issue with SHFileOperation failing silently when path is not found
The SWTPM package provides TPM emulators with different front-end interfaces
to libtpms. TPM emulators provide socket interfaces (TCP/IP and Unix) and
the Linux CUSE interface for the creation of multiple native /dev/vtpm* devices.
The SWTPM package also provides several tools for using the TPM emulator,
creating certificates for a TPM, and simulating the manufacturing of
a TPM by creating a TPM's EK and platform certificates etc.
Libtpms is a library that targets the integration of TPM functionality
into hypervisors, primarily into Qemu. Libtpms provides a very narrow
public API for this purpose so that integration is possible. Only the
minimum of necessary APIs are made publicly available.
It is assumed that the user of libtpms is familiar with the concepts
of the Trusted Platform Module (TPM). For the interaction with libtpms
it is necessary to know how to construct valid TPM commands and to
be able to parse their results. It is not within the scope of libtpms's
documentation to provide background on this
Changes & fixes
-Added CLI option --print-pwd-as-result to simplify implementing "cd on quit"
using shell alias (See #437)
-alias xcd='cd "$(xplr --print-pwd-as-result)"'
-Added new key binding ctrl-d to duplicate a file or directory in the same
parent directory with a different name. (See #434).
This is a bugfix release; upstream does not really provide a changelist.
While here, deal with fallout from introducing yet another global
*_SUPPORTED variable.
bkt (pronounced bucket) is a subprocess caching utility written in Rust,
inspired by bash-cache.
Wrapping expensive process invocations with bkt allows callers to reuse recent
invocations without complicating their application logic. This can be useful in
shell prompts, interactive applications such as fzf, and long-running programs
that poll other processes.
When bkt is passed a command it hasn't seen before (or recently) it executes
the command synchronously and caches its stdout, stderr, and exit code.
Calling bkt again with the same command reads the data from the cache and
outputs it as if the command had been run again.
-enable to show/hide hidden items ( #34 @balroggg )
-felix keeps the state of show_hidden(whether to show hidden items) and
sort_by(by name or by modified time): The change remains after exit.
Command line disk usage tool.
Features
-bargraph with disk and inode usage.
-background: inodes, foreground: disks.
-grouping of filesystems.
-separate coloring of /, /boot and /mnt for easy spotting.
-log2ram filesystem displayed last for easy spotting of log drive usage
on Raspberry Pi.
-display of detailed inode usage (similar to df -i).
`xe` is a new tool for constructing command lines from file listings or
arguments, which includes the best features of `xargs(1)` and
`apply(1)`. `xe` means "execute for every ...".
Benefits over xargs:
* Sane defaults (behaves like `xargs -d'\n' -I{} -n1 -r`).
* No weird parsing, arguments are separated linewise or by NUL byte.
* Can also take arguments from command-line.
* No shell involved unless `-s` is used.
* `{}` replacing possible with multiple arguments.
* Support for patterns to run different commands depending on the argument.
Benefits over apply:
* Parallel mode.
* Sane argument splitting.
* Can use shell-syntax instead of escape characters.
0.7.1
-----
* Add ``async with`` support to :class:`~.asyncio.DBusConnection` in the
asyncio integration.
* Fix calling :meth:`~.asyncio.DBusConnection.receive` immediately after opening
a connection in the asyncio integration.
0.7
---
* Support for :ref:`sending and receiving file descriptors <send_recv_fds>`.
This is available with the blocking, threading and trio integration layers.
* Deprecated older integration APIs, in favour of new APIs introduced in 0.5.
* Fixed passing a deque in to :meth:`~.blocking.DBusConnection.filter` in the
blocking integration API.
New Features:
-interactive mode learns 'toggle [a]ll' and 'remove [a]ll'.
In the mark pane, the 'a' key will now toggle all entries.
This is particularly interesting for selecting entries to
exclude by hand and then invert the selection by toggling [a]ll.
In the delete pane, toggling all with the 'a' key means removing
all entries and closing the pane.
Changes since 3.1.1:
What's new in version 3.1.2
* Bugfix for crash when storing modified settings at exit
* Generate xz-compressed source tarball (with configure) using github actions
* Allow -u UID with numerical value as argument
* Added documentation for obsolete/state libraries/program files highlighting
* Some obsolete/stale library highlighting refinements
* Column width issues resolved
* Dynamic UID column sizing improved
* Discard stale information from Disk and Network I/O meters
* Refined Linux kernel thread detection
* Reworked process state handling
* New CCGROUP column showing abbreviated cgroup name
* New OFFSET column in the list of open files screen
Added:
- Added support for the MISSING / mi= dircolors variable for broken symlink
targets.
- Add support for theme from zwpaper (#452)
- Update theme to support partial themes zwpaper (#591)
- Update minimal rust version to 1.42.0 from zwpaper (#534)
- NO_COLOR environment variable support from (AnInternetTroll)
Changed:
- Change size to use btyes in classic mode from meain
- Show tree edge before name block or first column if no name block from
zwpaper (#468)
- Added icons for Perl modules (.pm) and test scripts (.t)
- Add --config-file flag to read configuration file from a custom location
- Clarify custom date format for date field in configuration file in the README.
Fixed:
- Support all strftime like formatting (#532)
v8.3.1
Bugfixes
- Stop implying --no-ignore-parent when --no-vcs-ignore is supplied,
see #907, #901, #908 (@tmccombs)
- fd no longer waits for the whole traversal if the only matches arrive within
max_buffer_time, see #868 and #895 (@tavianator)
- --max-results=1 now immediately quits after the first result, see #867
- fd -h does not panic anymore when stdout is closed, see #897
Changes
- Disable jemalloc on FreeBSD, see #896 (@xanderio)
- Updated man page, see #912 (@rlue)
- Updated zsh completions, see #932 (@tmccombs)
v8.3.0
Performance improvements
- Colorized output is now significantly faster, see #720 and #853 (@tavianator)
- Writing to stdout is now buffered if the output does not go to a TTY. This
increases performance when the output of fd is piped to another program or to
a file, see #885 (@tmccombs, original implementation by @sourlemon207)
- File metadata is now cached between the different filters that require it
(e.g. --owner, --size), reducing the number of stat syscalls when multiple
filters are used; see #863 (@tavianator, original implementation by @alexmaco)
Features
- Don't buffer command output from --exec when using a single thread. See #522
- Add new -q, --quiet flag, see #303 (@Asha20)
- Add new --no-ignore-parent flag, see #787 (@will459)
- Add new --batch-size flag, see #410 (@devonhollowood)
- Add opposing command-line options, see #595 (@Asha20)
- Add support for more filesystem indicators in LS_COLORS, see
https://github.com/sharkdp/lscolors/pull/35 (@tavianator)
Bugfixes
- Always show the ./ prefix for search results unless the output is a TTY or
--strip-cwd-prefix is set, see #760 and #861 (@jcaplan)
- Set default path separator to / in MSYS, see #537 and #730 (@aswild)
- fd cannot search files under a RAM disk, see #752
- fd doesn't show substituted drive on Windows, see #365
- Properly handle write errors to devices that are full, see #737
- Use local time zone for time functions (--change-newer-than,
--change-older-than`), see #631 (@jacobmischka)
- Support --list-details on more platforms (like BusyBox), see #783
- The filters --owner, --size, and --changed-{within,before} now apply to
symbolic links themselves, rather than the link target, except when
--follow is specified; see #863
- Change time comparisons to be exclusive, see #794 (@jacobmischka)
Changes
- Apply custom --path-separator to commands run with --exec(-batch) and
--list-details, see #697 (@aswild)
Other
- Many documentation updates
output to distinguish different categories of bytes (NULL bytes,
printable ASCII characters, ASCII whitespace characters, other ASCII
characters and non-ASCII).
Changes & fixes
-If errors occur during startup, xplr will display a debug error screen.
This can be disabled by setting xplr.config.general.disable_debug_error_
_mode = true
-While creating files (e.g. path/to/file), if the parent directories don't
exist, they will be automatically created.
5.9.0
=====
**Enhancements**
- 1851_, [Linux]: `cpu_freq()`_ is slow on systems with many CPUs. Read current
frequency values for all CPUs from ``/proc/cpuinfo`` instead of opening many
files in ``/sys`` fs. (patch by marxin)
- 1992_: `NoSuchProcess`_ message now specifies if the PID has been reused.
- 1992_: error classes (`NoSuchProcess`_, `AccessDenied`_, etc.) now have a better
formatted and separated ``__repr__`` and ``__str__`` implementations.
- 1996_, [BSD]: add support for MidnightBSD. (patch by Saeed Rasooli)
- 1999_, [Linux]: `disk_partitions()`_: convert ``/dev/root`` device (an alias
used on some Linux distros) to real root device path.
- 2005_: ``PSUTIL_DEBUG`` mode now prints file name and line number of the debug
messages coming from C extension modules.
- 2042_: rewrite HISTORY.rst to use hyperlinks pointing to psutil API doc.
**Bug fixes**
- 1456_, [macOS], **[critical]**: `cpu_freq()`_ ``min`` and ``max`` are set to
0 if can't be determined (instead of crashing).
- 1512_, [macOS]: sometimes `Process.connections()`_ will crash with
``EOPNOTSUPP`` for one connection; this is now ignored.
- 1598_, [Windows]: `disk_partitions()`_ only returns mountpoints on drives
where it first finds one.
- 1874_, [SunOS]: swap output error due to incorrect range.
- 1892_, [macOS]: `cpu_freq()`_ broken on Apple M1.
- 1901_, [macOS]: different functions, especially `Process.open_files()`_ and
`Process.connections()`_, could randomly raise `AccessDenied`_ because the
internal buffer of ``proc_pidinfo(PROC_PIDLISTFDS)`` syscall was not big enough.
We now dynamically increase the buffer size until it's big enough instead of
giving up and raising `AccessDenied`_, which was a fallback to avoid crashing.
- 1904_, [Windows]: ``OpenProcess`` fails with ``ERROR_SUCCESS`` due to
``GetLastError()`` called after ``sprintf()``. (patch by alxchk)
- 1913_, [Linux]: `wait_procs()`_ should catch ``subprocess.TimeoutExpired``
exception.
- 1919_, [Linux]: `sensors_battery()`_ can raise ``TypeError`` on PureOS.
- 1921_, [Windows]: `swap_memory()`_ shows committed memory instead of swap.
- 1940_, [Linux]: psutil does not handle ``ENAMETOOLONG`` when accessing process
file descriptors in procfs. (patch by Nikita Radchenko)
- 1948_, **[critical]**: ``memoize_when_activated`` decorator is not thread-safe.
(patch by Xuehai Pan)
- 1953_, [Windows], **[critical]**: `disk_partitions()`_ crashes due to
insufficient buffer len. (patch by MaWe2019)
- 1965_, [Windows], **[critical]**: fix "Fatal Python error: deallocating None"
when calling `users()`_ multiple times.
- 1980_, [Windows]: 32bit / WoW64 processes fails to read `Process.name()`_ longer
than 128 characters resulting in `AccessDenied`_. This is now fixed. (patch
by PetrPospisil)
- 1991_, **[critical]**: `process_iter()`_ is not thread safe and can raise
``TypeError`` if invoked from multiple threads.
- 1956_, [macOS]: `Process.cpu_times()`_ reports incorrect timings on M1 machines.
(patch by Olivier Dormond)
- 2023_, [Linux]: `cpu_freq()`_ return order is wrong on systems with more than
9 CPUs.