浏览代码

Merge pull request #8931 from ThomasWaldmann/rel200b18

Release 2.0.0b18
TW 1 周之前
父节点
当前提交
515019846f
共有 49 个文件被更改,包括 128 次插入79 次删除
  1. 5 5
      Vagrantfile
  2. 39 13
      docs/changes.rst
  3. 1 1
      docs/man/borg-analyze.1
  4. 1 1
      docs/man/borg-benchmark-cpu.1
  5. 1 1
      docs/man/borg-benchmark-crud.1
  6. 1 1
      docs/man/borg-benchmark.1
  7. 1 1
      docs/man/borg-break-lock.1
  8. 1 1
      docs/man/borg-check.1
  9. 1 1
      docs/man/borg-common.1
  10. 1 1
      docs/man/borg-compact.1
  11. 1 1
      docs/man/borg-compression.1
  12. 1 4
      docs/man/borg-create.1
  13. 1 1
      docs/man/borg-delete.1
  14. 1 1
      docs/man/borg-diff.1
  15. 1 1
      docs/man/borg-export-tar.1
  16. 1 1
      docs/man/borg-extract.1
  17. 1 1
      docs/man/borg-import-tar.1
  18. 1 1
      docs/man/borg-info.1
  19. 1 1
      docs/man/borg-key-change-location.1
  20. 1 1
      docs/man/borg-key-change-passphrase.1
  21. 1 1
      docs/man/borg-key-export.1
  22. 1 1
      docs/man/borg-key-import.1
  23. 1 1
      docs/man/borg-key.1
  24. 1 1
      docs/man/borg-list.1
  25. 1 1
      docs/man/borg-match-archives.1
  26. 1 1
      docs/man/borg-mount.1
  27. 1 1
      docs/man/borg-patterns.1
  28. 1 1
      docs/man/borg-placeholders.1
  29. 1 1
      docs/man/borg-prune.1
  30. 1 1
      docs/man/borg-recreate.1
  31. 1 1
      docs/man/borg-rename.1
  32. 1 1
      docs/man/borg-repo-compress.1
  33. 1 1
      docs/man/borg-repo-create.1
  34. 1 1
      docs/man/borg-repo-delete.1
  35. 1 1
      docs/man/borg-repo-info.1
  36. 1 1
      docs/man/borg-repo-list.1
  37. 1 1
      docs/man/borg-repo-space.1
  38. 30 5
      docs/man/borg-serve.1
  39. 1 1
      docs/man/borg-tag.1
  40. 1 1
      docs/man/borg-transfer.1
  41. 1 1
      docs/man/borg-umount.1
  42. 1 1
      docs/man/borg-undelete.1
  43. 1 1
      docs/man/borg-version.1
  44. 1 1
      docs/man/borg-with-lock.1
  45. 4 1
      docs/man/borg.1
  46. 1 1
      docs/man/borgfs.1
  47. 0 3
      docs/usage/create.rst.inc
  48. 6 6
      requirements.d/development.lock.txt
  49. 2 1
      scripts/borg.exe.spec

+ 5 - 5
Vagrantfile

@@ -213,7 +213,7 @@ def install_pythons(boxname)
   return <<-EOF
   return <<-EOF
     . ~/.bash_profile
     . ~/.bash_profile
     echo "PYTHON_CONFIGURE_OPTS: ${PYTHON_CONFIGURE_OPTS}"
     echo "PYTHON_CONFIGURE_OPTS: ${PYTHON_CONFIGURE_OPTS}"
-    pyenv install 3.12.10
+    pyenv install 3.12.11
     pyenv rehash
     pyenv rehash
   EOF
   EOF
 end
 end
@@ -231,8 +231,8 @@ def build_pyenv_venv(boxname)
     . ~/.bash_profile
     . ~/.bash_profile
     cd /vagrant/borg
     cd /vagrant/borg
     # use the latest 3.12 release
     # use the latest 3.12 release
-    pyenv global 3.12.10
-    pyenv virtualenv 3.12.10 borg-env
+    pyenv global 3.12.11
+    pyenv virtualenv 3.12.11 borg-env
     ln -s ~/.pyenv/versions/borg-env .
     ln -s ~/.pyenv/versions/borg-env .
   EOF
   EOF
 end
 end
