Browse Source

Merge pull request #5672 from ThomasWaldmann/rel120b2

Release 1.2.0b2
TW 4 years ago
parent
commit
940768ef2a

+ 1 - 1
AUTHORS

@@ -1,7 +1,7 @@
 E-mail addresses listed here are not intended for support, please see
 E-mail addresses listed here are not intended for support, please see
 the `support section`_ instead.
 the `support section`_ instead.
 
 
-.. support section: https://borgbackup.readthedocs.io/en/stable/support.html
+.. _support section: https://borgbackup.readthedocs.io/en/stable/support.html
 
 
 Borg authors ("The Borg Collective")
 Borg authors ("The Borg Collective")
 ------------------------------------
 ------------------------------------

+ 27 - 5
docs/changes.rst

@@ -214,11 +214,9 @@ The best check that everything is ok is to run a dry-run extraction::
 
 
 .. _changelog:
 .. _changelog:
 
 
-Changelog
-=========
 
 
-Version 1.2.0rc1 (not released yet)
------------------------------------
+Version 1.2.0b2 (2021-02-06)
+----------------------------
 
 
 Please note:
 Please note:
 
 
@@ -266,6 +264,8 @@ Compatibility notes:
 
 
 Fixes:
 Fixes:
 
 
+- create: do not recurse into duplicate roots, #5603
+- create: only print stats if not ctrl-c'ed, fixes traceback, #5668
 - extract:
 - extract:
   improve exception handling when setting xattrs, #5092.
   improve exception handling when setting xattrs, #5092.
   emit a warning message giving the path, xattr key and error message.
   emit a warning message giving the path, xattr key and error message.
@@ -274,23 +274,45 @@ Fixes:
 - export-tar:
 - export-tar:
   fix memory leak with ssh: remote repository, #5568.
   fix memory leak with ssh: remote repository, #5568.
   fix potential memory leak with ssh: remote repository with partial extraction.
   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:
 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
 - create --remote-buffer, add a upload buffer for remote repos, #5574
-- create --sparse, file map support for the "fixed" chunker, #14
 - prune: keep oldest archive when retention target not met
 - prune: keep oldest archive when retention target not met
 
 
 Other changes:
 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
 - create: add repository location to --stats output, #5491
 - check: debug log the segment filename
 - check: debug log the segment filename
 - delete: add a --list switch to borg delete, #5116
 - 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:
 - docs:
 
 
   - add another case of attempted hardlink usage
   - add another case of attempted hardlink usage
   - fix description of borg upgrade hardlink usage, #5518
   - fix description of borg upgrade hardlink usage, #5518
   - use HTTPS everywhere
   - 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:
 - vagrant:
 
 
   - use brew install --cask ..., #5557
   - use brew install --cask ..., #5557

+ 7 - 7
docs/faq.rst

@@ -833,7 +833,7 @@ E.g., for this setup:
 - repository is remote (does not matter much for unchanged files)
 - repository is remote (does not matter much for unchanged files)
 - backup job runs while machine is otherwise idle
 - backup job runs while machine is otherwise idle
 
 
-The observed performance is that |project_name| can process about
+The observed performance is that Borg can process about
 **1 million unchanged files (and a few small changed ones) in 4 minutes!**
 **1 million unchanged files (and a few small changed ones) in 4 minutes!**
 
 
 If you are seeing much less than that in similar circumstances, read the next
 If you are seeing much less than that in similar circumstances, read the next
@@ -844,7 +844,7 @@ few FAQ entries below.
 Why is backup slow for me?
 Why is backup slow for me?
 --------------------------
 --------------------------
 
 
