Thomas Waldmann
dd4ba13066
remove python 3.10 support (master branch), fixes #9707
2026-06-06 15:34:05 +02:00
TW
22bc6ee419
Merge pull request #9720 from ThomasWaldmann/pure-hashing-wrapper-master
...
Lint / lint (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / security (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
CI / asan_ubsan (push) Has been cancelled
CI / native_tests (push) Has been cancelled
CI / vm_tests (Haiku, false, haiku, r1beta5) (push) Has been cancelled
CI / vm_tests (NetBSD, false, netbsd, 10.1) (push) Has been cancelled
CI / vm_tests (OmniOS, false, omnios, r151056) (push) Has been cancelled
CI / vm_tests (OpenBSD, false, openbsd, 7.8) (push) Has been cancelled
CI / vm_tests (borg-freebsd-14-x86_64-gh, FreeBSD, true, freebsd, 14.3) (push) Has been cancelled
CI / windows_tests (push) Has been cancelled
add pure_hash option and tests for SHA256FileHashingWrapper, fixes #9704
2026-06-04 20:58:13 +02:00
TW
68bf6a1c64
Merge pull request #9721 from ThomasWaldmann/binary-build-scripts
...
Binary build scripts
2026-06-04 20:57:47 +02:00
Thomas Waldmann
fb53f44f0f
nuitka build: also use dist/binary for output
2026-06-04 18:31:57 +02:00
Thomas Waldmann
2768548032
build: add build-borg-using-pyinstaller.sh and use it in ci.yml
2026-06-04 18:25:12 +02:00
Thomas Waldmann
4c6e8fb957
file integrity: add pure_hash option and tests for SHA256FileHashingWrapper, fixes #9704
2026-06-04 18:10:34 +02:00
TW
6b93751a9a
Merge pull request #9719 from ThomasWaldmann/fix-9714
...
Lint / lint (push) Waiting to run
CI / lint (push) Waiting to run
CI / security (push) Waiting to run
CI / asan_ubsan (push) Blocked by required conditions
CI / native_tests (push) Blocked by required conditions
CI / vm_tests (Haiku, false, haiku, r1beta5) (push) Blocked by required conditions
CI / vm_tests (NetBSD, false, netbsd, 10.1) (push) Blocked by required conditions
CI / vm_tests (OmniOS, false, omnios, r151056) (push) Blocked by required conditions
CI / vm_tests (OpenBSD, false, openbsd, 7.8) (push) Blocked by required conditions
CI / vm_tests (borg-freebsd-14-x86_64-gh, FreeBSD, true, freebsd, 14.3) (push) Blocked by required conditions
CI / windows_tests (push) Blocked by required conditions
CodeQL / Analyze (push) Waiting to run
add test for --help rendering, add workaround to nanorst
2026-06-04 13:47:44 +02:00
TW
2743e3716f
Merge pull request #9716 from borgbackup/dependabot/github_actions/actions-487c3c9492
...
build(deps): bump cross-platform-actions/action from 1.1.0 to 1.2.0 in the actions group
2026-06-04 12:21:20 +02:00
TW
a309f3dc93
Merge pull request #9717 from borgbackup/dependabot/pip/requirements.d/pip-dependencies-ba5c4d1ea1
...
build(deps): bump the pip-dependencies group in /requirements.d with 6 updates
2026-06-04 12:20:24 +02:00
Thomas Waldmann
1f00a1f4f3
nanorst: do not require 2 empty lines at end of string after code block, fixes #9714
2026-06-04 11:29:23 +02:00
Thomas Waldmann
043628cdd8
tests: invoke --help for all commands to check if it works, see #9714
2026-06-04 11:25:43 +02:00
dependabot[bot]
501e4798b7
build(deps): bump the pip-dependencies group
...
Bumps the pip-dependencies group in /requirements.d with 6 updates:
| Package | From | To |
| --- | --- | --- |
| [pip](https://github.com/pypa/pip ) | `26.1.1` | `26.1.2` |
| [wheel](https://github.com/pypa/wheel ) | `0.46.3` | `0.47.0` |
| [build](https://github.com/pypa/build ) | `1.4.4` | `1.5.0` |
| [tox](https://github.com/tox-dev/tox ) | `4.53.0` | `4.53.1` |
| [pre-commit](https://github.com/pre-commit/pre-commit ) | `4.5.1` | `4.6.0` |
| [pyinstaller](https://github.com/pyinstaller/pyinstaller ) | `6.19.0` | `6.20.0` |
Updates `pip` from 26.1.1 to 26.1.2
- [Changelog](https://github.com/pypa/pip/blob/main/NEWS.rst )
- [Commits](https://github.com/pypa/pip/compare/26.1.1...26.1.2 )
Updates `wheel` from 0.46.3 to 0.47.0
- [Release notes](https://github.com/pypa/wheel/releases )
- [Changelog](https://github.com/pypa/wheel/blob/main/docs/news.rst )
- [Commits](https://github.com/pypa/wheel/compare/0.46.3...0.47.0 )
Updates `build` from 1.4.4 to 1.5.0
- [Release notes](https://github.com/pypa/build/releases )
- [Changelog](https://github.com/pypa/build/blob/main/CHANGELOG.rst )
- [Commits](https://github.com/pypa/build/compare/1.4.4...1.5.0 )
Updates `tox` from 4.53.0 to 4.53.1
- [Release notes](https://github.com/tox-dev/tox/releases )
- [Changelog](https://github.com/tox-dev/tox/blob/main/docs/changelog.rst )
- [Commits](https://github.com/tox-dev/tox/compare/4.53.0...4.53.1 )
Updates `pre-commit` from 4.5.1 to 4.6.0
- [Release notes](https://github.com/pre-commit/pre-commit/releases )
- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md )
- [Commits](https://github.com/pre-commit/pre-commit/compare/v4.5.1...v4.6.0 )
Updates `pyinstaller` from 6.19.0 to 6.20.0
- [Release notes](https://github.com/pyinstaller/pyinstaller/releases )
- [Changelog](https://github.com/pyinstaller/pyinstaller/blob/develop/doc/CHANGES.rst )
- [Commits](https://github.com/pyinstaller/pyinstaller/compare/v6.19.0...v6.20.0 )
---
updated-dependencies:
- dependency-name: pip
dependency-version: 26.1.2
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: pip-dependencies
- dependency-name: wheel
dependency-version: 0.47.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: pip-dependencies
- dependency-name: build
dependency-version: 1.5.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: pip-dependencies
- dependency-name: tox
dependency-version: 4.53.1
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: pip-dependencies
- dependency-name: pre-commit
dependency-version: 4.6.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: pip-dependencies
- dependency-name: pyinstaller
dependency-version: 6.20.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: pip-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-06-03 22:33:36 +00:00
dependabot[bot]
ec8fc5281d
build(deps): bump cross-platform-actions/action in the actions group
...
Bumps the actions group with 1 update: [cross-platform-actions/action](https://github.com/cross-platform-actions/action ).
Updates `cross-platform-actions/action` from 1.1.0 to 1.2.0
- [Release notes](https://github.com/cross-platform-actions/action/releases )
- [Changelog](https://github.com/cross-platform-actions/action/blob/master/changelog.md )
- [Commits](https://github.com/cross-platform-actions/action/compare/v1.1.0...v1.2.0 )
---
updated-dependencies:
- dependency-name: cross-platform-actions/action
dependency-version: 1.2.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: actions
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-06-03 22:33:18 +00:00
TW
4496904f48
Merge pull request #9710 from mr-raj12/pack-files-step4-chunkindex-pack-fields
...
Lint / lint (push) Waiting to run
CI / lint (push) Waiting to run
CI / security (push) Waiting to run
CI / asan_ubsan (push) Blocked by required conditions
CI / native_tests (push) Blocked by required conditions
CI / vm_tests (Haiku, false, haiku, r1beta5) (push) Blocked by required conditions
CI / vm_tests (NetBSD, false, netbsd, 10.1) (push) Blocked by required conditions
CI / vm_tests (OmniOS, false, omnios, r151056) (push) Blocked by required conditions
CI / vm_tests (OpenBSD, false, openbsd, 7.8) (push) Blocked by required conditions
CI / vm_tests (borg-freebsd-14-x86_64-gh, FreeBSD, true, freebsd, 14.3) (push) Blocked by required conditions
CI / windows_tests (push) Blocked by required conditions
CodeQL / Analyze (push) Waiting to run
hashindex: add pack_id, pack_offset, pack_size to ChunkIndexEntry
2026-06-03 17:59:00 +02:00
Mrityunjay Raj
8f28844a1e
hashindex: add pack_id, obj_offset, obj_size to ChunkIndexEntry, refs #8572
...
Add three new fields to ChunkIndexEntry and update all call sites:
- pack_id (32 bytes): identifies the pack file containing the chunk
- obj_offset (uint32): byte offset of the chunk within the pack
- obj_size (uint32): stored (compressed) size of the chunk on disk
At N=1 (one chunk per pack), chunk_id == pack_id, obj_offset == 0,
and obj_size == pack_size. All sites use chunk_id as the ChunkIndex
key and extract pack_id as a separate variable with an N=1 comment.
compact_cmd.py: use obj_size (stored size) in repository_size sum.
cache.py: preserve pack fields when serializing the chunk index cache.
repository.py: populate pack_id/obj_size from borgstore object info.
archive.py: extract pack_id on its own line, obj_size=0 for now.
hashindex.pyx: update add(), namedtuple, format string, and docstring.
hashindex.pyi: add new fields to ChunkIndexEntry and CIE type alias.
testsuite/hashindex_test.py: update all ChunkIndexEntry constructions.
2026-06-03 18:21:13 +05:30
TW
6c143e201f
Merge pull request #9713 from ThomasWaldmann/build-nuitka2-master
...
nuitka build script refinements (master)
2026-06-03 12:59:23 +02:00
Thomas Waldmann
4431759d79
better script name
2026-06-03 12:57:45 +02:00
Thomas Waldmann
38cefed974
nuitka build script: simplify, see #3227
...
Including cffi is already enough to make it work.
Using --mode=onefile as suggested by Kay.
2026-06-03 12:55:11 +02:00
TW
d3fa580f42
Merge pull request #9711 from ThomasWaldmann/repo-list-borg1
...
allow 'borg repo-list' for Borg 1.x repositories via --from-borg1
2026-06-03 11:44:15 +02:00
TW
a1dc0dd6fa
Merge pull request #9712 from ThomasWaldmann/addtl-help-topics-master
...
list additional help topics in main borg help, fixes #3432
2026-06-03 09:58:34 +02:00
Thomas Waldmann
0311e891e6
list additional help topics in main borg help
...
- Add an epilog to the main ArgumentParser in src/borg/archiver/__init__.py.
- Import process_epilog and use it to format and list additional help topics: patterns, match-archives, placeholders, compression.
- Add test_main_help_epilog to help_cmd_test.py.
- Fixes #3432
2026-06-03 01:09:53 +02:00
Thomas Waldmann
8a13309539
allow 'borg repo-list' for Borg 1.x repositories via --from-borg1
...
- Add --from-borg1 option to borg repo-list command.
- Add allow_v1 argument to @with_repository decorator.
- If allow_v1 is True and v1_legacy is requested, allow version 1 repositories and load Manifest with RepoObj1 object class.
- Support LegacyRemoteRepository in Manifest class.
- Add test_repo_list_from_borg1.
2026-06-03 00:45:16 +02:00
TW
a135c8f302
Merge pull request #9709 from ThomasWaldmann/build-nuitka-master
...
scripts/build-nuitka.sh: generate single-file binary using nuitka, fixes #3227
2026-06-02 22:44:41 +02:00
Thomas Waldmann
b64d1dbc4d
scripts/build-nuitka.sh: generate single-file binary using nuitka, fixes #3227
...
Very experimental and little tested.
2026-06-02 18:56:43 +02:00
TW
ec331057a9
Merge pull request #9706 from ThomasWaldmann/py315
...
ci: add Python 3.15 to CI testing and tox configuration
2026-06-02 17:36:00 +02:00
Thomas Waldmann
a13f8a2f32
development.lock.txt: use Cython 3.2.5
2026-06-02 14:31:34 +02:00
Thomas Waldmann
b9a0a33a6e
ci: add Python 3.15 to CI testing and tox configuration
2026-06-02 14:31:32 +02:00
TW
98d6f2e3db
Merge pull request #9705 from ThomasWaldmann/update-changes
...
update CHANGES
2026-06-02 14:09:12 +02:00
Thomas Waldmann
d6eb910c21
update CHANGES
2026-06-02 11:34:42 +02:00
TW
968f7dae00
Merge pull request #9676 from ThomasWaldmann/support-rest-http-stdio
...
Support rest http stdio
2026-06-02 09:38:37 +02:00
Thomas Waldmann
5584bff830
CI: add test_rest_repo_basics tests to localhost openssh server
2026-06-02 03:07:15 +02:00
Thomas Waldmann
8dbfc50cde
require borgstore 0.5.1, always with rest extra
2026-06-02 02:12:08 +02:00
Thomas Waldmann
f53dd6c3c4
remote archiver tests: use rest:/// rather than ssh://
2026-06-01 23:58:28 +02:00
TW
b8034fcf40
Merge pull request #9692 from mr-raj12/pack-files-step3-pack-id
...
repoobj, repository: add chunk_id to header, introduce packs/ namespace
2026-06-01 21:35:33 +02:00
Thomas Waldmann
39ac734b9c
support "rest:" repository URLs, fixes #9593
...
That is borgstore's REST http over stdio (over ssh, if a host is given).
2026-06-01 21:11:55 +02:00
TW
4d9369f897
Merge pull request #9701 from ThomasWaldmann/fix-9697-master
...
docs: update to 'borg key change-passphrase' in env help, fixes #9697
2026-06-01 21:01:12 +02:00
Thomas Waldmann
05994d2e4e
docs: update to 'borg key change-passphrase' in env help, fixes #9697
2026-06-01 20:55:56 +02:00
Mrityunjay Raj
d8564b90a4
repository: make N=1 chunk size assumption explicit in list(), refs #8572
...
info.size is the on-disk pack file size, which equals the chunk size only
when N=1 (one chunk per pack). Extract it into a named variable with a
comment so the assumption is visible and easy to fix when N>1 is introduced.
2026-06-01 23:56:40 +05:30
Mrityunjay Raj
a4eac0b62c
testsuite: move manifest corruption offset into data_encrypted region, refs #8572
...
Corruption at offset 123 lands inside meta_encrypted (header is 49 bytes),
causing extract_crypted_data to return a shifted slice whose first byte is
a random AES-OCB ciphertext byte. When that byte equals 0x02 (PlaintextKey
type) key detection silently selects the wrong key, leading to a flaky
IntegrityError in rebuild_archives.
Move the insertion point to offset 250, which is safely inside data_encrypted
for any realistic manifest size, so key detection always reads the correct
type byte and the corruption is caught by AEAD authentication instead.
2026-06-01 23:56:26 +05:30
Mrityunjay Raj
0a9913b658
repository: drop PACK_HEADER wrapper, pack file is the raw RepoObj, refs #8572
...
accept only repo version 4
2026-06-01 23:55:55 +05:30
Mrityunjay Raj
2561acdba3
archiver: v4-only for -r/--repo, accept v4 in --other-repo, fix TypeError in error message
2026-06-01 23:55:54 +05:30
Mrityunjay Raj
395939b551
archiver: accept version 4 repos for -r/--repo, refs #8572
...
_common.py had a hard-coded version check that only allowed v3.
Now that repository.py creates v4 repos, every archiver command
failed to open the repo. Extend the guard to (3, 4).
The --other-repo check (v1 or v3 for borg transfer source) is
intentionally left unchanged.
2026-06-01 23:55:54 +05:30
Mrityunjay Raj
707f26b8e3
repository: address review: drop data/ namespace, fix chunk_id/pack_id semantics, refs #8572
2026-06-01 23:55:54 +05:30
Mrityunjay Raj
05ce0a1897
repository: add BORGPACK pack header, bump repo version to 4, refs #8572
...
Wrap each pack file in a 13-byte header (magic + version + blob_len) so
packs are self-identifying and the [len][blob] unit extends to N>1 without
a format revision. Bump version 3->4: packs/ and 49-byte ObjHeader are
incompatible with version-3 readers. Fix test_extra_chunks chunk_id mismatch.
2026-06-01 23:55:54 +05:30
Mrityunjay Raj
1cb8d99425
repository: introduce pack_id, move chunks to packs/ namespace, refs #8572
...
Introduces pack_id as the borgstore storage key (N=1: pack_id == chunk_id).
Chunks move from data/ to packs/ with single-level directory sharding (256
subdirs). check_object() validates the header chunk_id against the pack
filename. Adds packs/ to ns_config with levels=[1] and to the permissions
maps for no-delete and write-only modes.
2026-06-01 23:55:54 +05:30
Mrityunjay Raj
beab9b2711
repoobj: add chunk_id to blob header, extend to 49 bytes, refs #8572
...
Stores chunk_id unencrypted in the per-blob header so borg check can
rebuild the chunk_id -> pack location index without decryption. AEAD
uses chunk_id as additional data, making key-free recovery circular
without an explicit plaintext copy.
Header layout: OBJ_MAGIC(8) + version(1) + chunk_id(32) + meta_size(4)
+ data_size(4) = REPOOBJ_HEADER_SIZE = 49 bytes.
2026-06-01 23:55:54 +05:30
TW
c37fe1ff92
Merge pull request #9698 from ThomasWaldmann/fix-9695
...
potential fix for #9695
2026-06-01 20:19:44 +02:00
Thomas Waldmann
81c0c54529
potential fix for #9695
2026-06-01 19:26:11 +02:00
TW
bda3d5da48
Merge pull request #9693 from ThomasWaldmann/sha256-repokey
...
repokey: use same format as with external keyfile
2026-06-01 09:48:26 +02:00
Thomas Waldmann
9d2dd1d71f
keyfile: use binary mode to write
2026-05-31 23:55:40 +02:00