@@ -281,8 +281,8 @@ def run_tests(boxname, skip_env)
     . ../borg-env/bin/activate
     . ../borg-env/bin/activate
     if which pyenv 2> /dev/null; then
     if which pyenv 2> /dev/null; then
       # for testing, use the earliest point releases of the supported python versions:
       # for testing, use the earliest point releases of the supported python versions:
-      pyenv global 3.12.10
-      pyenv local 3.12.10
+      pyenv global 3.12.11
+      pyenv local 3.12.11
     fi
     fi
     # otherwise: just use the system python
     # otherwise: just use the system python
     # some OSes can only run specific test envs, e.g. because they miss FUSE support:
     # some OSes can only run specific test envs, e.g. because they miss FUSE support:

+ 39 - 13
docs/changes.rst

@@ -144,8 +144,8 @@ Compatibility notes:
 Change Log 2.x
 Change Log 2.x
 ==============
 ==============
 
 
-Version 2.0.0b18 (not released yet)
------------------------------------
+Version 2.0.0b18 (2025-06-19)
+-----------------------------
 
 
 Please note:
 Please note:
 
 
@@ -156,7 +156,29 @@ above.
 
 
 New features:
 New features:
 
 
-- new "buzhash64" chunker, init bh table using a 256bit key derived from ID key
+- experimental new "buzhash64" chunker (later, after testing, this shall become
+  the default chunker in borg2):
+
+  - add own cryptographically secure pseudo-random number generator (CSPRNG)
+    based on AES256-CTR to create deterministic random, based on a 256bit seed.
+  - use that to deterministically create a perfectly balanced buzhash64 table.
+  - "buzhash64" chunker computes 64bit hash values for the chunking decision.
+  - performance is similar to "buzhash" (measured on Apple M3P cpu).
+
+  That should also resolve these points of criticism about the old "buzhash"
+  32bit code:
+
+  - table_base: that the bits are not randomly distributed enough
+  - that an XORed seed cancels out for specific window sizes
+  - that XORing the table with a seed is equivalent to XORing the computed hash
+    value with another constant
+
+  Please test the chunkers extensively (e.g. with borg create, borg transfer),
+  we can hardly change them "in production", because chunking differently also
+  means not deduplicating with old chunks. So, in case there are changes
+  needed, we need to find and fix them now while borg is in beta.
+
+  See also some other chunker changes listed below "Other changes".
 - serve: add --permissions option as an alternative to BORG_REPO_PERMISSIONS env var
 - serve: add --permissions option as an alternative to BORG_REPO_PERMISSIONS env var
 - create: auto-exclude items based on xattrs or NODUMP, see #4972
 - create: auto-exclude items based on xattrs or NODUMP, see #4972
 
 
@@ -165,15 +187,16 @@ New features:
 
 
   also: create: read stat attrs, xattrs, ACLs early, before file contents.
   also: create: read stat attrs, xattrs, ACLs early, before file contents.
 
 
+Fixes:
+
+- compact: fix cleaning archives directory (catch correct exception, use
+  logger.warning, improve error msg)
+
 Other changes:
 Other changes:
 
 
 - support Python 3.14
 - support Python 3.14
-- msgpack: allow 1.1.1
-- msgpack version check: ignore "rc" or other version elements
+- msgpack: allow 1.1.1, version check: ignore "rc" or other version elements
 - add derive_key to derive new keys from existing key material
 - add derive_key to derive new keys from existing key material
-- fish: fix archive name completion
-- refactor: modularize tests
-- refactor: use pathlib.Path
 - refactor the chunkers, #8882 #8883:
 - refactor the chunkers, #8882 #8883:
 
 
   - transform buzhash chunker C code to Cython
   - transform buzhash chunker C code to Cython
@@ -183,12 +206,15 @@ Other changes:
       files and fmaps.
       files and fmaps.
     - FileReader uses FileFMAPReader to fill its buffer and offers clients a
     - FileReader uses FileFMAPReader to fill its buffer and offers clients a
       `.read(size)` method so they can read pieces of the data.
       `.read(size)` method so they can read pieces of the data.