-So, if you feel your |project_name| backup is too slow somehow, you should find out why.
+So, if you feel your Borg backup is too slow somehow, you should find out why.
 
 
 The usual way to approach this is to add ``--list --filter=AME --stats`` to your
 The usual way to approach this is to add ``--list --filter=AME --stats`` to your
 ``borg create`` call to produce more log output, including a file list (with file status
 ``borg create`` call to produce more log output, including a file list (with file status
@@ -856,15 +856,15 @@ Then you do the backup and look at the log output:
   In the stats you can see the overall volume of changed data, which needed to be
   In the stats you can see the overall volume of changed data, which needed to be
   added to the repo. If that is a lot, that can be the reason why it is slow.
   added to the repo. If that is a lot, that can be the reason why it is slow.
 - ``A`` status ("added") in the file list:
 - ``A`` status ("added") in the file list:
-  If you see that often, you have a lot of new files (files that |project_name| did not find
+  If you see that often, you have a lot of new files (files that Borg did not find
   in the files cache). If you think there is something wrong with that (the file was there
   in the files cache). If you think there is something wrong with that (the file was there
   already in the previous backup), please read the FAQ entries below.
   already in the previous backup), please read the FAQ entries below.
 - ``M`` status ("modified") in the file list:
 - ``M`` status ("modified") in the file list:
-  If you see that often, |project_name| thinks that a lot of your files might be modified
-  (|project_name| found them in the files cache, but the metadata read from the filesystem did
+  If you see that often, Borg thinks that a lot of your files might be modified
+  (Borg found them in the files cache, but the metadata read from the filesystem did
   not match the metadata stored in the files cache).
   not match the metadata stored in the files cache).
-  In such a case, |project_name| will need to process the files' contents completely, which is
-  much slower than processing unmodified files (|project_name| does not read their contents!).
+  In such a case, Borg will need to process the files' contents completely, which is
+  much slower than processing unmodified files (Borg does not read their contents!).
   The metadata values used in this comparison are determined by the ``--files-cache`` option
   The metadata values used in this comparison are determined by the ``--files-cache`` option
   and could be e.g. size, ctime and inode number (see the ``borg create`` docs for more
   and could be e.g. size, ctime and inode number (see the ``borg create`` docs for more
   details and potential issues).
   details and potential issues).

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-BENCHMARK-CRUD 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-BENCHMARK-CRUD 1 "2021-02-06" "" "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.
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-BENCHMARK 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-BENCHMARK 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-benchmark \- benchmark command
 borg-benchmark \- benchmark command
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-BREAK-LOCK 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-BREAK-LOCK 1 "2021-02-06" "" "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.
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-CHECK 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-CHECK 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-check \- Check repository consistency
 borg-check \- Check repository consistency
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-COMMON 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-COMMON 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-common \- Common options of Borg commands
 borg-common \- Common options of Borg commands
 .
 .
@@ -81,6 +81,9 @@ use PATH as borg executable on the remote (default: "borg")
 .BI \-\-remote\-ratelimit \ RATE
 .BI \-\-remote\-ratelimit \ RATE
 set remote network upload rate limit in kiByte/s (default: 0=unlimited)
 set remote network upload rate limit in kiByte/s (default: 0=unlimited)
 .TP
 .TP
+.BI \-\-remote\-buffer \ UPLOAD_BUFFER
+set upload buffer size in MiB. (default: 0=no buffer)
+.TP
 .B \-\-consider\-part\-files
 .B \-\-consider\-part\-files
 treat part files like normal files (e.g. to list/extract them)
 treat part files like normal files (e.g. to list/extract them)
 .TP
 .TP

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-COMPACT 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-COMPACT 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-compact \- compact segment files in the repository
 borg-compact \- compact segment files in the repository
 .
 .
@@ -48,7 +48,7 @@ Depending on the amount of segments that need compaction, it may take a while,
 so consider using the \fB\-\-progress\fP option.
 so consider using the \fB\-\-progress\fP option.
 .sp
 .sp
 A segment is compacted if the amount of saved space is above the percentage value
 A segment is compacted if the amount of saved space is above the percentage value
-given by the \fB\-\-threshold\fP option. If ommitted, a threshold of 10% is used.
+given by the \fB\-\-threshold\fP option. If omitted, a threshold of 10% is used.
 When using \fB\-\-verbose\fP, borg will output an estimate of the freed space.
 When using \fB\-\-verbose\fP, borg will output an estimate of the freed space.
 .sp
 .sp
 After upgrading borg (server) to 1.2+, you can use \fBborg compact \-\-cleanup\-commits\fP
 After upgrading borg (server) to 1.2+, you can use \fBborg compact \-\-cleanup\-commits\fP

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-COMPRESSION 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-COMPRESSION 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-compression \- Details regarding compression
 borg-compression \- Details regarding compression
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-CONFIG 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-CONFIG 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-config \- get, set, and delete values in a repository or cache config file
 borg-config \- get, set, and delete values in a repository or cache config file
 .
 .

+ 19 - 2
docs/man/borg-create.1

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-CREATE 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-CREATE 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-create \- Create new archive
 borg-create \- Create new archive
 .
 .
@@ -231,6 +231,9 @@ deprecated, use \fB\-\-noflags\fP instead
 .B \-\-noflags
 .B \-\-noflags
 do not read and store flags (e.g. NODUMP, IMMUTABLE) into archive
 do not read and store flags (e.g. NODUMP, IMMUTABLE) into archive
 .TP
 .TP
+.B \-\-sparse
+detect sparse holes in input (supported only by fixed chunker)
+.TP
 .BI \-\-files\-cache \ MODE
 .BI \-\-files\-cache \ MODE
 operate files cache in MODE. default: ctime,size,inode
 operate files cache in MODE. default: ctime,size,inode
 .TP
 .TP
@@ -300,7 +303,10 @@ $ fusermount \-u sshfs\-mount
 $ borg create \-\-chunker\-params buzhash,10,23,16,4095 /path/to/repo::small /smallstuff
 $ borg create \-\-chunker\-params buzhash,10,23,16,4095 /path/to/repo::small /smallstuff
 
 
 # Backup a raw device (must not be active/in use/mounted at that time)
 # Backup a raw device (must not be active/in use/mounted at that time)
-$ dd if=/dev/sdx bs=4M | borg create \-\-chunker\-params fixed,4194304 /path/to/repo::my\-sdx \-
+$ borg create \-\-read\-special \-\-chunker\-params fixed,4194304 /path/to/repo::my\-sdx /dev/sdX
+
+# Backup a sparse disk image (must not be active/in use/mounted at that time)
+$ borg create \-\-sparse \-\-chunker\-params fixed,4194304 /path/to/repo::my\-disk my\-disk.raw
 
 
 # No compression (none)
 # No compression (none)
 $ borg create \-\-compression none /path/to/repo::arch ~
 $ borg create \-\-compression none /path/to/repo::arch ~
@@ -328,6 +334,17 @@ $ borg create /path/to/repo::{hostname}\-{user}\-{now:%Y\-%m\-%dT%H:%M:%S.%f} ~
 $ cd /home/user/Documents
 $ cd /home/user/Documents
 # The root directory of the archive will be "projectA"
 # The root directory of the archive will be "projectA"
 $ borg create /path/to/repo::daily\-projectA\-{now:%Y\-%m\-%d} projectA
 $ borg create /path/to/repo::daily\-projectA\-{now:%Y\-%m\-%d} projectA
+
+# Use external command to determine files to archive
+# Use \-\-paths\-from\-stdin with find to only backup files less than 1MB in size
+$ find ~ \-size \-1000k | borg create \-\-paths\-from\-stdin /path/to/repo::small\-files\-only
+# Use \-\-paths\-from\-command with find to only backup files from a given user
+$ borg create \-\-paths\-from\-command /path/to/repo::joes\-files \-\- find /srv/samba/shared \-user joe
+# Use \-\-paths\-from\-stdin with \-\-paths\-delimiter (for example, for filenames with newlines in them)
+$ find ~ \-size \-1000k \-print0 | borg create \e
+    \-\-paths\-from\-stdin \e
+    \-\-paths\-delimiter "\e0" \e
+    /path/to/repo::smallfiles\-handle\-newline
 .ft P
 .ft P
 .fi
 .fi
 .UNINDENT
 .UNINDENT

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-DELETE 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-DELETE 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-delete \- Delete an existing repository or archives
 borg-delete \- Delete an existing repository or archives
 .
 .
@@ -45,6 +45,8 @@ When you delete a complete repository, the security info and local cache for it
 with the \fB\-\-cache\-only\fP option, or keep the security info with the
 with the \fB\-\-cache\-only\fP option, or keep the security info with the
 \fB\-\-keep\-security\-info\fP option.
 \fB\-\-keep\-security\-info\fP option.
 .sp
 .sp
+When in doubt, use \fB\-\-dry\-run \-\-list\fP to see what would be deleted.
+.sp
 When using \fB\-\-stats\fP, you will get some statistics about how much data was
 When using \fB\-\-stats\fP, you will get some statistics about how much data was
 deleted \- the "Deleted data" deduplicated size there is most interesting as
 deleted \- the "Deleted data" deduplicated size there is most interesting as
 that is how much your repository will shrink.
 that is how much your repository will shrink.
@@ -77,6 +79,9 @@ archives to delete
 .B \-n\fP,\fB  \-\-dry\-run
 .B \-n\fP,\fB  \-\-dry\-run
 do not change repository
 do not change repository
 .TP
 .TP
+.B \-\-list
+output verbose list of archives
+.TP
 .B \-s\fP,\fB  \-\-stats
 .B \-s\fP,\fB  \-\-stats
 print statistics for the deleted archive
 print statistics for the deleted archive
 .TP
 .TP
@@ -128,7 +133,7 @@ $ borg delete \-\-prefix \(aq{hostname}\-\(aq /path/to/repo
 $ borg delete \-\-glob\-archives \(aq*\-2012\-*\(aq /path/to/repo
 $ borg delete \-\-glob\-archives \(aq*\-2012\-*\(aq /path/to/repo
 
 
 # see what would be deleted if delete was run without \-\-dry\-run
 # see what would be deleted if delete was run without \-\-dry\-run
-$ borg delete \-v \-\-dry\-run \-a \(aq*\-May\-*\(aq /path/to/repo
+$ borg delete \-\-list \-\-dry\-run \-a \(aq*\-May\-*\(aq /path/to/repo
 
 
 # delete the whole repository and the related local cache:
 # delete the whole repository and the related local cache:
 $ borg delete /path/to/repo
 $ borg delete /path/to/repo

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-DIFF 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-DIFF 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-diff \- Diff contents of two archives
 borg-diff \- Diff contents of two archives
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-EXPORT-TAR 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-EXPORT-TAR 1 "2021-02-06" "" "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
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-EXTRACT 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-EXTRACT 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-extract \- Extract archive contents
 borg-extract \- Extract archive contents
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-INFO 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-INFO 1 "2021-02-06" "" "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
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-INIT 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-INIT 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-init \- Initialize an empty repository
 borg-init \- Initialize an empty repository
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-KEY-CHANGE-PASSPHRASE 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-KEY-CHANGE-PASSPHRASE 1 "2021-02-06" "" "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
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-KEY-EXPORT 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-KEY-EXPORT 1 "2021-02-06" "" "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
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-KEY-IMPORT 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-KEY-IMPORT 1 "2021-02-06" "" "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
 .
 .

+ 1 - 1
docs/man/borg-key-migrate-to-repokey.1

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-KEY-MIGRATE-TO-REPOKEY 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-KEY-MIGRATE-TO-REPOKEY 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-key-migrate-to-repokey \- Migrate passphrase -> repokey
 borg-key-migrate-to-repokey \- Migrate passphrase -> repokey
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-KEY 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-KEY 1 "2021-02-06" "" "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
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-LIST 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-LIST 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-list \- List archive or repository contents
 borg-list \- List archive or repository contents
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-MOUNT 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-MOUNT 1 "2021-02-06" "" "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
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-PATTERNS 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-PATTERNS 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-patterns \- Details regarding patterns
 borg-patterns \- Details regarding patterns
 .
 .
@@ -193,7 +193,7 @@ with the prefix \-, an exclude\-norecurse rule starts with !, all followed by a
 .INDENT 3.5
 .INDENT 3.5
 Via \fB\-\-pattern\fP or \fB\-\-patterns\-from\fP you can define BOTH inclusion and exclusion
 Via \fB\-\-pattern\fP or \fB\-\-patterns\-from\fP you can define BOTH inclusion and exclusion
 of files using pattern prefixes \fB+\fP and \fB\-\fP\&. With \fB\-\-exclude\fP and
 of files using pattern prefixes \fB+\fP and \fB\-\fP\&. With \fB\-\-exclude\fP and
-\fB\-\-exlude\-from\fP ONLY excludes are defined.
+\fB\-\-exclude\-from\fP ONLY excludes are defined.
 .UNINDENT
 .UNINDENT
 .UNINDENT
 .UNINDENT
 .sp
 .sp

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-PLACEHOLDERS 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-PLACEHOLDERS 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-placeholders \- Details regarding placeholders
 borg-placeholders \- Details regarding placeholders
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-PRUNE 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-PRUNE 1 "2021-02-06" "" "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
 .
 .
@@ -72,7 +72,11 @@ The rules are applied from secondly to yearly, and backups selected by previous
 rules do not count towards those of later rules. The time that each backup
 rules do not count towards those of later rules. The time that each backup
 starts is used for pruning purposes. Dates and times are interpreted in
 starts is used for pruning purposes. Dates and times are interpreted in
 the local timezone, and weeks go from Monday to Sunday. Specifying a
 the local timezone, and weeks go from Monday to Sunday. Specifying a
-negative number of archives to keep means that there is no limit.
+negative number of archives to keep means that there is no limit. As of borg
+1.2.0, borg will retain the oldest archive if any of the secondly, minutely,
+hourly, daily, weekly, monthly, or yearly rules was not otherwise able to meet
+its retention target. This enables the first chronological archive to continue
+aging until it is replaced by a newer archive that meets the retention criteria.
 .sp
 .sp
 The \fB\-\-keep\-last N\fP option is doing the same as \fB\-\-keep\-secondly N\fP (and it will
 The \fB\-\-keep\-last N\fP option is doing the same as \fB\-\-keep\-secondly N\fP (and it will
 keep the last N archives under the assumption that you do not create more than one
 keep the last N archives under the assumption that you do not create more than one

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-RECREATE 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-RECREATE 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-recreate \- Re-create archives
 borg-recreate \- Re-create archives
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-RENAME 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-RENAME 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-rename \- Rename an existing archive
 borg-rename \- Rename an existing archive
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-SERVE 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-SERVE 1 "2021-02-06" "" "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.
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-UMOUNT 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-UMOUNT 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-umount \- un-mount the FUSE filesystem
 borg-umount \- un-mount the FUSE filesystem
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-UPGRADE 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-UPGRADE 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg-upgrade \- upgrade a repository from a previous version
 borg-upgrade \- upgrade a repository from a previous version
 .
 .

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

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG-WITH-LOCK 1 "2020-12-06" "" "borg backup tool"
+.TH BORG-WITH-LOCK 1 "2021-02-06" "" "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
 .
 .

+ 5 - 3
docs/man/borg.1

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORG 1 "2020-12-06" "" "borg backup tool"
+.TH BORG 1 "2021-02-06" "" "borg backup tool"
 .SH NAME
 .SH NAME
 borg \- deduplicating and encrypting backup tool
 borg \- deduplicating and encrypting backup tool
 .
 .
@@ -205,7 +205,7 @@ borg create repo::archive \-s \-\-progress path  # BAD
 .UNINDENT
 .UNINDENT
 .UNINDENT
 .UNINDENT
 .sp
 .sp
-This is due to a problem in the argparse module: \fI\%http://bugs.python.org/issue15112\fP
+This is due to a problem in the argparse module: \fI\%https://bugs.python.org/issue15112\fP
 .SS Repository URLs
 .SS Repository URLs
 .sp
 .sp
 \fBLocal filesystem\fP (or locally mounted network filesystem):
 \fBLocal filesystem\fP (or locally mounted network filesystem):
@@ -609,7 +609,9 @@ it should be a move (not a copy) operation, and in case of a directory
 it should fail if the destination exists and is not an empty directory,
 it should fail if the destination exists and is not an empty directory,
 since this is used for locking.
 since this is used for locking.
 .IP \(bu 2
 .IP \(bu 2
-Hardlinks are needed for \fIborg_upgrade\fP \fB\-\-inplace\fP
+Hardlinks are needed for \fIborg_upgrade\fP (if \fB\-\-inplace\fP option is not used).
+Also hardlinks are used for more safe and secure file updating (e.g. of the repo
+config file), but the code tries to work also if hardlinks are not supported.
 .UNINDENT
 .UNINDENT
 .SS Units
 .SS Units
 .sp
 .sp

+ 1 - 1
docs/man/borgfs.1

@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .\" Man page generated from reStructuredText.
 .
 .
-.TH BORGFS 1 "2020-12-06" "" "borg backup tool"
+.TH BORGFS 1 "2021-02-06" "" "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
 .
 .

+ 1 - 1
docs/usage/common-options.rst.inc

@@ -14,7 +14,7 @@
 --umask M          set umask to M (local only, default: 0077)
 --umask M          set umask to M (local only, default: 0077)
 --remote-path PATH    use PATH as borg executable on the remote (default: "borg")
 --remote-path PATH    use PATH as borg executable on the remote (default: "borg")
 --remote-ratelimit RATE    set remote network upload rate limit in kiByte/s (default: 0=unlimited)
 --remote-ratelimit RATE    set remote network upload rate limit in kiByte/s (default: 0=unlimited)
---remote-buffer UPLOAD_BUFFER   set upload buffer size in MiB. (default: 0=no buffer)
+--remote-buffer UPLOAD_BUFFER    set upload buffer size in MiB. (default: 0=no buffer)
 --consider-part-files    treat part files like normal files (e.g. to list/extract them)
 --consider-part-files    treat part files like normal files (e.g. to list/extract them)
 --debug-profile FILE    Write execution profile in Borg format into FILE. For local use a Python-compatible file can be generated by suffixing FILE with ".pyprof".
 --debug-profile FILE    Write execution profile in Borg format into FILE. For local use a Python-compatible file can be generated by suffixing FILE with ".pyprof".
 --rsh RSH          Use this command to connect to the 'borg serve' process (default: 'ssh')
 --rsh RSH          Use this command to connect to the 'borg serve' process (default: 'ssh')

+ 1 - 1
docs/usage/compact.rst.inc

@@ -66,7 +66,7 @@ Depending on the amount of segments that need compaction, it may take a while,
 so consider using the ``--progress`` option.
 so consider using the ``--progress`` option.
 
 
 A segment is compacted if the amount of saved space is above the percentage value
 A segment is compacted if the amount of saved space is above the percentage value
-given by the ``--threshold`` option. If ommitted, a threshold of 10% is used.
+given by the ``--threshold`` option. If omitted, a threshold of 10% is used.
 When using ``--verbose``, borg will output an estimate of the freed space.
 When using ``--verbose``, borg will output an estimate of the freed space.
 
 
 After upgrading borg (server) to 1.2+, you can use ``borg compact --cleanup-commits``
 After upgrading borg (server) to 1.2+, you can use ``borg compact --cleanup-commits``

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

@@ -89,6 +89,8 @@ borg create
     +-------------------------------------------------------+---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
     +-------------------------------------------------------+---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
     |                                                       | ``--noflags``                                     | do not read and store flags (e.g. NODUMP, IMMUTABLE) into archive                                                                                    |
     |                                                       | ``--noflags``                                     | do not read and store flags (e.g. NODUMP, IMMUTABLE) into archive                                                                                    |
     +-------------------------------------------------------+---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
     +-------------------------------------------------------+---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
+    |                                                       | ``--sparse``                                      | detect sparse holes in input (supported only by fixed chunker)                                                                                       |
+    +-------------------------------------------------------+---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
     |                                                       | ``--files-cache MODE``                            | operate files cache in MODE. default: ctime,size,inode                                                                                               |
     |                                                       | ``--files-cache MODE``                            | operate files cache in MODE. default: ctime,size,inode                                                                                               |
     +-------------------------------------------------------+---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
     +-------------------------------------------------------+---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
     |                                                       | ``--read-special``                                | open and read block and char device files as well as FIFOs as if they were regular files. Also follows symlinks pointing to these kinds of files.    |
     |                                                       | ``--read-special``                                | open and read block and char device files as well as FIFOs as if they were regular files. Also follows symlinks pointing to these kinds of files.    |
@@ -162,6 +164,7 @@ borg create
         --nobirthtime             do not store birthtime (creation date) into archive
         --nobirthtime             do not store birthtime (creation date) into archive
         --nobsdflags              deprecated, use ``--noflags`` instead
         --nobsdflags              deprecated, use ``--noflags`` instead
         --noflags                 do not read and store flags (e.g. NODUMP, IMMUTABLE) into archive
         --noflags                 do not read and store flags (e.g. NODUMP, IMMUTABLE) into archive
+        --sparse                  detect sparse holes in input (supported only by fixed chunker)
         --files-cache MODE        operate files cache in MODE. default: ctime,size,inode
         --files-cache MODE        operate files cache in MODE. default: ctime,size,inode
         --read-special            open and read block and char device files as well as FIFOs as if they were regular files. Also follows symlinks pointing to these kinds of files.
         --read-special            open and read block and char device files as well as FIFOs as if they were regular files. Also follows symlinks pointing to these kinds of files.
 
 

+ 5 - 0
docs/usage/delete.rst.inc

@@ -23,6 +23,8 @@ borg delete
     +-----------------------------------------------------------------------------+---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
     +-----------------------------------------------------------------------------+---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
     |                                                                             | ``-n``, ``--dry-run``                 | do not change repository                                                                                                                               |
     |                                                                             | ``-n``, ``--dry-run``                 | do not change repository                                                                                                                               |
     +-----------------------------------------------------------------------------+---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
     +-----------------------------------------------------------------------------+---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
+    |                                                                             | ``--list``                            | output verbose list of archives                                                                                                                        |
+    +-----------------------------------------------------------------------------+---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
     |                                                                             | ``-s``, ``--stats``                   | print statistics for the deleted archive                                                                                                               |
     |                                                                             | ``-s``, ``--stats``                   | print statistics for the deleted archive                                                                                                               |
     +-----------------------------------------------------------------------------+---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
     +-----------------------------------------------------------------------------+---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
     |                                                                             | ``--cache-only``                      | delete only the local cache for the given repository                                                                                                   |
     |                                                                             | ``--cache-only``                      | delete only the local cache for the given repository                                                                                                   |
@@ -68,6 +70,7 @@ borg delete
 
 
     optional arguments
     optional arguments
         -n, --dry-run    do not change repository
         -n, --dry-run    do not change repository
+        --list          output verbose list of archives
         -s, --stats     print statistics for the deleted archive
         -s, --stats     print statistics for the deleted archive
         --cache-only    delete only the local cache for the given repository
         --cache-only    delete only the local cache for the given repository
         --force         force deletion of corrupted archives, use ``--force --force`` in case ``--force`` does not work.
         --force         force deletion of corrupted archives, use ``--force --force`` in case ``--force`` does not work.
@@ -99,6 +102,8 @@ When you delete a complete repository, the security info and local cache for it
 with the ``--cache-only`` option, or keep the security info with the
 with the ``--cache-only`` option, or keep the security info with the
 ``--keep-security-info`` option.
 ``--keep-security-info`` option.
 
 
+When in doubt, use ``--dry-run --list`` to see what would be deleted.
+
 When using ``--stats``, you will get some statistics about how much data was
 When using ``--stats``, you will get some statistics about how much data was
 deleted - the "Deleted data" deduplicated size there is most interesting as
 deleted - the "Deleted data" deduplicated size there is most interesting as
 that is how much your repository will shrink.
 that is how much your repository will shrink.

+ 1 - 1
docs/usage/help.rst.inc

@@ -156,7 +156,7 @@ Examples::
 
 
         Via ``--pattern`` or ``--patterns-from`` you can define BOTH inclusion and exclusion
         Via ``--pattern`` or ``--patterns-from`` you can define BOTH inclusion and exclusion
         of files using pattern prefixes ``+`` and ``-``. With ``--exclude`` and
         of files using pattern prefixes ``+`` and ``-``. With ``--exclude`` and
-        ``--exlude-from`` ONLY excludes are defined.
+        ``--exclude-from`` ONLY excludes are defined.
 
 
     Inclusion patterns are useful to include paths that are contained in an excluded
     Inclusion patterns are useful to include paths that are contained in an excluded
     path. The first matching pattern is used so if an include pattern matches before
     path. The first matching pattern is used so if an include pattern matches before

+ 5 - 1
docs/usage/prune.rst.inc

@@ -134,7 +134,11 @@ The rules are applied from secondly to yearly, and backups selected by previous
 rules do not count towards those of later rules. The time that each backup
 rules do not count towards those of later rules. The time that each backup
 starts is used for pruning purposes. Dates and times are interpreted in
 starts is used for pruning purposes. Dates and times are interpreted in
 the local timezone, and weeks go from Monday to Sunday. Specifying a
 the local timezone, and weeks go from Monday to Sunday. Specifying a
-negative number of archives to keep means that there is no limit.
+negative number of archives to keep means that there is no limit. As of borg
+1.2.0, borg will retain the oldest archive if any of the secondly, minutely,
+hourly, daily, weekly, monthly, or yearly rules was not otherwise able to meet
+its retention target. This enables the first chronological archive to continue
+aging until it is replaced by a newer archive that meets the retention criteria.
 
 
 The ``--keep-last N`` option is doing the same as ``--keep-secondly N`` (and it will
 The ``--keep-last N`` option is doing the same as ``--keep-secondly N`` (and it will
 keep the last N archives under the assumption that you do not create more than one
 keep the last N archives under the assumption that you do not create more than one

+ 1 - 1
src/borg/testsuite/archiver.py

@@ -463,7 +463,7 @@ class ArchiverTestCase(ArchiverTestCaseBase):
         archive_list = self.cmd('list', '--json-lines', self.repository_location + '::test')
         archive_list = self.cmd('list', '--json-lines', self.repository_location + '::test')
         paths = [json.loads(line)['path'] for line in archive_list.split('\n') if line]
         paths = [json.loads(line)['path'] for line in archive_list.split('\n') if line]
         # we have all fs items exactly once!
         # we have all fs items exactly once!
-        assert paths == ['input', 'input/a', 'input/a/hardlink', 'input/b', 'input/b/hardlink']
+        assert sorted(paths) == ['input', 'input/a', 'input/a/hardlink', 'input/b', 'input/b/hardlink']
 
 
     def test_init_parent_dirs(self):
     def test_init_parent_dirs(self):
         parent_path = os.path.join(self.tmpdir, 'parent1', 'parent2')
         parent_path = os.path.join(self.tmpdir, 'parent1', 'parent2')