-    - both chunkers now use the FileReader/FileFMAPReader code
+    - all chunkers now use the FileReader/FileFMAPReader code
   - split code and test module into packages
   - split code and test module into packages
-- ChunkerFixed: add fixed chunker tests to selftest
-- ChunkerFixed: do not assert on short header read
-- Chunker: use safe_fadvise
-- ChunkerParams: reject even window size for buzhash, #8868
+- "fixed" chunker: add fixed chunker tests to selftest
+- "fixed" chunker: do not assert on short header read
+- "buzhash*" chunker: use safe_fadvise
+- "buzhash" chunker: reject even window size, #8868
+- fish: fix archive name completion
+- refactor: modularize tests
+- refactor: use pathlib.Path
 - tests / CI:
 - tests / CI:
 
 
   - CI: add bandit, a security-oriented static analysis tool
   - CI: add bandit, a security-oriented static analysis tool

+ 1 - 1
docs/man/borg-analyze.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-ANALYZE" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-ANALYZE" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-analyze \- Analyze archives
 borg-analyze \- Analyze archives
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-benchmark-cpu.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-BENCHMARK-CPU" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-BENCHMARK-CPU" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-benchmark-cpu \- Benchmark CPU bound operations.
 borg-benchmark-cpu \- Benchmark CPU bound operations.
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-benchmark-crud.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-BENCHMARK-CRUD" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-BENCHMARK-CRUD" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-benchmark-crud \- Benchmark Create, Read, Update, Delete for archives.
 borg-benchmark-crud \- Benchmark Create, Read, Update, Delete for archives.
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-benchmark.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-BENCHMARK" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-BENCHMARK" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-benchmark \- benchmark command
 borg-benchmark \- benchmark command
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-break-lock.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-BREAK-LOCK" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-BREAK-LOCK" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-break-lock \- Break the repository lock (e.g. in case it was left by a dead borg.
 borg-break-lock \- Break the repository lock (e.g. in case it was left by a dead borg.
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-check.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-CHECK" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-CHECK" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-check \- Check repository consistency
 borg-check \- Check repository consistency
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-common.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-COMMON" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-COMMON" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-common \- Common options of Borg commands
 borg-common \- Common options of Borg commands
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-compact.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-COMPACT" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-COMPACT" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-compact \- Collect garbage in repository
 borg-compact \- Collect garbage in repository
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-compression.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-COMPRESSION" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-COMPRESSION" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-compression \- Details regarding compression
 borg-compression \- Details regarding compression
 .SH DESCRIPTION
 .SH DESCRIPTION

+ 1 - 4
docs/man/borg-create.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-CREATE" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-CREATE" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-create \- Create new archive
 borg-create \- Create new archive
 .SH SYNOPSIS
 .SH SYNOPSIS
@@ -202,9 +202,6 @@ exclude directories that are tagged by containing a filesystem object with the g
 .TP
 .TP
 .B  \-\-keep\-exclude\-tags
 .B  \-\-keep\-exclude\-tags
 if tag objects are specified with \fB\-\-exclude\-if\-present\fP, don\(aqt omit the tag objects themselves from the backup archive
 if tag objects are specified with \fB\-\-exclude\-if\-present\fP, don\(aqt omit the tag objects themselves from the backup archive
-.TP
-.B  \-\-exclude\-nodump
-exclude files flagged NODUMP
 .UNINDENT
 .UNINDENT
 .SS Filesystem options
 .SS Filesystem options
 .INDENT 0.0
 .INDENT 0.0

+ 1 - 1
docs/man/borg-delete.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-DELETE" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-DELETE" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-delete \- Delete archives
 borg-delete \- Delete archives
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-diff.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-DIFF" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-DIFF" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-diff \- Diff contents of two archives
 borg-diff \- Diff contents of two archives
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-export-tar.1

@@ -28,7 +28,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-EXPORT-TAR" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-EXPORT-TAR" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-export-tar \- Export archive contents as a tarball
 borg-export-tar \- Export archive contents as a tarball
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-extract.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-EXTRACT" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-EXTRACT" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-extract \- Extract archive contents
 borg-extract \- Extract archive contents
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-import-tar.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-IMPORT-TAR" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-IMPORT-TAR" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-import-tar \- Create a backup archive from a tarball
 borg-import-tar \- Create a backup archive from a tarball
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-info.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-INFO" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-INFO" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-info \- Show archive details such as disk space used
 borg-info \- Show archive details such as disk space used
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-key-change-location.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-KEY-CHANGE-LOCATION" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-KEY-CHANGE-LOCATION" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-key-change-location \- Change repository key location
 borg-key-change-location \- Change repository key location
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-key-change-passphrase.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-KEY-CHANGE-PASSPHRASE" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-KEY-CHANGE-PASSPHRASE" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-key-change-passphrase \- Change repository key file passphrase
 borg-key-change-passphrase \- Change repository key file passphrase
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-key-export.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-KEY-EXPORT" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-KEY-EXPORT" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-key-export \- Export the repository key for backup
 borg-key-export \- Export the repository key for backup
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-key-import.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-KEY-IMPORT" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-KEY-IMPORT" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-key-import \- Import the repository key from backup
 borg-key-import \- Import the repository key from backup
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-key.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-KEY" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-KEY" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-key \- Manage a keyfile or repokey of a repository
 borg-key \- Manage a keyfile or repokey of a repository
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-list.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-LIST" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-LIST" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-list \- List archive contents
 borg-list \- List archive contents
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-match-archives.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-MATCH-ARCHIVES" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-MATCH-ARCHIVES" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-match-archives \- Details regarding match-archives
 borg-match-archives \- Details regarding match-archives
 .SH DESCRIPTION
 .SH DESCRIPTION

+ 1 - 1
docs/man/borg-mount.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-MOUNT" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-MOUNT" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-mount \- Mount archive or an entire repository as a FUSE filesystem
 borg-mount \- Mount archive or an entire repository as a FUSE filesystem
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-patterns.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-PATTERNS" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-PATTERNS" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-patterns \- Details regarding patterns
 borg-patterns \- Details regarding patterns
 .SH DESCRIPTION
 .SH DESCRIPTION

+ 1 - 1
docs/man/borg-placeholders.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-PLACEHOLDERS" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-PLACEHOLDERS" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-placeholders \- Details regarding placeholders
 borg-placeholders \- Details regarding placeholders
 .SH DESCRIPTION
 .SH DESCRIPTION

+ 1 - 1
docs/man/borg-prune.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-PRUNE" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-PRUNE" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-prune \- Prune repository archives according to specified rules
 borg-prune \- Prune repository archives according to specified rules
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-recreate.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-RECREATE" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-RECREATE" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-recreate \- Re-create archives
 borg-recreate \- Re-create archives
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-rename.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-RENAME" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-RENAME" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-rename \- Rename an existing archive
 borg-rename \- Rename an existing archive
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-repo-compress.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-REPO-COMPRESS" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-REPO-COMPRESS" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-repo-compress \- Repository (re-)compression
 borg-repo-compress \- Repository (re-)compression
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-repo-create.1

@@ -28,7 +28,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-REPO-CREATE" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-REPO-CREATE" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-repo-create \- Create a new, empty repository
 borg-repo-create \- Create a new, empty repository
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-repo-delete.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-REPO-DELETE" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-REPO-DELETE" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-repo-delete \- Delete a repository
 borg-repo-delete \- Delete a repository
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-repo-info.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-REPO-INFO" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-REPO-INFO" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-repo-info \- Show repository infos
 borg-repo-info \- Show repository infos
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-repo-list.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-REPO-LIST" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-REPO-LIST" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-repo-list \- List the archives contained in a repository
 borg-repo-list \- List the archives contained in a repository
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-repo-space.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-REPO-SPACE" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-REPO-SPACE" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-repo-space \- Manage reserved space in repository
 borg-repo-space \- Manage reserved space in repository
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 30 - 5
docs/man/borg-serve.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-SERVE" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-SERVE" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-serve \- Start in server mode. This command is usually not used manually.
 borg-serve \- Start in server mode. This command is usually not used manually.
 .SH SYNOPSIS
 .SH SYNOPSIS
@@ -52,6 +52,23 @@ option if you do not want to use the default path for the socket and pid file).
 Please note that \fIborg serve\fP does not support giving a specific repository via the
 Please note that \fIborg serve\fP does not support giving a specific repository via the
 \fI\-\-repo\fP option or \fIBORG_REPO\fP environment variable. It is always the borg client which
 \fI\-\-repo\fP option or \fIBORG_REPO\fP environment variable. It is always the borg client which
 specifies the repo to use when talking to \fIborg serve\fP\&.
 specifies the repo to use when talking to \fIborg serve\fP\&.
+.sp
+The \-\-permissions option allows enforcing repository permissions:
+.INDENT 0.0
+.IP \(bu 2
+\fIall\fP: All permissions are granted (default, permissions system is not used)
+.IP \(bu 2
+\fIno\-delete\fP: Allow reading and writing, disallow deleting and overwriting data.
+New archives can be created, existing archives can not be deleted. New chunks can
+be added, existing chunks can not be deleted or overwritten.
+.IP \(bu 2
+\fIwrite\-only\fP: Allow writing, disallow reading data.
+New archives can be created, existing archives can not be read.
+New chunks can be added, existing chunks can not be read, deleted or overwritten.
+.IP \(bu 2
+\fIread\-only\fP: Allow reading, disallow writing or deleting data.
+Existing archives can be read, but no archives can be created or deleted.
+.UNINDENT
 .SH OPTIONS
 .SH OPTIONS
 .sp
 .sp
 See \fIborg\-common(1)\fP for common options of Borg commands.
 See \fIborg\-common(1)\fP for common options of Borg commands.
@@ -63,6 +80,9 @@ restrict repository access to PATH. Can be specified multiple times to allow the
 .TP
 .TP
 .BI \-\-restrict\-to\-repository \ PATH
 .BI \-\-restrict\-to\-repository \ PATH
 restrict repository access. Only the repository located at PATH (no sub\-directories are considered) is accessible. Can be specified multiple times to allow the client access to several repositories. Unlike \fB\-\-restrict\-to\-path\fP sub\-directories are not accessible; PATH needs to point directly at a repository location. PATH may be an empty directory or the last element of PATH may not exist, in which case the client may initialize a repository there.
 restrict repository access. Only the repository located at PATH (no sub\-directories are considered) is accessible. Can be specified multiple times to allow the client access to several repositories. Unlike \fB\-\-restrict\-to\-path\fP sub\-directories are not accessible; PATH needs to point directly at a repository location. PATH may be an empty directory or the last element of PATH may not exist, in which case the client may initialize a repository there.
+.TP
+.B  \-\-permissions
+Set repository permission mode. Overrides BORG_REPO_PERMISSIONS environment variable.
 .UNINDENT
 .UNINDENT
 .SH EXAMPLES
 .SH EXAMPLES
 .sp
 .sp
@@ -94,9 +114,13 @@ locations like \fB/etc/environment\fP or in the forced command itself (example b
 $ cat ~/.ssh/authorized_keys
 $ cat ~/.ssh/authorized_keys
 command=\(dqborg serve \-\-restrict\-to\-path /path/to/repo\(dq,restrict ssh\-rsa AAAAB3[...]
 command=\(dqborg serve \-\-restrict\-to\-path /path/to/repo\(dq,restrict ssh\-rsa AAAAB3[...]
 
 
+# Specify repository permissions for an SSH keypair.
+$ cat ~/.ssh/authorized_keys
+command=\(dqborg serve \-\-permissions=read\-only\(dq,restrict ssh\-rsa AAAAB3[...]
+
 # Set a BORG_XXX environment variable on the \(dqborg serve\(dq side
 # Set a BORG_XXX environment variable on the \(dqborg serve\(dq side
 $ cat ~/.ssh/authorized_keys
 $ cat ~/.ssh/authorized_keys
-command=\(dqexport BORG_XXX=value; borg serve [...]\(dq,restrict ssh\-rsa [...]
+command=\(dqBORG_XXX=value borg serve [...]\(dq,restrict ssh\-rsa [...]
 .EE
 .EE
 .UNINDENT
 .UNINDENT
 .UNINDENT
 .UNINDENT
@@ -104,9 +128,10 @@ command=\(dqexport BORG_XXX=value; borg serve [...]\(dq,restrict ssh\-rsa [...]
 \fBNOTE:\fP
 \fBNOTE:\fP
 .INDENT 0.0
 .INDENT 0.0
 .INDENT 3.5
 .INDENT 3.5
-The examples above use the \fBrestrict\fP directive. This does automatically
-block potential dangerous ssh features, even when they are added in a future
-update. Thus, this option should be preferred.
+The examples above use the \fBrestrict\fP directive and assume a POSIX
+compliant shell set as the user\(aqs login shell.
+This does automatically block potential dangerous ssh features, even when
+they are added in a future update. Thus, this option should be preferred.
 .sp
 .sp
 If you\(aqre using openssh\-server < 7.2, however, you have to specify explicitly
 If you\(aqre using openssh\-server < 7.2, however, you have to specify explicitly
 the ssh features to restrict and cannot simply use the restrict option as it
 the ssh features to restrict and cannot simply use the restrict option as it

+ 1 - 1
docs/man/borg-tag.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-TAG" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-TAG" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-tag \- Manage tags
 borg-tag \- Manage tags
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-transfer.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-TRANSFER" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-TRANSFER" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-transfer \- archives transfer from other repository, optionally upgrade data format
 borg-transfer \- archives transfer from other repository, optionally upgrade data format
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-umount.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-UMOUNT" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-UMOUNT" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-umount \- un-mount the FUSE filesystem
 borg-umount \- un-mount the FUSE filesystem
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-undelete.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-UNDELETE" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-UNDELETE" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-undelete \- Undelete archives
 borg-undelete \- Undelete archives
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-version.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-VERSION" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-VERSION" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-version \- Display the borg client / borg server version
 borg-version \- Display the borg client / borg server version
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 1 - 1
docs/man/borg-with-lock.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG-WITH-LOCK" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG-WITH-LOCK" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-with-lock \- run a user specified command with the repository lock held
 borg-with-lock \- run a user specified command with the repository lock held
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 4 - 1
docs/man/borg.1

@@ -28,7 +28,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORG" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORG" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg \- deduplicating and encrypting backup tool
 borg \- deduplicating and encrypting backup tool
 .SH SYNOPSIS
 .SH SYNOPSIS
@@ -448,6 +448,9 @@ the \fB\-\-rsh CMD\fP commandline option overrides the environment variable.
 When set, use the given path as borg executable on the remote (defaults to \(dqborg\(dq if unset).
 When set, use the given path as borg executable on the remote (defaults to \(dqborg\(dq if unset).
 Using \fB\-\-remote\-path PATH\fP commandline option overrides the environment variable.
 Using \fB\-\-remote\-path PATH\fP commandline option overrides the environment variable.
 .TP
 .TP
+.B BORG_REPO_PERMISSIONS
+Set repository permissions, see also: \fIborg_serve\fP
+.TP
 .B BORG_FILES_CACHE_SUFFIX
 .B BORG_FILES_CACHE_SUFFIX
 When set to a value at least one character long, instructs borg to use a specifically named
 When set to a value at least one character long, instructs borg to use a specifically named
 (based on the suffix) alternative files cache. This can be used to avoid loading and saving
 (based on the suffix) alternative files cache. This can be used to avoid loading and saving

+ 1 - 1
docs/man/borgfs.1

@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
 ..
-.TH "BORGFS" "1" "2025-05-22" "" "borg backup tool"
+.TH "BORGFS" "1" "2025-06-18" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borgfs \- Mount archive or an entire repository as a FUSE filesystem
 borgfs \- Mount archive or an entire repository as a FUSE filesystem
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 0 - 3
docs/usage/create.rst.inc

@@ -67,8 +67,6 @@ borg create
     +-------------------------------------------------------+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
     +-------------------------------------------------------+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
     |                                                       | ``--keep-exclude-tags``                           | if tag objects are specified with ``--exclude-if-present``, don't omit the tag objects themselves from the backup archive                                                                         |
     |                                                       | ``--keep-exclude-tags``                           | if tag objects are specified with ``--exclude-if-present``, don't omit the tag objects themselves from the backup archive                                                                         |
     +-------------------------------------------------------+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
     +-------------------------------------------------------+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-    |                                                       | ``--exclude-nodump``                              | exclude files flagged NODUMP                                                                                                                                                                      |
-    +-------------------------------------------------------+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
     | **Filesystem options**                                                                                                                                                                                                                                                                                        |
     | **Filesystem options**                                                                                                                                                                                                                                                                                        |
     +-------------------------------------------------------+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
     +-------------------------------------------------------+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
     |                                                       | ``-x``, ``--one-file-system``                     | stay in the same file system and do not store mount points of other file systems - this might behave different from your expectations, see the description below.                                 |
     |                                                       | ``-x``, ``--one-file-system``                     | stay in the same file system and do not store mount points of other file systems - this might behave different from your expectations, see the description below.                                 |
@@ -147,7 +145,6 @@ borg create
         --exclude-caches                  exclude directories that contain a CACHEDIR.TAG file (http://www.bford.info/cachedir/spec.html)
         --exclude-caches                  exclude directories that contain a CACHEDIR.TAG file (http://www.bford.info/cachedir/spec.html)
         --exclude-if-present NAME         exclude directories that are tagged by containing a filesystem object with the given NAME
         --exclude-if-present NAME         exclude directories that are tagged by containing a filesystem object with the given NAME
         --keep-exclude-tags               if tag objects are specified with ``--exclude-if-present``, don't omit the tag objects themselves from the backup archive
         --keep-exclude-tags               if tag objects are specified with ``--exclude-if-present``, don't omit the tag objects themselves from the backup archive
-        --exclude-nodump                  exclude files flagged NODUMP
 
 
 
 
     Filesystem options
     Filesystem options

+ 6 - 6
requirements.d/development.lock.txt

@@ -1,12 +1,12 @@
 setuptools==78.1.1
 setuptools==78.1.1
-setuptools-scm==8.2.0
-pip==25.0.1
+setuptools-scm==8.3.1
+pip==25.1.1
 wheel==0.45.1
 wheel==0.45.1
-virtualenv==20.30.0
-build==1.2.2
+virtualenv==20.31.2
+build==1.2.2.post1
 pkgconfig==1.5.5
 pkgconfig==1.5.5
-tox==4.26.0
-pytest==8.4.0
+tox==4.27.0
+pytest==8.4.1
 pytest-xdist==3.7.0
 pytest-xdist==3.7.0
 coverage[toml]==7.9.1
 coverage[toml]==7.9.1
 pytest-cov==6.2.1
 pytest-cov==6.2.1

+ 2 - 1
scripts/borg.exe.spec

@@ -12,7 +12,7 @@ basepath = os.path.abspath(os.path.join(here, '..'))
 if is_win32:
 if is_win32:
     hiddenimports = ['borghash']
     hiddenimports = ['borghash']
 else:
 else:
-    hiddenimports = ['borg.platform.posix', 'pkg_resources.py2_warn', 'borghash']
+    hiddenimports = ['borg.platform.posix', 'borghash']
 
 
 block_cipher = None
 block_cipher = None
 
 
@@ -27,6 +27,7 @@ a = Analysis([os.path.join(basepath, 'src', 'borg', '__main__.py'), ],
              runtime_hooks=[],
              runtime_hooks=[],
              excludes=[
              excludes=[
                 '_ssl', 'ssl',
                 '_ssl', 'ssl',
+                'pkg_resources',  # avoid pkg_resources related warnings
              ],
              ],
              win_no_prefer_redirects=False,
              win_no_prefer_redirects=False,
              win_private_assemblies=False,
              win_private_assemblies=False,