Compare commits

..
Author SHA1 Message Date
Michael Eischer e1bb2129ad report result of delete operation after failed upload 2021-03-08 21:54:46 +01:00
Michael Eischer 95b7f8dd81 s3: Fix sanity check
The sanity check shouldn't replace the error message if there is already
one.
2021-03-08 21:54:46 +01:00
Michael Eischer 29e39e247a stat file after retrying an upload 2021-03-08 21:54:46 +01:00
137 changed files with 2115 additions and 6122 deletions
+16 -16
View File
@@ -1,7 +1,13 @@
<!-- <!--
Thank you very much for contributing code or documentation to restic! Please Thank you very much for contributing code or documentation to restic! Please
fill out the following questions to make it easier for us to review your fill out the following questions to make it easier for us to review your
changes. changes.
You do not need to check all the boxes below all at once, feel free to take
your time and add more commits. If you're done and ready for review, please
check the last box.
--> -->
What does this PR change? What problem does it solve? What does this PR change? What problem does it solve?
@@ -11,8 +17,8 @@ What does this PR change? What problem does it solve?
Describe the changes and their purpose here, as detailed as needed. Describe the changes and their purpose here, as detailed as needed.
--> -->
Was the change previously discussed in an issue or on the forum? Was the change discussed in an issue or in the forum before?
---------------------------------------------------------------- ------------------------------------------------------------
<!-- <!--
Link issues and relevant forum posts here. Link issues and relevant forum posts here.
@@ -24,17 +30,11 @@ is closed automatically when this PR is merged.
Checklist Checklist
--------- ---------
<!-- - [ ] I have read the [Contribution Guidelines](https://github.com/restic/restic/blob/master/CONTRIBUTING.md#providing-patches)
You do not need to check all the boxes below all at once. Feel free to take - [ ] I have enabled [maintainer edits for this PR](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/allowing-changes-to-a-pull-request-branch-created-from-a-fork)
your time and add more commits. If you're done and ready for review, please - [ ] I have added tests for all changes in this PR
check the last box. Enable a checkbox by replacing [ ] with [x]. - [ ] I have added documentation for the changes (in the manual)
--> - [ ] There's a new file in `changelog/unreleased/` that describes the changes for our users (template [here](https://github.com/restic/restic/blob/master/changelog/TEMPLATE))
- [ ] I have run `gofmt` on the code in all commits
- [ ] I have read the [contribution guidelines](https://github.com/restic/restic/blob/master/CONTRIBUTING.md#providing-patches). - [ ] All commit messages are formatted in the same style as [the other commits in the repo](https://github.com/restic/restic/blob/master/CONTRIBUTING.md#git-commits)
- [ ] I have [enabled maintainer edits](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/allowing-changes-to-a-pull-request-branch-created-from-a-fork). - [ ] I'm done, this Pull Request is ready for review
- [ ] I have added tests for all code changes.
- [ ] I have added documentation for relevant changes (in the manual).
- [ ] There's a new file in `changelog/unreleased/` that describes the changes for our users (see [template](https://github.com/restic/restic/blob/master/changelog/TEMPLATE)).
- [ ] I have run `gofmt` on the code in all commits.
- [ ] All commit messages are formatted in the same style as [the other commits in the repo](https://github.com/restic/restic/blob/master/CONTRIBUTING.md#git-commits).
- [ ] I'm done! This pull request is ready for review.
+6 -19
View File
@@ -15,26 +15,21 @@ jobs:
# list of jobs to run: # list of jobs to run:
include: include:
- job_name: Windows - job_name: Windows
go: 1.16.x go: 1.15.x
os: windows-latest os: windows-latest
- job_name: macOS - job_name: macOS
go: 1.16.x go: 1.15.x
os: macOS-latest os: macOS-latest
test_fuse: false test_fuse: false
- job_name: Linux - job_name: Linux
go: 1.16.x go: 1.15.x
os: ubuntu-latest os: ubuntu-latest
test_cloud_backends: true test_cloud_backends: true
test_fuse: true test_fuse: true
check_changelog: true check_changelog: true
- job_name: Linux
go: 1.15.x
os: ubuntu-latest
test_fuse: true
- job_name: Linux - job_name: Linux
go: 1.14.x go: 1.14.x
os: ubuntu-latest os: ubuntu-latest
@@ -195,18 +190,18 @@ jobs:
matrix: matrix:
# run cross-compile in two batches parallel so the overall tests run faster # run cross-compile in two batches parallel so the overall tests run faster
targets: targets:
- "linux/386 linux/amd64 linux/arm linux/arm64 linux/ppc64le linux/mips linux/mipsle linux/mips64 linux/mips64le linux/s390x \ - "linux/386 linux/amd64 linux/arm linux/arm64 linux/ppc64le linux/mips linux/mipsle linux/mips64 linux/mips64le \
openbsd/386 openbsd/amd64" openbsd/386 openbsd/amd64"
- "freebsd/386 freebsd/amd64 freebsd/arm \ - "freebsd/386 freebsd/amd64 freebsd/arm \
aix/ppc64 \ aix/ppc64 \
darwin/amd64 darwin/arm64 \ darwin/amd64 \
netbsd/386 netbsd/amd64 \ netbsd/386 netbsd/amd64 \
windows/386 windows/amd64 \ windows/386 windows/amd64 \
solaris/amd64" solaris/amd64"
env: env:
go: 1.16.x go: 1.15.x
GOPROXY: https://proxy.golang.org GOPROXY: https://proxy.golang.org
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -238,14 +233,7 @@ jobs:
lint: lint:
name: lint name: lint
runs-on: ubuntu-latest runs-on: ubuntu-latest
env:
go: 1.16.x
steps: steps:
- name: Set up Go ${{ env.go }}
uses: actions/setup-go@v2
with:
go-version: ${{ env.go }}
- name: Check out code - name: Check out code
uses: actions/checkout@v2 uses: actions/checkout@v2
@@ -257,7 +245,6 @@ jobs:
# Optional: show only new issues if it's a pull request. The default value is `false`. # Optional: show only new issues if it's a pull request. The default value is `false`.
only-new-issues: true only-new-issues: true
args: --verbose --timeout 5m args: --verbose --timeout 5m
skip-go-installation: true
# only run golangci-lint for pull requests, otherwise ALL hints get # only run golangci-lint for pull requests, otherwise ALL hints get
# reported. We need to slowly address all issues until we can enable # reported. We need to slowly address all issues until we can enable
-246
View File
@@ -1,249 +1,3 @@
Changelog for restic 0.12.1 (2021-08-03)
=======================================
The following sections list the changes in restic 0.12.1 relevant to
restic users. The changes are ordered by importance.
Summary
-------
* Fix #2742: Improve error handling for rclone and REST backend over HTTP2
* Fix #3111: Fix terminal output redirection for PowerShell
* Fix #3214: Treat an empty password as a fatal error for repository init
* Fix #3267: `copy` failed to copy snapshots in rare cases
* Fix #3184: `backup --quiet` no longer prints status information
* Fix #3296: Fix crash of `check --read-data-subset=x%` run for an empty repository
* Fix #3302: Fix `fdopendir: not a directory` error for local backend
* Fix #3334: Print `created new cache` message only on a terminal
* Fix #3380: Fix crash of `backup --exclude='**'`
* Fix #3305: Fix possibly missing backup summary of JSON output in case of error
* Fix #3439: Correctly handle download errors during `restore`
* Chg #3247: Empty files now have size of 0 in `ls --json` output
* Enh #2780: Add release binaries for s390x architecture on Linux
* Enh #3293: Add `--repository-file2` option to `init` and `copy` command
* Enh #3312: Add auto-completion support for fish
* Enh #3336: SFTP backend now checks for disk space
* Enh #3377: Add release binaries for Apple Silicon
* Enh #3414: Add `--keep-within-hourly` option to restic forget
* Enh #3456: Support filtering and specifying untagged snapshots
* Enh #3167: Allow specifying limit of `snapshots` list
* Enh #3426: Optimize read performance of mount command
* Enh #3427: `find --pack` fallback to index if data file is missing
Details
-------
* Bugfix #2742: Improve error handling for rclone and REST backend over HTTP2
When retrieving data from the rclone / REST backend while also using HTTP2 restic did not detect
when no data was returned at all. This could cause for example the `check` command to report the
following error:
Pack ID does not match, want [...], got e3b0c442
This has been fixed by correctly detecting and retrying the incomplete download.
https://github.com/restic/restic/issues/2742
https://github.com/restic/restic/pull/3453
https://forum.restic.net/t/http2-stream-closed-connection-reset-context-canceled/3743/10
* Bugfix #3111: Fix terminal output redirection for PowerShell
When redirecting the output of restic using PowerShell on Windows, the output contained
terminal escape characters. This has been fixed by properly detecting the terminal type.
In addition, the mintty terminal now shows progress output for the backup command.
https://github.com/restic/restic/issues/3111
https://github.com/restic/restic/pull/3325
* Bugfix #3214: Treat an empty password as a fatal error for repository init
When attempting to initialize a new repository, if an empty password was supplied, the
repository would be created but the init command would return an error with a stack trace. Now,
if an empty password is provided, it is treated as a fatal error, and no repository is created.
https://github.com/restic/restic/issues/3214
https://github.com/restic/restic/pull/3283
* Bugfix #3267: `copy` failed to copy snapshots in rare cases
The `copy` command could in rare cases fail with the error message `SaveTree(...) returned
unexpected id ...`. This has been fixed.
On Linux/BSDs, the error could be caused by backing up symlinks with non-UTF-8 target paths.
Note that, due to limitations in the repository format, these are not stored properly and
should be avoided if possible.
https://github.com/restic/restic/issues/3267
https://github.com/restic/restic/pull/3310
* Bugfix #3184: `backup --quiet` no longer prints status information
A regression in the latest restic version caused the output of `backup --quiet` to contain
large amounts of backup progress information when run using an interactive terminal. This is
fixed now.
A workaround for this bug is to run restic as follows: `restic backup --quiet [..] | cat -`.
https://github.com/restic/restic/issues/3184
https://github.com/restic/restic/pull/3186
* Bugfix #3296: Fix crash of `check --read-data-subset=x%` run for an empty repository
The command `restic check --read-data-subset=x%` crashed when run for an empty repository.
This has been fixed.
https://github.com/restic/restic/issues/3296
https://github.com/restic/restic/pull/3309
* Bugfix #3302: Fix `fdopendir: not a directory` error for local backend
The `check`, `list packs`, `prune` and `rebuild-index` commands failed for the local backend
when the `data` folder in the repository contained files. This has been fixed.
https://github.com/restic/restic/issues/3302
https://github.com/restic/restic/pull/3308
* Bugfix #3334: Print `created new cache` message only on a terminal
The message `created new cache` was printed even when the output wasn't a terminal. That broke
piping `restic dump` output to tar or zip if cache directory didn't exist. The message is now
only printed on a terminal.
https://github.com/restic/restic/issues/3334
https://github.com/restic/restic/pull/3343
* Bugfix #3380: Fix crash of `backup --exclude='**'`
The exclude filter `**`, which excludes all files, caused restic to crash. This has been
corrected.
https://github.com/restic/restic/issues/3380
https://github.com/restic/restic/pull/3393
* Bugfix #3305: Fix possibly missing backup summary of JSON output in case of error
When using `--json` output it happened from time to time that the summary output was missing in
case an error occurred. This has been fixed.
https://github.com/restic/restic/pull/3305
* Bugfix #3439: Correctly handle download errors during `restore`
Due to a regression in restic 0.12.0, the `restore` command in some cases did not retry download
errors and only printed a warning. This has been fixed by retrying incomplete data downloads.
https://github.com/restic/restic/issues/3439
https://github.com/restic/restic/pull/3449
* Change #3247: Empty files now have size of 0 in `ls --json` output
The `ls --json` command used to omit the sizes of empty files in its output. It now reports a size
of zero explicitly for regular files, while omitting the size field for all other types.
https://github.com/restic/restic/issues/3247
https://github.com/restic/restic/pull/3257
* Enhancement #2780: Add release binaries for s390x architecture on Linux
We've added release binaries for Linux using the s390x architecture.
https://github.com/restic/restic/issues/2780
https://github.com/restic/restic/pull/3452
* Enhancement #3293: Add `--repository-file2` option to `init` and `copy` command
The `init` and `copy` command can now be used with the `--repository-file2` option or the
`$RESTIC_REPOSITORY_FILE2` environment variable. These to options are in addition to the
`--repo2` flag and allow you to read the destination repository from a file.
Using both `--repository-file` and `--repo2` options resulted in an error for the `copy` or
`init` command. The handling of this combination of options has been fixed. A workaround for
this issue is to only use `--repo` or `-r` and `--repo2` for `init` or `copy`.
https://github.com/restic/restic/issues/3293
https://github.com/restic/restic/pull/3294
* Enhancement #3312: Add auto-completion support for fish
The `generate` command now supports fish auto completion.
https://github.com/restic/restic/pull/3312
* Enhancement #3336: SFTP backend now checks for disk space
Backing up over SFTP previously spewed multiple generic "failure" messages when the remote
disk was full. It now checks for disk space before writing a file and fails immediately with a "no
space left on device" message.
https://github.com/restic/restic/issues/3336
https://github.com/restic/restic/pull/3345
* Enhancement #3377: Add release binaries for Apple Silicon
We've added release binaries for macOS on Apple Silicon (M1).
https://github.com/restic/restic/issues/3377
https://github.com/restic/restic/pull/3394
* Enhancement #3414: Add `--keep-within-hourly` option to restic forget
The `forget` command allowed keeping a given number of hourly backups or to keep all backups
within a given interval, but it was not possible to specify keeping hourly backups within a
given interval.
The new `--keep-within-hourly` option now offers this functionality. Similar options for
daily/weekly/monthly/yearly are also implemented, the new options are:
--keep-within-hourly <1y2m3d4h> --keep-within-daily <1y2m3d4h> --keep-within-weekly
<1y2m3d4h> --keep-within-monthly <1y2m3d4h> --keep-within-yearly <1y2m3d4h>
https://github.com/restic/restic/issues/3414
https://github.com/restic/restic/pull/3416
https://forum.restic.net/t/forget-policy/4014/11
* Enhancement #3456: Support filtering and specifying untagged snapshots
It was previously not possible to specify an empty tag with the `--tag` and `--keep-tag`
options. This has now been fixed, such that `--tag ''` and `--keep-tag ''` now matches
snapshots without tags. This allows e.g. the `snapshots` and `forget` commands to only
operate on untagged snapshots.
https://github.com/restic/restic/issues/3456
https://github.com/restic/restic/pull/3457
* Enhancement #3167: Allow specifying limit of `snapshots` list
The `--last` option allowed limiting the output of the `snapshots` command to the latest
snapshot for each host. The new `--latest n` option allows limiting the output to the latest `n`
snapshots.
This change deprecates the option `--last` in favour of `--latest 1`.
https://github.com/restic/restic/pull/3167
* Enhancement #3426: Optimize read performance of mount command
Reading large files in a mounted repository may be up to five times faster. This improvement
primarily applies to repositories stored at a backend that can be accessed with low latency,
like e.g. the local backend.
https://github.com/restic/restic/pull/3426
* Enhancement #3427: `find --pack` fallback to index if data file is missing
When investigating a repository with missing data files, it might be useful to determine
affected snapshots before running `rebuild-index`. Previously, `find --pack pack-id`
returned no data as it required accessing the data file. Now, if the necessary data is still
available in the repository index, it gets retrieved from there.
The command now also supports looking up multiple pack files in a single `find` run.
https://github.com/restic/restic/pull/3427
https://forum.restic.net/t/missing-packs-not-found/2600
Changelog for restic 0.12.0 (2021-02-14) Changelog for restic 0.12.0 (2021-02-14)
======================================= =======================================
+2 -1
View File
@@ -13,10 +13,11 @@ bug fixes are most welcome. However even "minor" details as fixing spelling
errors, improving documentation or pointing out usability issues are a great errors, improving documentation or pointing out usability issues are a great
help also. help also.
The restic project uses the GitHub infrastructure (see the The restic project uses the GitHub infrastructure (see the
[project page](https://github.com/restic/restic)) for all related discussions [project page](https://github.com/restic/restic)) for all related discussions
as well as the [forum](https://forum.restic.net/) and the `#restic` channel as well as the [forum](https://forum.restic.net/) and the `#restic` channel
on [irc.libera.chat](https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:6697/#restic). on [irc.freenode.net](https://kiwiirc.com/nextclient/irc.freenode.net/restic).
If you want to find an area that currently needs improving have a look at the If you want to find an area that currently needs improving have a look at the
open issues listed at the open issues listed at the
+1 -1
View File
@@ -1 +1 @@
0.12.1 0.12.0
-13
View File
@@ -1,13 +0,0 @@
Bugfix: Improve error handling for rclone and REST backend over HTTP2
When retrieving data from the rclone / REST backend while also using HTTP2
restic did not detect when no data was returned at all. This could cause
for example the `check` command to report the following error:
Pack ID does not match, want [...], got e3b0c442
This has been fixed by correctly detecting and retrying the incomplete download.
https://github.com/restic/restic/issues/2742
https://github.com/restic/restic/pull/3453
https://forum.restic.net/t/http2-stream-closed-connection-reset-context-canceled/3743/10
-6
View File
@@ -1,6 +0,0 @@
Enhancement: Add release binaries for s390x architecture on Linux
We've added release binaries for Linux using the s390x architecture.
https://github.com/restic/restic/issues/2780
https://github.com/restic/restic/pull/3452
-11
View File
@@ -1,11 +0,0 @@
Bugfix: Fix terminal output redirection for PowerShell
When redirecting the output of restic using PowerShell on Windows, the
output contained terminal escape characters. This has been fixed by
properly detecting the terminal type.
In addition, the mintty terminal now shows progress output for the backup
command.
https://github.com/restic/restic/issues/3111
https://github.com/restic/restic/pull/3325
-9
View File
@@ -1,9 +0,0 @@
Bugfix: Treat an empty password as a fatal error for repository init
When attempting to initialize a new repository, if an empty password was
supplied, the repository would be created but the init command would return
an error with a stack trace. Now, if an empty password is provided, it is
treated as a fatal error, and no repository is created.
https://github.com/restic/restic/issues/3214
https://github.com/restic/restic/pull/3283
-8
View File
@@ -1,8 +0,0 @@
Change: Empty files now have size of 0 in `ls --json` output
The `ls --json` command used to omit the sizes of empty files in its
output. It now reports a size of zero explicitly for regular files,
while omitting the size field for all other types.
https://github.com/restic/restic/issues/3247
https://github.com/restic/restic/pull/3257
-11
View File
@@ -1,11 +0,0 @@
Bugfix: `copy` failed to copy snapshots in rare cases
The `copy` command could in rare cases fail with the error message `SaveTree(...)
returned unexpected id ...`. This has been fixed.
On Linux/BSDs, the error could be caused by backing up symlinks with non-UTF-8
target paths. Note that, due to limitations in the repository format, these are
not stored properly and should be avoided if possible.
https://github.com/restic/restic/issues/3267
https://github.com/restic/restic/pull/3310
-11
View File
@@ -1,11 +0,0 @@
Bugfix: `backup --quiet` no longer prints status information
A regression in the latest restic version caused the output of `backup --quiet`
to contain large amounts of backup progress information when run using an
interactive terminal. This is fixed now.
A workaround for this bug is to run restic as follows:
`restic backup --quiet [..] | cat -`.
https://github.com/restic/restic/issues/3184
https://github.com/restic/restic/pull/3186
-14
View File
@@ -1,14 +0,0 @@
Enhancement: Add `--repository-file2` option to `init` and `copy` command
The `init` and `copy` command can now be used with the `--repository-file2`
option or the `$RESTIC_REPOSITORY_FILE2` environment variable.
These to options are in addition to the `--repo2` flag and allow you to read
the destination repository from a file.
Using both `--repository-file` and `--repo2` options resulted in an error for
the `copy` or `init` command. The handling of this combination of options has
been fixed. A workaround for this issue is to only use `--repo` or `-r` and
`--repo2` for `init` or `copy`.
https://github.com/restic/restic/issues/3293
https://github.com/restic/restic/pull/3294
-7
View File
@@ -1,7 +0,0 @@
Bugfix: Fix crash of `check --read-data-subset=x%` run for an empty repository
The command `restic check --read-data-subset=x%` crashed when run for an empty
repository. This has been fixed.
https://github.com/restic/restic/issues/3296
https://github.com/restic/restic/pull/3309
-8
View File
@@ -1,8 +0,0 @@
Bugfix: Fix `fdopendir: not a directory` error for local backend
The `check`, `list packs`, `prune` and `rebuild-index` commands failed
for the local backend when the `data` folder in the repository contained
files. This has been fixed.
https://github.com/restic/restic/issues/3302
https://github.com/restic/restic/pull/3308
-5
View File
@@ -1,5 +0,0 @@
Enhancement: Add auto-completion support for fish
The `generate` command now supports fish auto completion.
https://github.com/restic/restic/pull/3312
-8
View File
@@ -1,8 +0,0 @@
Bugfix: Print `created new cache` message only on a terminal
The message `created new cache` was printed even when the output wasn't a
terminal. That broke piping `restic dump` output to tar or zip if cache
directory didn't exist. The message is now only printed on a terminal.
https://github.com/restic/restic/issues/3334
https://github.com/restic/restic/pull/3343
-8
View File
@@ -1,8 +0,0 @@
Enhancement: SFTP backend now checks for disk space
Backing up over SFTP previously spewed multiple generic "failure" messages
when the remote disk was full. It now checks for disk space before writing
a file and fails immediately with a "no space left on device" message.
https://github.com/restic/restic/issues/3336
https://github.com/restic/restic/pull/3345
-6
View File
@@ -1,6 +0,0 @@
Enhancement: Add release binaries for Apple Silicon
We've added release binaries for macOS on Apple Silicon (M1).
https://github.com/restic/restic/issues/3377
https://github.com/restic/restic/pull/3394
-7
View File
@@ -1,7 +0,0 @@
Bugfix: Fix crash of `backup --exclude='**'`
The exclude filter `**`, which excludes all files, caused restic to crash. This
has been corrected.
https://github.com/restic/restic/issues/3380
https://github.com/restic/restic/pull/3393
-20
View File
@@ -1,20 +0,0 @@
Enhancement: Add `--keep-within-hourly` option to restic forget
The `forget` command allowed keeping a given number of hourly
backups or to keep all backups within a given interval, but it
was not possible to specify keeping hourly backups within a given
interval.
The new `--keep-within-hourly` option now offers this functionality.
Similar options for daily/weekly/monthly/yearly are also implemented,
the new options are:
--keep-within-hourly <1y2m3d4h>
--keep-within-daily <1y2m3d4h>
--keep-within-weekly <1y2m3d4h>
--keep-within-monthly <1y2m3d4h>
--keep-within-yearly <1y2m3d4h>
https://github.com/restic/restic/issues/3414
https://github.com/restic/restic/pull/3416
https://forum.restic.net/t/forget-policy/4014/11
-9
View File
@@ -1,9 +0,0 @@
Enhancement: Support filtering and specifying untagged snapshots
It was previously not possible to specify an empty tag with the `--tag` and
`--keep-tag` options. This has now been fixed, such that `--tag ''` and
`--keep-tag ''` now matches snapshots without tags. This allows e.g. the
`snapshots` and `forget` commands to only operate on untagged snapshots.
https://github.com/restic/restic/issues/3456
https://github.com/restic/restic/pull/3457
-9
View File
@@ -1,9 +0,0 @@
Enhancement: Allow specifying limit of `snapshots` list
The `--last` option allowed limiting the output of the `snapshots`
command to the latest snapshot for each host. The new `--latest n`
option allows limiting the output to the latest `n` snapshots.
This change deprecates the option `--last` in favour of `--latest 1`.
https://github.com/restic/restic/pull/3167
-6
View File
@@ -1,6 +0,0 @@
Bugfix: Fix possibly missing backup summary of JSON output in case of error
When using `--json` output it happened from time to time that the summary
output was missing in case an error occurred. This has been fixed.
https://github.com/restic/restic/pull/3305
-7
View File
@@ -1,7 +0,0 @@
Enhancement: Optimize read performance of mount command
Reading large files in a mounted repository may be up to five times faster.
This improvement primarily applies to repositories stored at a backend that can
be accessed with low latency, like e.g. the local backend.
https://github.com/restic/restic/pull/3426
-13
View File
@@ -1,13 +0,0 @@
Enhancement: `find --pack` fallback to index if data file is missing
When investigating a repository with missing data files, it might be useful to
determine affected snapshots before running `rebuild-index`. Previously,
`find --pack pack-id` returned no data as it required accessing the data file.
Now, if the necessary data is still available in the repository index, it gets
retrieved from there.
The command now also supports looking up multiple pack files in a single `find`
run.
https://github.com/restic/restic/pull/3427
https://forum.restic.net/t/missing-packs-not-found/2600
-8
View File
@@ -1,8 +0,0 @@
Bugfix: Correctly handle download errors during `restore`
Due to a regression in restic 0.12.0, the `restore` command in some cases did
not retry download errors and only printed a warning. This has been fixed by
retrying incomplete data downloads.
https://github.com/restic/restic/issues/3439
https://github.com/restic/restic/pull/3449
+12 -14
View File
@@ -60,11 +60,11 @@ Exit status is 3 if some source data could not be read (incomplete snapshot crea
t.Go(func() error { term.Run(t.Context(globalOptions.ctx)); return nil }) t.Go(func() error { term.Run(t.Context(globalOptions.ctx)); return nil })
err := runBackup(backupOptions, globalOptions, term, args) err := runBackup(backupOptions, globalOptions, term, args)
t.Kill(nil) if err != nil {
if werr := t.Wait(); werr != nil { return err
panic(fmt.Sprintf("term.Run() returned err: %v", err))
} }
return err t.Kill(nil)
return t.Wait()
}, },
} }
@@ -97,7 +97,7 @@ type BackupOptions struct {
var backupOptions BackupOptions var backupOptions BackupOptions
// ErrInvalidSourceData is used to report an incomplete backup // ErrInvalidSourceData is used to report an incomplete backup
var ErrInvalidSourceData = errors.New("at least one source file could not be read") var ErrInvalidSourceData = errors.New("failed to read all source data during backup")
func init() { func init() {
cmdRoot.AddCommand(cmdBackup) cmdRoot.AddCommand(cmdBackup)
@@ -109,7 +109,7 @@ func init() {
f.StringArrayVar(&backupOptions.InsensitiveExcludes, "iexclude", nil, "same as --exclude `pattern` but ignores the casing of filenames") f.StringArrayVar(&backupOptions.InsensitiveExcludes, "iexclude", nil, "same as --exclude `pattern` but ignores the casing of filenames")
f.StringArrayVar(&backupOptions.ExcludeFiles, "exclude-file", nil, "read exclude patterns from a `file` (can be specified multiple times)") f.StringArrayVar(&backupOptions.ExcludeFiles, "exclude-file", nil, "read exclude patterns from a `file` (can be specified multiple times)")
f.StringArrayVar(&backupOptions.InsensitiveExcludeFiles, "iexclude-file", nil, "same as --exclude-file but ignores casing of `file`names in patterns") f.StringArrayVar(&backupOptions.InsensitiveExcludeFiles, "iexclude-file", nil, "same as --exclude-file but ignores casing of `file`names in patterns")
f.BoolVarP(&backupOptions.ExcludeOtherFS, "one-file-system", "x", false, "exclude other file systems, don't cross filesystem boundaries and subvolumes") f.BoolVarP(&backupOptions.ExcludeOtherFS, "one-file-system", "x", false, "exclude other file systems")
f.StringArrayVar(&backupOptions.ExcludeIfPresent, "exclude-if-present", nil, "takes `filename[:header]`, exclude contents of directories containing filename (except filename itself) if header of that file is as provided (can be specified multiple times)") f.StringArrayVar(&backupOptions.ExcludeIfPresent, "exclude-if-present", nil, "takes `filename[:header]`, exclude contents of directories containing filename (except filename itself) if header of that file is as provided (can be specified multiple times)")
f.BoolVar(&backupOptions.ExcludeCaches, "exclude-caches", false, `excludes cache directories that are marked with a CACHEDIR.TAG file. See https://bford.info/cachedir/ for the Cache Directory Tagging Standard`) f.BoolVar(&backupOptions.ExcludeCaches, "exclude-caches", false, `excludes cache directories that are marked with a CACHEDIR.TAG file. See https://bford.info/cachedir/ for the Cache Directory Tagging Standard`)
f.StringVar(&backupOptions.ExcludeLargerThan, "exclude-larger-than", "", "max `size` of the files to be backed up (allowed suffixes: k/K, m/M, g/G, t/T)") f.StringVar(&backupOptions.ExcludeLargerThan, "exclude-larger-than", "", "max `size` of the files to be backed up (allowed suffixes: k/K, m/M, g/G, t/T)")
@@ -561,7 +561,7 @@ func runBackup(opts BackupOptions, gopts GlobalOptions, term *termstatus.Termina
}() }()
gopts.stdout, gopts.stderr = p.Stdout(), p.Stderr() gopts.stdout, gopts.stderr = p.Stdout(), p.Stderr()
p.SetMinUpdatePause(calculateProgressInterval(!gopts.Quiet)) p.SetMinUpdatePause(calculateProgressInterval())
t.Go(func() error { return p.Run(t.Context(gopts.ctx)) }) t.Go(func() error { return p.Run(t.Context(gopts.ctx)) })
@@ -708,17 +708,15 @@ func runBackup(opts BackupOptions, gopts GlobalOptions, term *termstatus.Termina
p.V("start backup on %v", targets) p.V("start backup on %v", targets)
} }
_, id, err := arch.Snapshot(gopts.ctx, targets, snapshotOpts) _, id, err := arch.Snapshot(gopts.ctx, targets, snapshotOpts)
if err != nil {
return errors.Fatalf("unable to save snapshot: %v", err)
}
// cleanly shutdown all running goroutines // cleanly shutdown all running goroutines
t.Kill(nil) t.Kill(nil)
// let's see if one returned an error // let's see if one returned an error
werr := t.Wait() err = t.Wait()
// return original error
if err != nil {
return errors.Fatalf("unable to save snapshot: %v", err)
}
// Report finished execution // Report finished execution
p.Finish(id) p.Finish(id)
@@ -730,5 +728,5 @@ func runBackup(opts BackupOptions, gopts GlobalOptions, term *termstatus.Termina
} }
// Return error if any // Return error if any
return werr return err
} }
+9 -5
View File
@@ -69,6 +69,7 @@ func runCat(gopts GlobalOptions, args []string) error {
} }
} }
// handle all types that don't need an index
switch tpe { switch tpe {
case "config": case "config":
buf, err := json.MarshalIndent(repo.Config(), "", " ") buf, err := json.MarshalIndent(repo.Config(), "", " ")
@@ -141,7 +142,15 @@ func runCat(gopts GlobalOptions, args []string) error {
Println(string(buf)) Println(string(buf))
return nil return nil
}
// load index, handle all the other types
err = repo.LoadIndex(gopts.ctx)
if err != nil {
return err
}
switch tpe {
case "pack": case "pack":
h := restic.Handle{Type: restic.PackFile, Name: id.String()} h := restic.Handle{Type: restic.PackFile, Name: id.String()}
buf, err := backend.LoadAll(gopts.ctx, nil, repo.Backend(), h) buf, err := backend.LoadAll(gopts.ctx, nil, repo.Backend(), h)
@@ -158,11 +167,6 @@ func runCat(gopts GlobalOptions, args []string) error {
return err return err
case "blob": case "blob":
err = repo.LoadIndex(gopts.ctx)
if err != nil {
return err
}
for _, t := range []restic.BlobType{restic.DataBlob, restic.TreeBlob} { for _, t := range []restic.BlobType{restic.DataBlob, restic.TreeBlob} {
bh := restic.BlobHandle{ID: id, Type: t} bh := restic.BlobHandle{ID: id, Type: t}
if !repo.Index().Has(bh) { if !repo.Index().Has(bh) {
+1 -1
View File
@@ -331,7 +331,7 @@ func selectPacksByBucket(allPacks map[restic.ID]int64, bucket, totalBuckets uint
func selectRandomPacksByPercentage(allPacks map[restic.ID]int64, percentage float64) map[restic.ID]int64 { func selectRandomPacksByPercentage(allPacks map[restic.ID]int64, percentage float64) map[restic.ID]int64 {
packCount := len(allPacks) packCount := len(allPacks)
packsToCheck := int(float64(packCount) * (percentage / 100.0)) packsToCheck := int(float64(packCount) * (percentage / 100.0))
if packCount > 0 && packsToCheck < 1 { if packsToCheck < 1 {
packsToCheck = 1 packsToCheck = 1
} }
timeNs := time.Now().UnixNano() timeNs := time.Now().UnixNano()
-7
View File
@@ -122,10 +122,3 @@ func TestSelectRandomPacksByPercentage(t *testing.T) {
rtest.Assert(t, ok, "Expected input and output to be equal") rtest.Assert(t, ok, "Expected input and output to be equal")
} }
} }
func TestSelectNoRandomPacksByPercentage(t *testing.T) {
// that the a repository without pack files works
var testPacks = make(map[restic.ID]int64)
selectedPacks := selectRandomPacksByPercentage(testPacks, 10.0)
rtest.Assert(t, len(selectedPacks) == 0, "Expected 0 selected packs")
}
+5 -8
View File
@@ -196,16 +196,13 @@ func copyTree(ctx context.Context, srcRepo restic.Repository, dstRepo restic.Rep
// Do we already have this tree blob? // Do we already have this tree blob?
if !dstRepo.Index().Has(restic.BlobHandle{ID: tree.ID, Type: restic.TreeBlob}) { if !dstRepo.Index().Has(restic.BlobHandle{ID: tree.ID, Type: restic.TreeBlob}) {
// copy raw tree bytes to avoid problems if the serialization changes newTreeID, err := dstRepo.SaveTree(ctx, tree.Tree)
var err error
buf, err = srcRepo.LoadBlob(ctx, restic.TreeBlob, tree.ID, buf)
if err != nil { if err != nil {
return fmt.Errorf("LoadBlob(%v) for tree returned error %v", tree.ID, err) return fmt.Errorf("SaveTree(%v) returned error %v", tree.ID.Str(), err)
} }
// Assurance only.
_, _, err = dstRepo.SaveBlob(ctx, restic.TreeBlob, buf, tree.ID, false) if newTreeID != tree.ID {
if err != nil { return fmt.Errorf("SaveTree(%v) returned unexpected id %s", tree.ID.Str(), newTreeID.Str())
return fmt.Errorf("SaveBlob(%v) for tree returned error %v", tree.ID.Str(), err)
} }
} }
-381
View File
@@ -4,21 +4,12 @@ package main
import ( import (
"context" "context"
"crypto/aes"
"crypto/cipher"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
"os"
"runtime"
"sort"
"time"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"golang.org/x/sync/errgroup"
"github.com/restic/restic/internal/backend"
"github.com/restic/restic/internal/crypto"
"github.com/restic/restic/internal/errors" "github.com/restic/restic/internal/errors"
"github.com/restic/restic/internal/pack" "github.com/restic/restic/internal/pack"
"github.com/restic/restic/internal/repository" "github.com/restic/restic/internal/repository"
@@ -48,17 +39,9 @@ Exit status is 0 if the command was successful, and non-zero if there was any er
}, },
} }
var tryRepair bool
var repairByte bool
var extractPack bool
func init() { func init() {
cmdRoot.AddCommand(cmdDebug) cmdRoot.AddCommand(cmdDebug)
cmdDebug.AddCommand(cmdDebugDump) cmdDebug.AddCommand(cmdDebugDump)
cmdDebug.AddCommand(cmdDebugExamine)
cmdDebugExamine.Flags().BoolVar(&extractPack, "extract-pack", false, "write blobs to the current directory")
cmdDebugExamine.Flags().BoolVar(&tryRepair, "try-repair", false, "try to repair broken blobs with single bit flips")
cmdDebugExamine.Flags().BoolVar(&repairByte, "repair-byte", false, "try to repair broken blobs by trying bytes")
} }
func prettyPrintJSON(wr io.Writer, item interface{}) error { func prettyPrintJSON(wr io.Writer, item interface{}) error {
@@ -182,367 +165,3 @@ func runDebugDump(gopts GlobalOptions, args []string) error {
return errors.Fatalf("no such type %q", tpe) return errors.Fatalf("no such type %q", tpe)
} }
} }
var cmdDebugExamine = &cobra.Command{
Use: "examine pack-ID...",
Short: "Examine a pack file",
DisableAutoGenTag: true,
RunE: func(cmd *cobra.Command, args []string) error {
return runDebugExamine(globalOptions, args)
},
}
func tryRepairWithBitflip(ctx context.Context, key *crypto.Key, input []byte, bytewise bool) []byte {
if bytewise {
Printf(" trying to repair blob by finding a broken byte\n")
} else {
Printf(" trying to repair blob with single bit flip\n")
}
ch := make(chan int)
var wg errgroup.Group
done := make(chan struct{})
var fixed []byte
var found bool
workers := runtime.GOMAXPROCS(0)
Printf(" spinning up %d worker functions\n", runtime.GOMAXPROCS(0))
for i := 0; i < workers; i++ {
wg.Go(func() error {
// make a local copy of the buffer
buf := make([]byte, len(input))
copy(buf, input)
testFlip := func(idx int, pattern byte) bool {
// flip bits
buf[idx] ^= pattern
nonce, plaintext := buf[:key.NonceSize()], buf[key.NonceSize():]
plaintext, err := key.Open(plaintext[:0], nonce, plaintext, nil)
if err == nil {
Printf("\n")
Printf(" blob could be repaired by XORing byte %v with 0x%02x\n", idx, pattern)
Printf(" hash is %v\n", restic.Hash(plaintext))
close(done)
found = true
fixed = plaintext
return true
}
// flip bits back
buf[idx] ^= pattern
return false
}
for i := range ch {
if bytewise {
for j := 0; j < 255; j++ {
if testFlip(i, byte(j)) {
return nil
}
}
} else {
for j := 0; j < 7; j++ {
// flip each bit once
if testFlip(i, (1 << uint(j))) {
return nil
}
}
}
}
return nil
})
}
wg.Go(func() error {
defer close(ch)
start := time.Now()
info := time.Now()
for i := range input {
select {
case ch <- i:
case <-done:
Printf(" done after %v\n", time.Since(start))
return nil
}
if time.Since(info) > time.Second {
secs := time.Since(start).Seconds()
gps := float64(i) / secs
remaining := len(input) - i
eta := time.Duration(float64(remaining)/gps) * time.Second
Printf("\r%d byte of %d done (%.2f%%), %.0f byte per second, ETA %v",
i, len(input), float32(i)/float32(len(input))*100, gps, eta)
info = time.Now()
}
}
return nil
})
err := wg.Wait()
if err != nil {
panic("all go rountines can only return nil")
}
if !found {
Printf("\n blob could not be repaired\n")
}
return fixed
}
func decryptUnsigned(ctx context.Context, k *crypto.Key, buf []byte) []byte {
// strip signature at the end
l := len(buf)
nonce, ct := buf[:16], buf[16:l-16]
out := make([]byte, len(ct))
c, err := aes.NewCipher(k.EncryptionKey[:])
if err != nil {
panic(fmt.Sprintf("unable to create cipher: %v", err))
}
e := cipher.NewCTR(c, nonce)
e.XORKeyStream(out, ct)
return out
}
func loadBlobs(ctx context.Context, repo restic.Repository, pack restic.ID, list []restic.Blob) error {
be := repo.Backend()
h := restic.Handle{
Name: pack.String(),
Type: restic.PackFile,
}
for _, blob := range list {
Printf(" loading blob %v at %v (length %v)\n", blob.ID, blob.Offset, blob.Length)
buf := make([]byte, blob.Length)
err := be.Load(ctx, h, int(blob.Length), int64(blob.Offset), func(rd io.Reader) error {
n, err := io.ReadFull(rd, buf)
if err != nil {
return fmt.Errorf("read error after %d bytes: %v", n, err)
}
return nil
})
if err != nil {
Warnf("error read: %v\n", err)
continue
}
key := repo.Key()
nonce, plaintext := buf[:key.NonceSize()], buf[key.NonceSize():]
plaintext, err = key.Open(plaintext[:0], nonce, plaintext, nil)
if err != nil {
Warnf("error decrypting blob: %v\n", err)
var plain []byte
if tryRepair || repairByte {
plain = tryRepairWithBitflip(ctx, key, buf, repairByte)
}
var prefix string
if plain != nil {
id := restic.Hash(plain)
if !id.Equal(blob.ID) {
Printf(" repaired blob (length %v), hash is %v, ID does not match, wanted %v\n", len(plain), id, blob.ID)
prefix = "repaired-wrong-hash-"
} else {
Printf(" successfully repaired blob (length %v), hash is %v, ID matches\n", len(plain), id)
prefix = "repaired-"
}
} else {
plain = decryptUnsigned(ctx, key, buf)
prefix = "damaged-"
}
err = storePlainBlob(blob.ID, prefix, plain)
if err != nil {
return err
}
continue
}
id := restic.Hash(plaintext)
var prefix string
if !id.Equal(blob.ID) {
Printf(" successfully decrypted blob (length %v), hash is %v, ID does not match, wanted %v\n", len(plaintext), id, blob.ID)
prefix = "wrong-hash-"
} else {
Printf(" successfully decrypted blob (length %v), hash is %v, ID matches\n", len(plaintext), id)
prefix = "correct-"
}
if extractPack {
err = storePlainBlob(id, prefix, plaintext)
if err != nil {
return err
}
}
}
return nil
}
func storePlainBlob(id restic.ID, prefix string, plain []byte) error {
filename := fmt.Sprintf("%s%s.bin", prefix, id)
f, err := os.Create(filename)
if err != nil {
return err
}
_, err = f.Write(plain)
if err != nil {
_ = f.Close()
return err
}
err = f.Close()
if err != nil {
return err
}
Printf("decrypt of blob %v stored at %v\n", id, filename)
return nil
}
func runDebugExamine(gopts GlobalOptions, args []string) error {
ids := make([]restic.ID, 0)
for _, name := range args {
id, err := restic.ParseID(name)
if err != nil {
Warnf("error: %v\n", err)
continue
}
ids = append(ids, id)
}
if len(ids) == 0 {
return errors.Fatal("no pack files to examine")
}
repo, err := OpenRepository(gopts)
if err != nil {
return err
}
if !gopts.NoLock {
lock, err := lockRepo(gopts.ctx, repo)
defer unlockRepo(lock)
if err != nil {
return err
}
}
err = repo.LoadIndex(gopts.ctx)
if err != nil {
return err
}
for _, id := range ids {
err := examinePack(gopts.ctx, repo, id)
if err != nil {
Warnf("error: %v\n", err)
}
if err == context.Canceled {
break
}
}
return nil
}
func examinePack(ctx context.Context, repo restic.Repository, id restic.ID) error {
Printf("examine %v\n", id)
h := restic.Handle{
Type: restic.PackFile,
Name: id.String(),
}
fi, err := repo.Backend().Stat(ctx, h)
if err != nil {
return err
}
Printf(" file size is %v\n", fi.Size)
buf, err := backend.LoadAll(ctx, nil, repo.Backend(), h)
if err != nil {
return err
}
gotID := restic.Hash(buf)
if !id.Equal(gotID) {
Printf(" wanted hash %v, got %v\n", id, gotID)
} else {
Printf(" hash for file content matches\n")
}
Printf(" ========================================\n")
Printf(" looking for info in the indexes\n")
blobsLoaded := false
// examine all data the indexes have for the pack file
for _, idx := range repo.Index().(*repository.MasterIndex).All() {
idxIDs, err := idx.IDs()
if err != nil {
idxIDs = restic.IDs{}
}
blobs := idx.ListPack(id)
if len(blobs) == 0 {
continue
}
Printf(" index %v:\n", idxIDs)
// convert list of blobs to []restic.Blob
var list []restic.Blob
for _, b := range blobs {
list = append(list, b.Blob)
}
checkPackSize(list, fi.Size)
err = loadBlobs(ctx, repo, id, list)
if err != nil {
Warnf("error: %v\n", err)
} else {
blobsLoaded = true
}
}
Printf(" ========================================\n")
Printf(" inspect the pack itself\n")
blobs, _, err := pack.List(repo.Key(), restic.ReaderAt(ctx, repo.Backend(), h), fi.Size)
if err != nil {
return fmt.Errorf("pack %v: %v", id.Str(), err)
}
checkPackSize(blobs, fi.Size)
if !blobsLoaded {
return loadBlobs(ctx, repo, id, blobs)
}
return nil
}
func checkPackSize(blobs []restic.Blob, fileSize int64) {
// track current size and offset
var size, offset uint64
sort.Slice(blobs, func(i, j int) bool {
return blobs[i].Offset < blobs[j].Offset
})
for _, pb := range blobs {
Printf(" %v blob %v, offset %-6d, raw length %-6d\n", pb.Type, pb.ID, pb.Offset, pb.Length)
if offset != uint64(pb.Offset) {
Printf(" hole in file, want offset %v, got %v\n", offset, pb.Offset)
}
offset += uint64(pb.Length)
size += uint64(pb.Length)
}
// compute header size, per blob: 1 byte type, 4 byte length, 32 byte id
size += uint64(restic.CiphertextLength(len(blobs) * (1 + 4 + 32)))
// length in uint32 little endian
size += 4
if uint64(fileSize) != size {
Printf(" file sizes do not match: computed %v from index, file size is %v\n", size, fileSize)
} else {
Printf(" file sizes match\n")
}
}
+18 -67
View File
@@ -3,7 +3,6 @@ package main
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"sort"
"strings" "strings"
"time" "time"
@@ -41,6 +40,8 @@ Exit status is 0 if the command was successful, and non-zero if there was any er
}, },
} }
const shortStr = 8 // Length of short IDs: 4 bytes as hex strings
// FindOptions bundles all options for the find command. // FindOptions bundles all options for the find command.
type FindOptions struct { type FindOptions struct {
Oldest string Oldest string
@@ -385,12 +386,12 @@ func (f *Finder) findIDs(ctx context.Context, sn *restic.Snapshot) error {
idStr := id.String() idStr := id.String()
if _, ok := f.blobIDs[idStr]; !ok { if _, ok := f.blobIDs[idStr]; !ok {
// Look for short ID form // Look for short ID form
if _, ok := f.blobIDs[id.Str()]; !ok { if _, ok := f.blobIDs[idStr[:shortStr]]; !ok {
continue continue
} }
// Replace the short ID with the long one // Replace the short ID with the long one
f.blobIDs[idStr] = struct{}{} f.blobIDs[idStr] = struct{}{}
delete(f.blobIDs, id.Str()) delete(f.blobIDs, idStr[:shortStr])
} }
f.out.PrintObject("blob", idStr, nodepath, parentTreeID.String(), sn) f.out.PrintObject("blob", idStr, nodepath, parentTreeID.String(), sn)
} }
@@ -400,8 +401,6 @@ func (f *Finder) findIDs(ctx context.Context, sn *restic.Snapshot) error {
}) })
} }
var errAllPacksFound = errors.New("all packs found")
// packsToBlobs converts the list of pack IDs to a list of blob IDs that // packsToBlobs converts the list of pack IDs to a list of blob IDs that
// belong to those packs. // belong to those packs.
func (f *Finder) packsToBlobs(ctx context.Context, packs []string) error { func (f *Finder) packsToBlobs(ctx context.Context, packs []string) error {
@@ -413,18 +412,20 @@ func (f *Finder) packsToBlobs(ctx context.Context, packs []string) error {
f.blobIDs = make(map[string]struct{}) f.blobIDs = make(map[string]struct{})
} }
allPacksFound := false
packsFound := 0
debug.Log("Looking for packs...") debug.Log("Looking for packs...")
err := f.repo.List(ctx, restic.PackFile, func(id restic.ID, size int64) error { err := f.repo.List(ctx, restic.PackFile, func(id restic.ID, size int64) error {
if allPacksFound {
return nil
}
idStr := id.String() idStr := id.String()
if _, ok := packIDs[idStr]; !ok { if _, ok := packIDs[idStr]; !ok {
// Look for short ID form // Look for short ID form
if _, ok := packIDs[id.Str()]; !ok { if _, ok := packIDs[idStr[:shortStr]]; !ok {
return nil return nil
} }
delete(packIDs, id.Str())
} else {
// forget found id
delete(packIDs, idStr)
} }
debug.Log("Found pack %s", idStr) debug.Log("Found pack %s", idStr)
blobs, _, err := f.repo.ListPack(ctx, id, size) blobs, _, err := f.repo.ListPack(ctx, id, size)
@@ -435,75 +436,25 @@ func (f *Finder) packsToBlobs(ctx context.Context, packs []string) error {
f.blobIDs[b.ID.String()] = struct{}{} f.blobIDs[b.ID.String()] = struct{}{}
} }
// Stop searching when all packs have been found // Stop searching when all packs have been found
if len(packIDs) == 0 { packsFound++
return errAllPacksFound if packsFound >= len(packIDs) {
allPacksFound = true
} }
return nil return nil
}) })
if err != nil && err != errAllPacksFound { if err != nil {
return err return err
} }
if err != errAllPacksFound { if !allPacksFound {
// try to resolve unknown pack ids from the index return errors.Fatal("unable to find all specified pack(s)")
packIDs = f.indexPacksToBlobs(ctx, packIDs)
}
if len(packIDs) > 0 {
list := make([]string, 0, len(packIDs))
for h := range packIDs {
list = append(list, h)
}
sort.Strings(list)
return errors.Fatalf("unable to find pack(s): %v", list)
} }
debug.Log("%d blobs found", len(f.blobIDs)) debug.Log("%d blobs found", len(f.blobIDs))
return nil return nil
} }
func (f *Finder) indexPacksToBlobs(ctx context.Context, packIDs map[string]struct{}) map[string]struct{} {
wctx, cancel := context.WithCancel(ctx)
defer cancel()
// remember which packs were found in the index
indexPackIDs := make(map[string]struct{})
for pb := range f.repo.Index().Each(wctx) {
idStr := pb.PackID.String()
// keep entry in packIDs as Each() returns individual index entries
matchingID := false
if _, ok := packIDs[idStr]; ok {
matchingID = true
} else {
if _, ok := packIDs[pb.PackID.Str()]; ok {
// expand id
delete(packIDs, pb.PackID.Str())
packIDs[idStr] = struct{}{}
matchingID = true
}
}
if matchingID {
f.blobIDs[pb.ID.String()] = struct{}{}
indexPackIDs[idStr] = struct{}{}
}
}
for id := range indexPackIDs {
delete(packIDs, id)
}
if len(indexPackIDs) > 0 {
list := make([]string, 0, len(indexPackIDs))
for h := range indexPackIDs {
list = append(list, h)
}
Warnf("some pack files are missing from the repository, getting their blobs from the repository index: %v\n\n", list)
}
return packIDs
}
func (f *Finder) findObjectPack(ctx context.Context, id string, t restic.BlobType) { func (f *Finder) findObjectPack(ctx context.Context, id string, t restic.BlobType) {
idx := f.repo.Index() idx := f.repo.Index()
@@ -612,7 +563,7 @@ func runFind(opts FindOptions, gopts GlobalOptions, args []string) error {
} }
if opts.PackID { if opts.PackID {
err := f.packsToBlobs(ctx, f.pat.pattern) err := f.packsToBlobs(ctx, []string{f.pat.pattern[0]}) // TODO: support multiple packs
if err != nil { if err != nil {
return err return err
} }
+16 -31
View File
@@ -31,19 +31,14 @@ Exit status is 0 if the command was successful, and non-zero if there was any er
// ForgetOptions collects all options for the forget command. // ForgetOptions collects all options for the forget command.
type ForgetOptions struct { type ForgetOptions struct {
Last int Last int
Hourly int Hourly int
Daily int Daily int
Weekly int Weekly int
Monthly int Monthly int
Yearly int Yearly int
Within restic.Duration Within restic.Duration
WithinHourly restic.Duration KeepTags restic.TagLists
WithinDaily restic.Duration
WithinWeekly restic.Duration
WithinMonthly restic.Duration
WithinYearly restic.Duration
KeepTags restic.TagLists
Hosts []string Hosts []string
Tags restic.TagLists Tags restic.TagLists
@@ -69,11 +64,6 @@ func init() {
f.IntVarP(&forgetOptions.Monthly, "keep-monthly", "m", 0, "keep the last `n` monthly snapshots") f.IntVarP(&forgetOptions.Monthly, "keep-monthly", "m", 0, "keep the last `n` monthly snapshots")
f.IntVarP(&forgetOptions.Yearly, "keep-yearly", "y", 0, "keep the last `n` yearly snapshots") f.IntVarP(&forgetOptions.Yearly, "keep-yearly", "y", 0, "keep the last `n` yearly snapshots")
f.VarP(&forgetOptions.Within, "keep-within", "", "keep snapshots that are newer than `duration` (eg. 1y5m7d2h) relative to the latest snapshot") f.VarP(&forgetOptions.Within, "keep-within", "", "keep snapshots that are newer than `duration` (eg. 1y5m7d2h) relative to the latest snapshot")
f.VarP(&forgetOptions.WithinHourly, "keep-within-hourly", "", "keep hourly snapshots that are newer than `duration` (eg. 1y5m7d2h) relative to the latest snapshot")
f.VarP(&forgetOptions.WithinDaily, "keep-within-daily", "", "keep daily snapshots that are newer than `duration` (eg. 1y5m7d2h) relative to the latest snapshot")
f.VarP(&forgetOptions.WithinWeekly, "keep-within-weekly", "", "keep weekly snapshots that are newer than `duration` (eg. 1y5m7d2h) relative to the latest snapshot")
f.VarP(&forgetOptions.WithinMonthly, "keep-within-monthly", "", "keep monthly snapshots that are newer than `duration` (eg. 1y5m7d2h) relative to the latest snapshot")
f.VarP(&forgetOptions.WithinYearly, "keep-within-yearly", "", "keep yearly snapshots that are newer than `duration` (eg. 1y5m7d2h) relative to the latest snapshot")
f.Var(&forgetOptions.KeepTags, "keep-tag", "keep snapshots with this `taglist` (can be specified multiple times)") f.Var(&forgetOptions.KeepTags, "keep-tag", "keep snapshots with this `taglist` (can be specified multiple times)")
f.StringArrayVar(&forgetOptions.Hosts, "host", nil, "only consider snapshots with the given `host` (can be specified multiple times)") f.StringArrayVar(&forgetOptions.Hosts, "host", nil, "only consider snapshots with the given `host` (can be specified multiple times)")
@@ -138,19 +128,14 @@ func runForget(opts ForgetOptions, gopts GlobalOptions, args []string) error {
} }
policy := restic.ExpirePolicy{ policy := restic.ExpirePolicy{
Last: opts.Last, Last: opts.Last,
Hourly: opts.Hourly, Hourly: opts.Hourly,
Daily: opts.Daily, Daily: opts.Daily,
Weekly: opts.Weekly, Weekly: opts.Weekly,
Monthly: opts.Monthly, Monthly: opts.Monthly,
Yearly: opts.Yearly, Yearly: opts.Yearly,
Within: opts.Within, Within: opts.Within,
WithinHourly: opts.WithinHourly, Tags: opts.KeepTags,
WithinDaily: opts.WithinDaily,
WithinWeekly: opts.WithinWeekly,
WithinMonthly: opts.WithinMonthly,
WithinYearly: opts.WithinYearly,
Tags: opts.KeepTags,
} }
if policy.Empty() && len(args) == 0 { if policy.Empty() && len(args) == 0 {
+2 -16
View File
@@ -10,10 +10,10 @@ import (
var cmdGenerate = &cobra.Command{ var cmdGenerate = &cobra.Command{
Use: "generate [flags]", Use: "generate [flags]",
Short: "Generate manual pages and auto-completion files (bash, fish, zsh)", Short: "Generate manual pages and auto-completion files (bash, zsh)",
Long: ` Long: `
The "generate" command writes automatically generated files (like the man pages The "generate" command writes automatically generated files (like the man pages
and the auto-completion files for bash, fish and zsh). and the auto-completion files for bash and zsh).
EXIT STATUS EXIT STATUS
=========== ===========
@@ -27,7 +27,6 @@ Exit status is 0 if the command was successful, and non-zero if there was any er
type generateOptions struct { type generateOptions struct {
ManDir string ManDir string
BashCompletionFile string BashCompletionFile string
FishCompletionFile string
ZSHCompletionFile string ZSHCompletionFile string
} }
@@ -38,7 +37,6 @@ func init() {
fs := cmdGenerate.Flags() fs := cmdGenerate.Flags()
fs.StringVar(&genOpts.ManDir, "man", "", "write man pages to `directory`") fs.StringVar(&genOpts.ManDir, "man", "", "write man pages to `directory`")
fs.StringVar(&genOpts.BashCompletionFile, "bash-completion", "", "write bash completion `file`") fs.StringVar(&genOpts.BashCompletionFile, "bash-completion", "", "write bash completion `file`")
fs.StringVar(&genOpts.FishCompletionFile, "fish-completion", "", "write fish completion `file`")
fs.StringVar(&genOpts.ZSHCompletionFile, "zsh-completion", "", "write zsh completion `file`") fs.StringVar(&genOpts.ZSHCompletionFile, "zsh-completion", "", "write zsh completion `file`")
} }
@@ -65,11 +63,6 @@ func writeBashCompletion(file string) error {
return cmdRoot.GenBashCompletionFile(file) return cmdRoot.GenBashCompletionFile(file)
} }
func writeFishCompletion(file string) error {
Verbosef("writing fish completion file to %v\n", file)
return cmdRoot.GenFishCompletionFile(file, true)
}
func writeZSHCompletion(file string) error { func writeZSHCompletion(file string) error {
Verbosef("writing zsh completion file to %v\n", file) Verbosef("writing zsh completion file to %v\n", file)
return cmdRoot.GenZshCompletionFile(file) return cmdRoot.GenZshCompletionFile(file)
@@ -90,13 +83,6 @@ func runGenerate(cmd *cobra.Command, args []string) error {
} }
} }
if genOpts.FishCompletionFile != "" {
err := writeFishCompletion(genOpts.FishCompletionFile)
if err != nil {
return err
}
}
if genOpts.ZSHCompletionFile != "" { if genOpts.ZSHCompletionFile != "" {
err := writeZSHCompletion(genOpts.ZSHCompletionFile) err := writeZSHCompletion(genOpts.ZSHCompletionFile)
if err != nil { if err != nil {
+5 -5
View File
@@ -53,6 +53,11 @@ func runInit(opts InitOptions, gopts GlobalOptions, args []string) error {
return err return err
} }
be, err := create(repo, gopts.extended)
if err != nil {
return errors.Fatalf("create repository at %s failed: %v\n", location.StripPassword(gopts.Repo), err)
}
gopts.password, err = ReadPasswordTwice(gopts, gopts.password, err = ReadPasswordTwice(gopts,
"enter password for new repository: ", "enter password for new repository: ",
"enter password again: ") "enter password again: ")
@@ -60,11 +65,6 @@ func runInit(opts InitOptions, gopts GlobalOptions, args []string) error {
return err return err
} }
be, err := create(repo, gopts.extended)
if err != nil {
return errors.Fatalf("create repository at %s failed: %v\n", location.StripPassword(gopts.Repo), err)
}
s := repository.New(be) s := repository.New(be)
err = s.Init(gopts.ctx, gopts.password, chunkerPolynomial) err = s.Init(gopts.ctx, gopts.password, chunkerPolynomial)
+26 -38
View File
@@ -74,42 +74,18 @@ type lsSnapshot struct {
StructType string `json:"struct_type"` // "snapshot" StructType string `json:"struct_type"` // "snapshot"
} }
// Print node in our custom JSON format, followed by a newline. type lsNode struct {
func lsNodeJSON(enc *json.Encoder, path string, node *restic.Node) error { Name string `json:"name"`
n := &struct { Type string `json:"type"`
Name string `json:"name"` Path string `json:"path"`
Type string `json:"type"` UID uint32 `json:"uid"`
Path string `json:"path"` GID uint32 `json:"gid"`
UID uint32 `json:"uid"` Size uint64 `json:"size,omitempty"`
GID uint32 `json:"gid"` Mode os.FileMode `json:"mode,omitempty"`
Size *uint64 `json:"size,omitempty"` ModTime time.Time `json:"mtime,omitempty"`
Mode os.FileMode `json:"mode,omitempty"` AccessTime time.Time `json:"atime,omitempty"`
ModTime time.Time `json:"mtime,omitempty"` ChangeTime time.Time `json:"ctime,omitempty"`
AccessTime time.Time `json:"atime,omitempty"` StructType string `json:"struct_type"` // "node"
ChangeTime time.Time `json:"ctime,omitempty"`
StructType string `json:"struct_type"` // "node"
size uint64 // Target for Size pointer.
}{
Name: node.Name,
Type: node.Type,
Path: path,
UID: node.UID,
GID: node.GID,
size: node.Size,
Mode: node.Mode,
ModTime: node.ModTime,
AccessTime: node.AccessTime,
ChangeTime: node.ChangeTime,
StructType: "node",
}
// Always print size for regular files, even when empty,
// but never for other types.
if node.Type == "file" {
n.Size = &n.size
}
return enc.Encode(n)
} }
func runLs(opts LsOptions, gopts GlobalOptions, args []string) error { func runLs(opts LsOptions, gopts GlobalOptions, args []string) error {
@@ -183,7 +159,7 @@ func runLs(opts LsOptions, gopts GlobalOptions, args []string) error {
enc := json.NewEncoder(gopts.stdout) enc := json.NewEncoder(gopts.stdout)
printSnapshot = func(sn *restic.Snapshot) { printSnapshot = func(sn *restic.Snapshot) {
err := enc.Encode(lsSnapshot{ err = enc.Encode(lsSnapshot{
Snapshot: sn, Snapshot: sn,
ID: sn.ID(), ID: sn.ID(),
ShortID: sn.ID().Str(), ShortID: sn.ID().Str(),
@@ -195,7 +171,19 @@ func runLs(opts LsOptions, gopts GlobalOptions, args []string) error {
} }
printNode = func(path string, node *restic.Node) { printNode = func(path string, node *restic.Node) {
err := lsNodeJSON(enc, path, node) err = enc.Encode(lsNode{
Name: node.Name,
Type: node.Type,
Path: path,
UID: node.UID,
GID: node.GID,
Size: node.Size,
Mode: node.Mode,
ModTime: node.ModTime,
AccessTime: node.AccessTime,
ChangeTime: node.ChangeTime,
StructType: "node",
})
if err != nil { if err != nil {
Warnf("JSON encode failed: %v\n", err) Warnf("JSON encode failed: %v\n", err)
} }
-91
View File
@@ -1,91 +0,0 @@
package main
import (
"bytes"
"encoding/json"
"os"
"testing"
"time"
"github.com/restic/restic/internal/restic"
rtest "github.com/restic/restic/internal/test"
)
func TestLsNodeJSON(t *testing.T) {
for _, c := range []struct {
path string
restic.Node
expect string
}{
// Mode is omitted when zero.
{
path: "/bar/baz",
Node: restic.Node{
Name: "baz",
Type: "file",
Size: 12345,
UID: 10000000,
GID: 20000000,
User: "nobody",
Group: "nobodies",
Links: 1,
},
expect: `{"name":"baz","type":"file","path":"/bar/baz","uid":10000000,"gid":20000000,"size":12345,"mtime":"0001-01-01T00:00:00Z","atime":"0001-01-01T00:00:00Z","ctime":"0001-01-01T00:00:00Z","struct_type":"node"}`,
},
// Even empty files get an explicit size.
{
path: "/foo/empty",
Node: restic.Node{
Name: "empty",
Type: "file",
Size: 0,
UID: 1001,
GID: 1001,
User: "not printed",
Group: "not printed",
Links: 0xF00,
},
expect: `{"name":"empty","type":"file","path":"/foo/empty","uid":1001,"gid":1001,"size":0,"mtime":"0001-01-01T00:00:00Z","atime":"0001-01-01T00:00:00Z","ctime":"0001-01-01T00:00:00Z","struct_type":"node"}`,
},
// Non-regular files do not get a size.
// Mode is printed in decimal, including the type bits.
{
path: "/foo/link",
Node: restic.Node{
Name: "link",
Type: "symlink",
Mode: os.ModeSymlink | 0777,
LinkTarget: "not printed",
},
expect: `{"name":"link","type":"symlink","path":"/foo/link","uid":0,"gid":0,"mode":134218239,"mtime":"0001-01-01T00:00:00Z","atime":"0001-01-01T00:00:00Z","ctime":"0001-01-01T00:00:00Z","struct_type":"node"}`,
},
{
path: "/some/directory",
Node: restic.Node{
Name: "directory",
Type: "dir",
Mode: os.ModeDir | 0755,
ModTime: time.Date(2020, 1, 2, 3, 4, 5, 0, time.UTC),
AccessTime: time.Date(2021, 2, 3, 4, 5, 6, 7, time.UTC),
ChangeTime: time.Date(2022, 3, 4, 5, 6, 7, 8, time.UTC),
},
expect: `{"name":"directory","type":"dir","path":"/some/directory","uid":0,"gid":0,"mode":2147484141,"mtime":"2020-01-02T03:04:05Z","atime":"2021-02-03T04:05:06.000000007Z","ctime":"2022-03-04T05:06:07.000000008Z","struct_type":"node"}`,
},
} {
buf := new(bytes.Buffer)
enc := json.NewEncoder(buf)
err := lsNodeJSON(enc, c.path, &c.Node)
rtest.OK(t, err)
rtest.Equals(t, c.expect+"\n", buf.String())
// Sanity check: output must be valid JSON.
var v interface{}
err = json.NewDecoder(buf).Decode(&v)
rtest.OK(t, err)
}
}
-1
View File
@@ -122,7 +122,6 @@ func runMount(opts MountOptions, gopts GlobalOptions, args []string) error {
mountOptions := []systemFuse.MountOption{ mountOptions := []systemFuse.MountOption{
systemFuse.ReadOnly(), systemFuse.ReadOnly(),
systemFuse.FSName("restic"), systemFuse.FSName("restic"),
systemFuse.MaxReadahead(128 * 1024),
} }
if opts.AllowOther { if opts.AllowOther {
+2 -2
View File
@@ -249,7 +249,7 @@ func prune(opts PruneOptions, gopts GlobalOptions, repo restic.Repository, usedB
"Integrity check failed: Data seems to be missing.\n"+ "Integrity check failed: Data seems to be missing.\n"+
"Will not start prune to prevent (additional) data loss!\n"+ "Will not start prune to prevent (additional) data loss!\n"+
"Please report this error (along with the output of the 'prune' run) at\n"+ "Please report this error (along with the output of the 'prune' run) at\n"+
"https://github.com/restic/restic/issues/new/choose\n", usedBlobs) "https://github.com/restic/restic/issues/new/choose", usedBlobs)
return errorIndexIncomplete return errorIndexIncomplete
} }
@@ -324,7 +324,7 @@ func prune(opts PruneOptions, gopts GlobalOptions, repo restic.Repository, usedB
// Pack size does not fit and pack is needed => error // Pack size does not fit and pack is needed => error
// If the pack is not needed, this is no error, the pack can // If the pack is not needed, this is no error, the pack can
// and will be simply removed, see below. // and will be simply removed, see below.
Warnf("pack %s: calculated size %d does not match real size %d\nRun 'restic rebuild-index'.\n", Warnf("pack %s: calculated size %d does not match real size %d\nRun 'restic rebuild-index'.",
id.Str(), p.unusedSize+p.usedSize, packSize) id.Str(), p.unusedSize+p.usedSize, packSize)
return errorSizeNotMatching return errorSizeNotMatching
} }
+9 -21
View File
@@ -36,8 +36,7 @@ type SnapshotOptions struct {
Tags restic.TagLists Tags restic.TagLists
Paths []string Paths []string
Compact bool Compact bool
Last bool // This option should be removed in favour of Latest. Last bool
Latest int
GroupBy string GroupBy string
} }
@@ -52,12 +51,6 @@ func init() {
f.StringArrayVar(&snapshotOptions.Paths, "path", nil, "only consider snapshots for this `path` (can be specified multiple times)") f.StringArrayVar(&snapshotOptions.Paths, "path", nil, "only consider snapshots for this `path` (can be specified multiple times)")
f.BoolVarP(&snapshotOptions.Compact, "compact", "c", false, "use compact output format") f.BoolVarP(&snapshotOptions.Compact, "compact", "c", false, "use compact output format")
f.BoolVar(&snapshotOptions.Last, "last", false, "only show the last snapshot for each host and path") f.BoolVar(&snapshotOptions.Last, "last", false, "only show the last snapshot for each host and path")
err := f.MarkDeprecated("last", "use --latest 1")
if err != nil {
// MarkDeprecated only returns an error when the flag is not found
panic(err)
}
f.IntVar(&snapshotOptions.Latest, "latest", 0, "only show the last `n` snapshots for each host and path")
f.StringVarP(&snapshotOptions.GroupBy, "group-by", "g", "", "string for grouping snapshots by host,paths,tags") f.StringVarP(&snapshotOptions.GroupBy, "group-by", "g", "", "string for grouping snapshots by host,paths,tags")
} }
@@ -89,11 +82,7 @@ func runSnapshots(opts SnapshotOptions, gopts GlobalOptions, args []string) erro
for k, list := range snapshotGroups { for k, list := range snapshotGroups {
if opts.Last { if opts.Last {
// This branch should be removed in the same time list = FilterLastSnapshots(list)
// that --last.
list = FilterLastestSnapshots(list, 1)
} else if opts.Latest > 0 {
list = FilterLastestSnapshots(list, opts.Latest)
} }
sort.Sort(sort.Reverse(list)) sort.Sort(sort.Reverse(list))
snapshotGroups[k] = list snapshotGroups[k] = list
@@ -136,22 +125,21 @@ func newFilterLastSnapshotsKey(sn *restic.Snapshot) filterLastSnapshotsKey {
return filterLastSnapshotsKey{sn.Hostname, strings.Join(paths, "|")} return filterLastSnapshotsKey{sn.Hostname, strings.Join(paths, "|")}
} }
// FilterLastestSnapshots filters a list of snapshots to only return // FilterLastSnapshots filters a list of snapshots to only return the last
// the limit last entries for each hostname and path. If the snapshot // entry for each hostname and path. If the snapshot contains multiple paths,
// contains multiple paths, they will be joined and treated as one // they will be joined and treated as one item.
// item. func FilterLastSnapshots(list restic.Snapshots) restic.Snapshots {
func FilterLastestSnapshots(list restic.Snapshots, limit int) restic.Snapshots {
// Sort the snapshots so that the newer ones are listed first // Sort the snapshots so that the newer ones are listed first
sort.SliceStable(list, func(i, j int) bool { sort.SliceStable(list, func(i, j int) bool {
return list[i].Time.After(list[j].Time) return list[i].Time.After(list[j].Time)
}) })
var results restic.Snapshots var results restic.Snapshots
seen := make(map[filterLastSnapshotsKey]int) seen := make(map[filterLastSnapshotsKey]bool)
for _, sn := range list { for _, sn := range list {
key := newFilterLastSnapshotsKey(sn) key := newFilterLastSnapshotsKey(sn)
if seen[key] < limit { if !seen[key] {
seen[key]++ seen[key] = true
results = append(results, sn) results = append(results, sn)
} }
} }
+5 -10
View File
@@ -25,21 +25,16 @@ const numDeleteWorkers = 8
func deleteFiles(gopts GlobalOptions, ignoreError bool, repo restic.Repository, fileList restic.IDSet, fileType restic.FileType) error { func deleteFiles(gopts GlobalOptions, ignoreError bool, repo restic.Repository, fileList restic.IDSet, fileType restic.FileType) error {
totalCount := len(fileList) totalCount := len(fileList)
fileChan := make(chan restic.ID) fileChan := make(chan restic.ID)
wg, ctx := errgroup.WithContext(gopts.ctx) go func() {
wg.Go(func() error {
defer close(fileChan)
for id := range fileList { for id := range fileList {
select { fileChan <- id
case fileChan <- id:
case <-ctx.Done():
return ctx.Err()
}
} }
return nil close(fileChan)
}) }()
bar := newProgressMax(!gopts.JSON && !gopts.Quiet, uint64(totalCount), "files deleted") bar := newProgressMax(!gopts.JSON && !gopts.Quiet, uint64(totalCount), "files deleted")
defer bar.Done() defer bar.Done()
wg, ctx := errgroup.WithContext(gopts.ctx)
for i := 0; i < numDeleteWorkers; i++ { for i := 0; i < numDeleteWorkers; i++ {
wg.Go(func() error { wg.Go(func() error {
for id := range fileChan { for id := range fileChan {
+7 -16
View File
@@ -31,7 +31,6 @@ import (
"github.com/restic/restic/internal/repository" "github.com/restic/restic/internal/repository"
"github.com/restic/restic/internal/restic" "github.com/restic/restic/internal/restic"
"github.com/restic/restic/internal/textfile" "github.com/restic/restic/internal/textfile"
"github.com/restic/restic/internal/ui/termstatus"
"github.com/restic/restic/internal/errors" "github.com/restic/restic/internal/errors"
@@ -40,7 +39,7 @@ import (
"golang.org/x/crypto/ssh/terminal" "golang.org/x/crypto/ssh/terminal"
) )
var version = "0.12.1" var version = "0.12.0"
// TimeFormat is the format used for all timestamps printed by restic. // TimeFormat is the format used for all timestamps printed by restic.
const TimeFormat = "2006-01-02 15:04:05" const TimeFormat = "2006-01-02 15:04:05"
@@ -119,8 +118,6 @@ func init() {
f.IntVar(&globalOptions.LimitUploadKb, "limit-upload", 0, "limits uploads to a maximum rate in KiB/s. (default: unlimited)") f.IntVar(&globalOptions.LimitUploadKb, "limit-upload", 0, "limits uploads to a maximum rate in KiB/s. (default: unlimited)")
f.IntVar(&globalOptions.LimitDownloadKb, "limit-download", 0, "limits downloads to a maximum rate in KiB/s. (default: unlimited)") f.IntVar(&globalOptions.LimitDownloadKb, "limit-download", 0, "limits downloads to a maximum rate in KiB/s. (default: unlimited)")
f.StringSliceVarP(&globalOptions.Options, "option", "o", []string{}, "set extended option (`key=value`, can be specified multiple times)") f.StringSliceVarP(&globalOptions.Options, "option", "o", []string{}, "set extended option (`key=value`, can be specified multiple times)")
// Use our "generate" command instead of the cobra provided "completion" command
cmdRoot.CompletionOptions.DisableDefaultCmd = true
restoreTerminal() restoreTerminal()
} }
@@ -145,13 +142,7 @@ func stdinIsTerminal() bool {
} }
func stdoutIsTerminal() bool { func stdoutIsTerminal() bool {
// mintty on windows can use pipes which behave like a posix terminal, return terminal.IsTerminal(int(os.Stdout.Fd()))
// but which are not a terminal handle
return terminal.IsTerminal(int(os.Stdout.Fd())) || stdoutCanUpdateStatus()
}
func stdoutCanUpdateStatus() bool {
return termstatus.CanUpdateStatus(os.Stdout.Fd())
} }
func stdoutTerminalWidth() int { func stdoutTerminalWidth() int {
@@ -168,7 +159,7 @@ func stdoutTerminalWidth() int {
// program execution must revert changes to the terminal configuration itself. // program execution must revert changes to the terminal configuration itself.
// The terminal configuration is only restored while reading a password. // The terminal configuration is only restored while reading a password.
func restoreTerminal() { func restoreTerminal() {
if !terminal.IsTerminal(int(os.Stdout.Fd())) { if !stdoutIsTerminal() {
return return
} }
@@ -257,7 +248,7 @@ func PrintProgress(format string, args ...interface{}) {
message = fmt.Sprintf(format, args...) message = fmt.Sprintf(format, args...)
if !(strings.HasSuffix(message, "\r") || strings.HasSuffix(message, "\n")) { if !(strings.HasSuffix(message, "\r") || strings.HasSuffix(message, "\n")) {
if stdoutCanUpdateStatus() { if stdoutIsTerminal() {
carriageControl = "\r" carriageControl = "\r"
} else { } else {
carriageControl = "\n" carriageControl = "\n"
@@ -265,7 +256,7 @@ func PrintProgress(format string, args ...interface{}) {
message = fmt.Sprintf("%s%s", message, carriageControl) message = fmt.Sprintf("%s%s", message, carriageControl)
} }
if stdoutCanUpdateStatus() { if stdoutIsTerminal() {
message = fmt.Sprintf("%s%s", ClearLine(), message) message = fmt.Sprintf("%s%s", ClearLine(), message)
} }
@@ -373,7 +364,7 @@ func ReadPassword(opts GlobalOptions, prompt string) (string, error) {
} }
if len(password) == 0 { if len(password) == 0 {
return "", errors.Fatal("an empty password is not a password") return "", errors.New("an empty password is not a password")
} }
return password, nil return password, nil
@@ -501,7 +492,7 @@ func OpenRepository(opts GlobalOptions) (*repository.Repository, error) {
return s, nil return s, nil
} }
if c.Created && !opts.JSON && stdoutIsTerminal() { if c.Created && !opts.JSON {
Verbosef("created new cache in %v\n", c.Base) Verbosef("created new cache in %v\n", c.Base)
} }
-19
View File
@@ -799,25 +799,6 @@ func TestCopyIncremental(t *testing.T) {
len(copiedSnapshotIDs), len(snapshotIDs)) len(copiedSnapshotIDs), len(snapshotIDs))
} }
func TestCopyUnstableJSON(t *testing.T) {
env, cleanup := withTestEnvironment(t)
defer cleanup()
env2, cleanup2 := withTestEnvironment(t)
defer cleanup2()
// contains a symlink created using `ln -s '../i/'$'\355\246\361''d/samba' broken-symlink`
datafile := filepath.Join("testdata", "copy-unstable-json.tar.gz")
rtest.SetupTarTestFixture(t, env.base, datafile)
testRunInit(t, env2.gopts)
testRunCopy(t, env.gopts, env2.gopts)
testRunCheck(t, env2.gopts)
copiedSnapshotIDs := testRunList(t, "snapshots", env2.gopts)
rtest.Assert(t, 1 == len(copiedSnapshotIDs), "still expected %v snapshot, found %v",
1, len(copiedSnapshotIDs))
}
func TestInitCopyChunkerParams(t *testing.T) { func TestInitCopyChunkerParams(t *testing.T) {
env, cleanup := withTestEnvironment(t) env, cleanup := withTestEnvironment(t)
defer cleanup() defer cleanup()
+4 -4
View File
@@ -11,8 +11,8 @@ import (
// calculateProgressInterval returns the interval configured via RESTIC_PROGRESS_FPS // calculateProgressInterval returns the interval configured via RESTIC_PROGRESS_FPS
// or if unset returns an interval for 60fps on interactive terminals and 0 (=disabled) // or if unset returns an interval for 60fps on interactive terminals and 0 (=disabled)
// for non-interactive terminals or when run using the --quiet flag // for non-interactive terminals
func calculateProgressInterval(show bool) time.Duration { func calculateProgressInterval() time.Duration {
interval := time.Second / 60 interval := time.Second / 60
fps, err := strconv.ParseFloat(os.Getenv("RESTIC_PROGRESS_FPS"), 64) fps, err := strconv.ParseFloat(os.Getenv("RESTIC_PROGRESS_FPS"), 64)
if err == nil && fps > 0 { if err == nil && fps > 0 {
@@ -20,7 +20,7 @@ func calculateProgressInterval(show bool) time.Duration {
fps = 60 fps = 60
} }
interval = time.Duration(float64(time.Second) / fps) interval = time.Duration(float64(time.Second) / fps)
} else if !stdoutCanUpdateStatus() || !show { } else if !stdoutIsTerminal() {
interval = 0 interval = 0
} }
return interval return interval
@@ -31,7 +31,7 @@ func newProgressMax(show bool, max uint64, description string) *progress.Counter
if !show { if !show {
return nil return nil
} }
interval := calculateProgressInterval(show) interval := calculateProgressInterval()
return progress.New(interval, max, func(v uint64, max uint64, d time.Duration, final bool) { return progress.New(interval, max, func(v uint64, max uint64, d time.Duration, final bool) {
var status string var status string
+2 -10
View File
@@ -9,7 +9,6 @@ import (
type secondaryRepoOptions struct { type secondaryRepoOptions struct {
Repo string Repo string
RepositoryFile string
password string password string
PasswordFile string PasswordFile string
PasswordCommand string PasswordCommand string
@@ -18,25 +17,18 @@ type secondaryRepoOptions struct {
func initSecondaryRepoOptions(f *pflag.FlagSet, opts *secondaryRepoOptions, repoPrefix string, repoUsage string) { func initSecondaryRepoOptions(f *pflag.FlagSet, opts *secondaryRepoOptions, repoPrefix string, repoUsage string) {
f.StringVarP(&opts.Repo, "repo2", "", os.Getenv("RESTIC_REPOSITORY2"), repoPrefix+" `repository` "+repoUsage+" (default: $RESTIC_REPOSITORY2)") f.StringVarP(&opts.Repo, "repo2", "", os.Getenv("RESTIC_REPOSITORY2"), repoPrefix+" `repository` "+repoUsage+" (default: $RESTIC_REPOSITORY2)")
f.StringVarP(&opts.RepositoryFile, "repository-file2", "", os.Getenv("RESTIC_REPOSITORY_FILE2"), "`file` from which to read the "+repoPrefix+" repository location "+repoUsage+" (default: $RESTIC_REPOSITORY_FILE2)")
f.StringVarP(&opts.PasswordFile, "password-file2", "", os.Getenv("RESTIC_PASSWORD_FILE2"), "`file` to read the "+repoPrefix+" repository password from (default: $RESTIC_PASSWORD_FILE2)") f.StringVarP(&opts.PasswordFile, "password-file2", "", os.Getenv("RESTIC_PASSWORD_FILE2"), "`file` to read the "+repoPrefix+" repository password from (default: $RESTIC_PASSWORD_FILE2)")
f.StringVarP(&opts.KeyHint, "key-hint2", "", os.Getenv("RESTIC_KEY_HINT2"), "key ID of key to try decrypting the "+repoPrefix+" repository first (default: $RESTIC_KEY_HINT2)") f.StringVarP(&opts.KeyHint, "key-hint2", "", os.Getenv("RESTIC_KEY_HINT2"), "key ID of key to try decrypting the "+repoPrefix+" repository first (default: $RESTIC_KEY_HINT2)")
f.StringVarP(&opts.PasswordCommand, "password-command2", "", os.Getenv("RESTIC_PASSWORD_COMMAND2"), "shell `command` to obtain the "+repoPrefix+" repository password from (default: $RESTIC_PASSWORD_COMMAND2)") f.StringVarP(&opts.PasswordCommand, "password-command2", "", os.Getenv("RESTIC_PASSWORD_COMMAND2"), "shell `command` to obtain the "+repoPrefix+" repository password from (default: $RESTIC_PASSWORD_COMMAND2)")
} }
func fillSecondaryGlobalOpts(opts secondaryRepoOptions, gopts GlobalOptions, repoPrefix string) (GlobalOptions, error) { func fillSecondaryGlobalOpts(opts secondaryRepoOptions, gopts GlobalOptions, repoPrefix string) (GlobalOptions, error) {
if opts.Repo == "" && opts.RepositoryFile == "" { if opts.Repo == "" {
return GlobalOptions{}, errors.Fatal("Please specify a " + repoPrefix + " repository location (--repo2 or --repository-file2)") return GlobalOptions{}, errors.Fatal("Please specify a " + repoPrefix + " repository location (--repo2)")
} }
if opts.Repo != "" && opts.RepositoryFile != "" {
return GlobalOptions{}, errors.Fatal("Options --repo2 and --repository-file2 are mutually exclusive, please specify only one")
}
var err error var err error
dstGopts := gopts dstGopts := gopts
dstGopts.Repo = opts.Repo dstGopts.Repo = opts.Repo
dstGopts.RepositoryFile = opts.RepositoryFile
dstGopts.PasswordFile = opts.PasswordFile dstGopts.PasswordFile = opts.PasswordFile
dstGopts.PasswordCommand = opts.PasswordCommand dstGopts.PasswordCommand = opts.PasswordCommand
dstGopts.KeyHint = opts.KeyHint dstGopts.KeyHint = opts.KeyHint
-132
View File
@@ -1,132 +0,0 @@
package main
import (
"io/ioutil"
"path/filepath"
"testing"
rtest "github.com/restic/restic/internal/test"
)
//TestFillSecondaryGlobalOpts tests valid and invalid data on fillSecondaryGlobalOpts-function
func TestFillSecondaryGlobalOpts(t *testing.T) {
//secondaryRepoTestCase defines a struct for test cases
type secondaryRepoTestCase struct {
Opts secondaryRepoOptions
DstGOpts GlobalOptions
}
//validSecondaryRepoTestCases is a list with test cases that must pass
var validSecondaryRepoTestCases = []secondaryRepoTestCase{
{
// Test if Repo and Password are parsed correctly.
Opts: secondaryRepoOptions{
Repo: "backupDst",
password: "secretDst",
},
DstGOpts: GlobalOptions{
Repo: "backupDst",
password: "secretDst",
},
},
{
// Test if RepositoryFile and PasswordFile are parsed correctly.
Opts: secondaryRepoOptions{
RepositoryFile: "backupDst",
PasswordFile: "passwordFileDst",
},
DstGOpts: GlobalOptions{
RepositoryFile: "backupDst",
password: "secretDst",
PasswordFile: "passwordFileDst",
},
},
{
// Test if RepositoryFile and PasswordCommand are parsed correctly.
Opts: secondaryRepoOptions{
RepositoryFile: "backupDst",
PasswordCommand: "echo secretDst",
},
DstGOpts: GlobalOptions{
RepositoryFile: "backupDst",
password: "secretDst",
PasswordCommand: "echo secretDst",
},
},
}
//invalidSecondaryRepoTestCases is a list with test cases that must fail
var invalidSecondaryRepoTestCases = []secondaryRepoTestCase{
{
// Test must fail on no repo given.
Opts: secondaryRepoOptions{},
},
{
// Test must fail as Repo and RepositoryFile are both given
Opts: secondaryRepoOptions{
Repo: "backupDst",
RepositoryFile: "backupDst",
},
},
{
// Test must fail as PasswordFile and PasswordCommand are both given
Opts: secondaryRepoOptions{
Repo: "backupDst",
PasswordFile: "passwordFileDst",
PasswordCommand: "notEmpty",
},
},
{
// Test must fail as PasswordFile does not exist
Opts: secondaryRepoOptions{
Repo: "backupDst",
PasswordFile: "NonExistingFile",
},
},
{
// Test must fail as PasswordCommand does not exist
Opts: secondaryRepoOptions{
Repo: "backupDst",
PasswordCommand: "notEmpty",
},
},
{
// Test must fail as no password is given.
Opts: secondaryRepoOptions{
Repo: "backupDst",
},
},
}
//gOpts defines the Global options used in the secondary repository tests
var gOpts = GlobalOptions{
Repo: "backupSrc",
RepositoryFile: "backupSrc",
password: "secretSrc",
PasswordFile: "passwordFileSrc",
}
//Create temp dir to create password file.
dir, cleanup := rtest.TempDir(t)
defer cleanup()
cleanup = rtest.Chdir(t, dir)
defer cleanup()
//Create temporary password file
err := ioutil.WriteFile(filepath.Join(dir, "passwordFileDst"), []byte("secretDst"), 0666)
rtest.OK(t, err)
// Test all valid cases
for _, testCase := range validSecondaryRepoTestCases {
DstGOpts, err := fillSecondaryGlobalOpts(testCase.Opts, gOpts, "destination")
rtest.OK(t, err)
rtest.Equals(t, DstGOpts, testCase.DstGOpts)
}
// Test all invalid cases
for _, testCase := range invalidSecondaryRepoTestCases {
_, err := fillSecondaryGlobalOpts(testCase.Opts, gOpts, "destination")
rtest.Assert(t, err != nil, "Expected error, but function did not return an error")
}
}
Binary file not shown.
-4
View File
@@ -42,11 +42,9 @@ make %{?_smp_mflags}
mkdir -p %{buildroot}%{_bindir} mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_mandir}/man1 mkdir -p %{buildroot}%{_mandir}/man1
mkdir -p %{buildroot}%{_datarootdir}/zsh/site-functions mkdir -p %{buildroot}%{_datarootdir}/zsh/site-functions
mkdir -p %{buildroot}%{_datarootdir}/fish/vendor_completions.d
mkdir -p %{buildroot}%{_datarootdir}/bash-completion/completions mkdir -p %{buildroot}%{_datarootdir}/bash-completion/completions
install -p -m 644 doc/man/* %{buildroot}%{_mandir}/man1/ install -p -m 644 doc/man/* %{buildroot}%{_mandir}/man1/
install -p -m 644 doc/zsh-completion.zsh %{buildroot}%{_datarootdir}/zsh/site-functions/_restic install -p -m 644 doc/zsh-completion.zsh %{buildroot}%{_datarootdir}/zsh/site-functions/_restic
install -p -m 644 doc/fish-completion.fish %{buildroot}%{_datarootdir}/fish/vendor_completions.d/restic.fish
install -p -m 644 doc/bash-completion.sh %{buildroot}%{_datarootdir}/bash-completion/completions/restic install -p -m 644 doc/bash-completion.sh %{buildroot}%{_datarootdir}/bash-completion/completions/restic
install -p -m 755 %{name} %{buildroot}%{_bindir} install -p -m 755 %{name} %{buildroot}%{_bindir}
@@ -56,8 +54,6 @@ install -p -m 755 %{name} %{buildroot}%{_bindir}
%{_bindir}/%{name} %{_bindir}/%{name}
%dir %{_datadir}/zsh/site-functions %dir %{_datadir}/zsh/site-functions
%{_datadir}/zsh/site-functions/_restic %{_datadir}/zsh/site-functions/_restic
%dir %{_datadir}/fish/vendor_completions.d
%{_datadir}/fish/vendor_completions.d/restic.fish
%dir %{_datadir}/bash-completion/ %dir %{_datadir}/bash-completion/
%dir %{_datadir}/bash-completion/completions %dir %{_datadir}/bash-completion/completions
%{_datadir}/bash-completion/completions/restic %{_datadir}/bash-completion/completions/restic
+2 -8
View File
@@ -292,21 +292,20 @@ compiler. Building restic with gccgo may work, but is not supported.
Autocompletion Autocompletion
************** **************
Restic can write out man pages and bash/fish/zsh compatible autocompletion scripts: Restic can write out man pages and bash/zsh compatible autocompletion scripts:
.. code-block:: console .. code-block:: console
$ ./restic generate --help $ ./restic generate --help
The "generate" command writes automatically generated files (like the man pages The "generate" command writes automatically generated files (like the man pages
and the auto-completion files for bash, fish and zsh). and the auto-completion files for bash and zsh).
Usage: Usage:
restic generate [flags] [command] restic generate [flags] [command]
Flags: Flags:
--bash-completion file write bash completion file --bash-completion file write bash completion file
--fish-completion file write fish completion file
-h, --help help for generate -h, --help help for generate
--man directory write man pages to directory --man directory write man pages to directory
--zsh-completion file write zsh completion file --zsh-completion file write zsh completion file
@@ -317,8 +316,3 @@ Example for using sudo to write a bash completion script directly to the system-
$ sudo ./restic generate --bash-completion /etc/bash_completion.d/restic $ sudo ./restic generate --bash-completion /etc/bash_completion.d/restic
writing bash completion file to /etc/bash_completion.d/restic writing bash completion file to /etc/bash_completion.d/restic
.. note:: The path for the ``--bash-completion`` option may vary depending on
the operating system used, e.g. ``/usr/share/bash-completion/completions/restic``
in Debian and derivatives. Please look up the correct path in the appropriate
documentation.
+1 -1
View File
@@ -61,7 +61,7 @@ command and enter the same password twice:
On Linux, storing the backup repository on a CIFS (SMB) share is not On Linux, storing the backup repository on a CIFS (SMB) share is not
recommended due to compatibility issues. Either use another backend recommended due to compatibility issues. Either use another backend
or set the environment variable `GODEBUG` to `asyncpreemptoff=1`. or set the environment variable `GODEBUG` to `asyncpreemptoff=1`.
Refer to GitHub issue `#2659 <https://github.com/restic/restic/issues/2659>`_ for further explanations. Refer to GitHub issue #2659 for further explanations.
SFTP SFTP
**** ****
+39 -49
View File
@@ -73,7 +73,7 @@ repository (since all data is already there). This is de-duplication at work!
.. code-block:: console .. code-block:: console
$ restic -r /srv/restic-repo --verbose backup ~/work $ restic -r /srv/restic-repo backup --verbose ~/work
open repository open repository
enter password for repository: enter password for repository:
password is correct password is correct
@@ -107,7 +107,7 @@ restic encounters:
$ echo 'more data foo bar' >> ~/work.txt $ echo 'more data foo bar' >> ~/work.txt
$ restic -r /srv/restic-repo --verbose --verbose backup ~/work.txt $ restic -r /srv/restic-repo backup --verbose --verbose ~/work.txt
open repository open repository
enter password for repository: enter password for repository:
password is correct password is correct
@@ -183,9 +183,9 @@ Note that the device id of the containing mount point is never taken into
account. Device numbers are not stable for removable devices and ZFS snapshots. account. Device numbers are not stable for removable devices and ZFS snapshots.
If you want to force a re-scan in such a case, you can change the mountpoint. If you want to force a re-scan in such a case, you can change the mountpoint.
On **Windows**, a file is considered unchanged when its path, size On **Windows**, a file is considered unchanged when its path and modification
and modification time match, and only ``--force`` has any effect. time match, and only ``--force`` has any effect. The other options are
The other options are recognized but ignored. recognized but ignored.
Excluding Files Excluding Files
*************** ***************
@@ -227,16 +227,11 @@ This instructs restic to exclude files matching the following criteria:
Patterns use `filepath.Glob <https://golang.org/pkg/path/filepath/#Glob>`__ internally, Patterns use `filepath.Glob <https://golang.org/pkg/path/filepath/#Glob>`__ internally,
see `filepath.Match <https://golang.org/pkg/path/filepath/#Match>`__ for see `filepath.Match <https://golang.org/pkg/path/filepath/#Match>`__ for
syntax. Patterns are tested against the full path of a file/dir to be saved, syntax. Patterns are tested against the full path of a file/dir to be saved,
even if restic is passed a relative path to save. Empty lines and lines even if restic is passed a relative path to save.
starting with a ``#`` are ignored.
Environment variables in exclude files are expanded with `os.ExpandEnv Environment-variables in exclude files are expanded with `os.ExpandEnv <https://golang.org/pkg/os/#ExpandEnv>`__,
<https://golang.org/pkg/os/#ExpandEnv>`__, so ``/home/$USER/foo`` will be so ``/home/$USER/foo`` will be expanded to ``/home/bob/foo`` for the user ``bob``.
expanded to ``/home/bob/foo`` for the user ``bob``. To get a literal dollar To get a literal dollar sign, write ``$$`` to the file. Note that tilde (``~``) expansion does not work, please use the ``$HOME`` environment variable instead.
sign, write ``$$`` to the file - this has to be done even when there's no
matching environment variable for the word following a single ``$``. Note
that tilde (``~``) is not expanded, instead use the ``$HOME`` or equivalent
environment variable (depending on your operating system).
Patterns need to match on complete path components. For example, the pattern ``foo``: Patterns need to match on complete path components. For example, the pattern ``foo``:
@@ -246,10 +241,11 @@ Patterns need to match on complete path components. For example, the pattern ``f
A trailing ``/`` is ignored, a leading ``/`` anchors the pattern at the root directory. A trailing ``/`` is ignored, a leading ``/`` anchors the pattern at the root directory.
This means, ``/bin`` matches ``/bin/bash`` but does not match ``/usr/bin/restic``. This means, ``/bin`` matches ``/bin/bash`` but does not match ``/usr/bin/restic``.
Regular wildcards cannot be used to match over the directory separator ``/``, Regular wildcards cannot be used to match over the directory separator ``/``.
e.g. ``b*ash`` matches ``/bin/bash`` but does not match ``/bin/ash``. For this, For example: ``b*ash`` matches ``/bin/bash`` but does not match ``/bin/ash``.
the special wildcard ``**`` can be used to match arbitrary sub-directories: The
pattern ``foo/**/bar`` matches: For this, the special wildcard ``**`` can be used to match arbitrary
sub-directories: The pattern ``foo/**/bar`` matches:
* ``/dir1/foo/dir2/bar/file`` * ``/dir1/foo/dir2/bar/file``
* ``/foo/bar/file`` * ``/foo/bar/file``
@@ -275,7 +271,7 @@ On most Unixy shells, you can either quote or use backslashes. For example:
By specifying the option ``--one-file-system`` you can instruct restic By specifying the option ``--one-file-system`` you can instruct restic
to only backup files from the file systems the initially specified files to only backup files from the file systems the initially specified files
or directories reside on. In other words, it will prevent restic from crossing or directories reside on. In other words, it will prevent restic from crossing
filesystem boundaries and subvolumes when performing a backup. filesystem boundaries when performing a backup.
For example, if you backup ``/`` with this option and you have external For example, if you backup ``/`` with this option and you have external
media mounted under ``/media/usb`` then restic will not back up ``/media/usb`` media mounted under ``/media/usb`` then restic will not back up ``/media/usb``
@@ -319,48 +315,42 @@ Including Files
*************** ***************
The options ``--files-from``, ``--files-from-verbatim`` and ``--files-from-raw`` The options ``--files-from``, ``--files-from-verbatim`` and ``--files-from-raw``
allow you to give restic a file containing lists of file patterns or paths to allow you to list files that should be backed up in a file, rather than on the
be backed up. This is useful e.g. when you want to back up files from many command line. This is useful when a lot of files have to be backed up that are
different locations, or when you use some other software to generate the list not in the same folder.
of files to back up.
The argument passed to ``--files-from`` must be the name of a text file that The argument passed to ``--files-from`` must be the name of a text file that
contains one *pattern* per line. The file must be encoded as UTF-8, or UTF-16 contains one pattern per line. The file must be encoded as UTF-8, or UTF-16
with a byte-order mark. Leading and trailing whitespace is removed from the with a byte-order mark. Leading and trailing whitespace is removed from the
patterns. Empty lines and lines starting with a ``#`` are ignored and each patterns. Empty lines and lines starting with a ``#`` are ignored.
pattern is expanded when read, such that special characters in it are expanded The patterns are expanded, when the file is read, by the Go function
using the Go function `filepath.Glob <https://golang.org/pkg/path/filepath/#Glob>`__ `filepath.Glob <https://golang.org/pkg/path/filepath/#Glob>`__.
- please see its documentation for the syntax you can use in the patterns.
The argument passed to ``--files-from-verbatim`` must be the name of a text file The option ``--files-from-verbatim`` has the same behavior as ``--files-from``,
that contains one *path* per line, e.g. as generated by GNU ``find`` with the except that it contains literal filenames. It does expand patterns; filenames
``-print`` flag. Unlike ``--files-from``, ``--files-from-verbatim`` does not are listed verbatim. Lines starting with a ``#`` are not ignored; leading and
expand any special characters in the list of paths, does not strip off any trailing whitespace is not trimmed off. Empty lines are still allowed, so that
whitespace and does not ignore lines starting with a ``#``. This option simply files can be grouped.
reads and uses each line as-is, although empty lines are still ignored. Use this
option when you want to backup a list of filenames containing the special
characters that would otherwise be expanded when using ``--files-from``.
The ``--files-from-raw`` option is a variant of ``--files-from-verbatim`` that ``--files-from-raw`` is a third variant that requires filenames to be terminated
requires each line in the file to be terminated by an ASCII NUL character (the by a zero byte (the NUL character), so that it can even handle filenames that
``\0`` zero byte) instead of a newline, so that it can even handle file paths contain newlines or are not encoded as UTF-8 (except on Windows, where the
containing newlines in their name or are not encoded as UTF-8 (except on listed filenames must still be encoded in UTF-8).
Windows, where the listed filenames must still be encoded in UTF-8. This option
is the safest choice when generating the list of filenames from a script (e.g.
GNU ``find`` with the ``-print0`` flag).
All three options interpret the argument ``-`` as standard input and will read This option is the safest choice when generating filename lists from a script.
the list of files/patterns from there instead of a text file. Its file format is the output format generated by GNU find's ``-print0`` option.
In all cases, paths may be absolute or relative to ``restic backup``'s working All three arguments interpret the argument ``-`` as standard input.
directory.
In all cases, paths may be absolute or relative to ``restic backup``'s
working directory.
For example, maybe you want to backup files which have a name that matches a For example, maybe you want to backup files which have a name that matches a
certain regular expression pattern (uses GNU ``find``): certain regular expression pattern (uses GNU find):
.. code-block:: console .. code-block:: console
$ find /tmp/some_folder -regex PATTERN -print0 > /tmp/files_to_backup $ find /tmp/somefiles -regex PATTERN -print0 > /tmp/files_to_backup
You can then use restic to backup the filtered files: You can then use restic to backup the filtered files:
+2 -6
View File
@@ -117,12 +117,8 @@ be skipped by later copy runs.
both the source and destination repository, *may occupy up to twice their both the source and destination repository, *may occupy up to twice their
space* in the destination repository. See below for how to avoid this. space* in the destination repository. See below for how to avoid this.
The destination repository is specified with ``--repo2`` or can be read For the destination repository ``--repo2`` the password can be read from
from a file specified via ``--repository-file2``. Both of these options a file ``--password-file2`` or from a command ``--password-command2``.
can also set as environment variables ``$RESTIC_REPOSITORY2`` or
``$RESTIC_REPOSITORY_FILE2`` respectively. For the destination repository
the password can be read from a file ``--password-file2`` or from a command
``--password-command2``.
Alternatively the environment variables ``$RESTIC_PASSWORD_COMMAND2`` and Alternatively the environment variables ``$RESTIC_PASSWORD_COMMAND2`` and
``$RESTIC_PASSWORD_FILE2`` can be used. It is also possible to directly ``$RESTIC_PASSWORD_FILE2`` can be used. It is also possible to directly
pass the password via ``$RESTIC_PASSWORD2``. The key which should be used pass the password via ``$RESTIC_PASSWORD2``. The key which should be used
+3 -34
View File
@@ -58,7 +58,7 @@ command and specify the snapshot ID on the command line:
$ restic -r /srv/restic-repo forget bdbd3439 $ restic -r /srv/restic-repo forget bdbd3439
enter password for repository: enter password for repository:
removed snapshot bdbd3439 removed snapshot d3f01f63
Afterwards this snapshot is removed: Afterwards this snapshot is removed:
@@ -190,25 +190,11 @@ The ``forget`` command accepts the following parameters:
years, months, days, and hours, e.g. ``2y5m7d3h`` will keep all snapshots years, months, days, and hours, e.g. ``2y5m7d3h`` will keep all snapshots
made in the two years, five months, seven days, and three hours before the made in the two years, five months, seven days, and three hours before the
latest snapshot. latest snapshot.
- ``--keep-within-hourly duration`` keep all hourly snapshots made within
specified duration of the latest snapshot. The duration is specified in
the same way as for ``--keep-within`` and the method for determining
hourly snapshots is the same as for ``--keep-hourly``.
- ``--keep-within-daily duration`` keep all daily snapshots made within
specified duration of the latest snapshot.
- ``--keep-within-weekly duration`` keep all weekly snapshots made within
specified duration of the latest snapshot.
- ``--keep-within-monthly duration`` keep all monthly snapshots made within
specified duration of the latest snapshot.
- ``--keep-within-yearly duration`` keep all yearly snapshots made within
specified duration of the latest snapshot.
.. note:: All calendar related ``--keep-*`` options work on the natural time .. note:: All calendar related ``--keep-*`` options work on the natural time
boundaries and not relative to when you run the ``forget`` command. Weeks boundaries and not relative to when you run the ``forget`` command. Weeks
are Monday 00:00 -> Sunday 23:59, days 00:00 to 23:59, hours :00 to :59, etc. are Monday 00:00 -> Sunday 23:59, days 00:00 to 23:59, hours :00 to :59, etc.
.. note:: Specifying ``--keep-tag ''`` will match untagged snapshots only.
Multiple policies will be ORed together so as to be as inclusive as possible Multiple policies will be ORed together so as to be as inclusive as possible
for keeping snapshots. for keeping snapshots.
@@ -236,13 +222,6 @@ To only keep the last snapshot of all snapshots with both the tag ``foo`` and
$ restic forget --tag foo,bar --keep-last 1 $ restic forget --tag foo,bar --keep-last 1
To ensure only untagged snapshots are considered, specify the empty string '' as
the tag.
.. code-block:: console
$ restic forget --tag '' --keep-last 1
All the ``--keep-*`` options above only count All the ``--keep-*`` options above only count
hours/days/weeks/months/years which have a snapshot, so those without a hours/days/weeks/months/years which have a snapshot, so those without a
snapshot are ignored. snapshot are ignored.
@@ -326,16 +305,6 @@ last-day-of-the-months (11 or 12 depends if the 5 weeklies cross a month).
And finally 75 last-day-of-the-year snapshots. All other snapshots are And finally 75 last-day-of-the-year snapshots. All other snapshots are
removed. removed.
You might want to maintain the same policy as for the example above, but have
irregular backups. For example, the 7 snapshots specified with ``--keep-daily 7``
might be spread over a longer period. If what you want is to keep daily snapshots
for a week, weekly for a month, monthly for a year and yearly for 75 years, you
could specify:
``forget --keep-daily-within 7d --keep-weekly-within 1m --keep-monthly-within 1y
--keep-yearly-within 75y``
(Note that `1w` is not a recognized duration, so you will have to specify
`7d` instead)
Customize pruning Customize pruning
***************** *****************
@@ -372,10 +341,10 @@ The ``prune`` command accepts the following options:
unused files. This means that as long as some data is still used within unused files. This means that as long as some data is still used within
a file stored in the repo, restic will just leave it there. Use this if a file stored in the repo, restic will just leave it there. Use this if
you want to minimize the time and bandwidth used by the ``prune`` you want to minimize the time and bandwidth used by the ``prune``
operation. Note that metadata will still be repacked. operation.
Restic tries to repack as little data as possible while still ensuring this Restic tries to repack as little data as possible while still ensuring this
limit for unused data. The default value is 5%. limit for unused data.
- ``--max-repack-size size`` if set limits the total size of files to repack. - ``--max-repack-size size`` if set limits the total size of files to repack.
As ``prune`` first stores all repacked files and deletes the obsolete files at the end, As ``prune`` first stores all repacked files and deletes the obsolete files at the end,
-7
View File
@@ -338,13 +338,6 @@ attribute, interpret it and assign capabilities accordingly.
root@a3e580b6369d:/# setcap cap_dac_read_search=+ep ~restic/bin/restic root@a3e580b6369d:/# setcap cap_dac_read_search=+ep ~restic/bin/restic
.. important:: The capabilities of the ``setcap`` command only applies to this
specific copy of the restic binary. If you run ``restic self-update`` or
in any other way replace or update the binary, the capabilities you added
above will not be in effect for the new binary. To mitigate this, simply
run the ``setcap`` command again, to make sure that the new binary has the
same and intended capabilities.
From now on the user ``restic`` can run restic to backup the whole From now on the user ``restic`` can run restic to backup the whole
system. system.
+8 -355
View File
@@ -36,103 +36,9 @@ __restic_contains_word()
return 1 return 1
} }
__restic_handle_go_custom_completion()
{
__restic_debug "${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}"
local shellCompDirectiveError=1
local shellCompDirectiveNoSpace=2
local shellCompDirectiveNoFileComp=4
local shellCompDirectiveFilterFileExt=8
local shellCompDirectiveFilterDirs=16
local out requestComp lastParam lastChar comp directive args
# Prepare the command to request completions for the program.
# Calling ${words[0]} instead of directly restic allows to handle aliases
args=("${words[@]:1}")
requestComp="${words[0]} __completeNoDesc ${args[*]}"
lastParam=${words[$((${#words[@]}-1))]}
lastChar=${lastParam:$((${#lastParam}-1)):1}
__restic_debug "${FUNCNAME[0]}: lastParam ${lastParam}, lastChar ${lastChar}"
if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then
# If the last parameter is complete (there is a space following it)
# We add an extra empty parameter so we can indicate this to the go method.
__restic_debug "${FUNCNAME[0]}: Adding extra empty parameter"
requestComp="${requestComp} \"\""
fi
__restic_debug "${FUNCNAME[0]}: calling ${requestComp}"
# Use eval to handle any environment variables and such
out=$(eval "${requestComp}" 2>/dev/null)
# Extract the directive integer at the very end of the output following a colon (:)
directive=${out##*:}
# Remove the directive
out=${out%:*}
if [ "${directive}" = "${out}" ]; then
# There is not directive specified
directive=0
fi
__restic_debug "${FUNCNAME[0]}: the completion directive is: ${directive}"
__restic_debug "${FUNCNAME[0]}: the completions are: ${out[*]}"
if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
# Error code. No completion.
__restic_debug "${FUNCNAME[0]}: received error from custom completion go code"
return
else
if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
if [[ $(type -t compopt) = "builtin" ]]; then
__restic_debug "${FUNCNAME[0]}: activating no space"
compopt -o nospace
fi
fi
if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
if [[ $(type -t compopt) = "builtin" ]]; then
__restic_debug "${FUNCNAME[0]}: activating no file completion"
compopt +o default
fi
fi
fi
if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
# File extension filtering
local fullFilter filter filteringCmd
# Do not use quotes around the $out variable or else newline
# characters will be kept.
for filter in ${out[*]}; do
fullFilter+="$filter|"
done
filteringCmd="_filedir $fullFilter"
__restic_debug "File filtering command: $filteringCmd"
$filteringCmd
elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
# File completion for directories only
local subDir
# Use printf to strip any trailing newline
subdir=$(printf "%s" "${out[0]}")
if [ -n "$subdir" ]; then
__restic_debug "Listing directories in $subdir"
__restic_handle_subdirs_in_dir_flag "$subdir"
else
__restic_debug "Listing directories in ."
_filedir -d
fi
else
while IFS='' read -r comp; do
COMPREPLY+=("$comp")
done < <(compgen -W "${out[*]}" -- "$cur")
fi
}
__restic_handle_reply() __restic_handle_reply()
{ {
__restic_debug "${FUNCNAME[0]}" __restic_debug "${FUNCNAME[0]}"
local comp
case $cur in case $cur in
-*) -*)
if [[ $(type -t compopt) = "builtin" ]]; then if [[ $(type -t compopt) = "builtin" ]]; then
@@ -144,9 +50,7 @@ __restic_handle_reply()
else else
allflags=("${flags[*]} ${two_word_flags[*]}") allflags=("${flags[*]} ${two_word_flags[*]}")
fi fi
while IFS='' read -r comp; do COMPREPLY=( $(compgen -W "${allflags[*]}" -- "$cur") )
COMPREPLY+=("$comp")
done < <(compgen -W "${allflags[*]}" -- "$cur")
if [[ $(type -t compopt) = "builtin" ]]; then if [[ $(type -t compopt) = "builtin" ]]; then
[[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
fi fi
@@ -191,22 +95,15 @@ __restic_handle_reply()
local completions local completions
completions=("${commands[@]}") completions=("${commands[@]}")
if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
completions+=("${must_have_one_noun[@]}") completions=("${must_have_one_noun[@]}")
elif [[ -n "${has_completion_function}" ]]; then
# if a go completion function is provided, defer to that function
__restic_handle_go_custom_completion
fi fi
if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
completions+=("${must_have_one_flag[@]}") completions+=("${must_have_one_flag[@]}")
fi fi
while IFS='' read -r comp; do COMPREPLY=( $(compgen -W "${completions[*]}" -- "$cur") )
COMPREPLY+=("$comp")
done < <(compgen -W "${completions[*]}" -- "$cur")
if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
while IFS='' read -r comp; do COMPREPLY=( $(compgen -W "${noun_aliases[*]}" -- "$cur") )
COMPREPLY+=("$comp")
done < <(compgen -W "${noun_aliases[*]}" -- "$cur")
fi fi
if [[ ${#COMPREPLY[@]} -eq 0 ]]; then if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
@@ -241,7 +138,7 @@ __restic_handle_filename_extension_flag()
__restic_handle_subdirs_in_dir_flag() __restic_handle_subdirs_in_dir_flag()
{ {
local dir="$1" local dir="$1"
pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1
} }
__restic_handle_flag() __restic_handle_flag()
@@ -370,56 +267,42 @@ _restic_backup()
flags+=("--exclude=") flags+=("--exclude=")
two_word_flags+=("--exclude") two_word_flags+=("--exclude")
two_word_flags+=("-e") two_word_flags+=("-e")
local_nonpersistent_flags+=("--exclude")
local_nonpersistent_flags+=("--exclude=") local_nonpersistent_flags+=("--exclude=")
local_nonpersistent_flags+=("-e")
flags+=("--exclude-caches") flags+=("--exclude-caches")
local_nonpersistent_flags+=("--exclude-caches") local_nonpersistent_flags+=("--exclude-caches")
flags+=("--exclude-file=") flags+=("--exclude-file=")
two_word_flags+=("--exclude-file") two_word_flags+=("--exclude-file")
local_nonpersistent_flags+=("--exclude-file")
local_nonpersistent_flags+=("--exclude-file=") local_nonpersistent_flags+=("--exclude-file=")
flags+=("--exclude-if-present=") flags+=("--exclude-if-present=")
two_word_flags+=("--exclude-if-present") two_word_flags+=("--exclude-if-present")
local_nonpersistent_flags+=("--exclude-if-present")
local_nonpersistent_flags+=("--exclude-if-present=") local_nonpersistent_flags+=("--exclude-if-present=")
flags+=("--exclude-larger-than=") flags+=("--exclude-larger-than=")
two_word_flags+=("--exclude-larger-than") two_word_flags+=("--exclude-larger-than")
local_nonpersistent_flags+=("--exclude-larger-than")
local_nonpersistent_flags+=("--exclude-larger-than=") local_nonpersistent_flags+=("--exclude-larger-than=")
flags+=("--files-from=") flags+=("--files-from=")
two_word_flags+=("--files-from") two_word_flags+=("--files-from")
local_nonpersistent_flags+=("--files-from")
local_nonpersistent_flags+=("--files-from=") local_nonpersistent_flags+=("--files-from=")
flags+=("--files-from-raw=") flags+=("--files-from-raw=")
two_word_flags+=("--files-from-raw") two_word_flags+=("--files-from-raw")
local_nonpersistent_flags+=("--files-from-raw")
local_nonpersistent_flags+=("--files-from-raw=") local_nonpersistent_flags+=("--files-from-raw=")
flags+=("--files-from-verbatim=") flags+=("--files-from-verbatim=")
two_word_flags+=("--files-from-verbatim") two_word_flags+=("--files-from-verbatim")
local_nonpersistent_flags+=("--files-from-verbatim")
local_nonpersistent_flags+=("--files-from-verbatim=") local_nonpersistent_flags+=("--files-from-verbatim=")
flags+=("--force") flags+=("--force")
flags+=("-f") flags+=("-f")
local_nonpersistent_flags+=("--force") local_nonpersistent_flags+=("--force")
local_nonpersistent_flags+=("-f")
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--host=") flags+=("--host=")
two_word_flags+=("--host") two_word_flags+=("--host")
two_word_flags+=("-H") two_word_flags+=("-H")
local_nonpersistent_flags+=("--host")
local_nonpersistent_flags+=("--host=") local_nonpersistent_flags+=("--host=")
local_nonpersistent_flags+=("-H")
flags+=("--iexclude=") flags+=("--iexclude=")
two_word_flags+=("--iexclude") two_word_flags+=("--iexclude")
local_nonpersistent_flags+=("--iexclude")
local_nonpersistent_flags+=("--iexclude=") local_nonpersistent_flags+=("--iexclude=")
flags+=("--iexclude-file=") flags+=("--iexclude-file=")
two_word_flags+=("--iexclude-file") two_word_flags+=("--iexclude-file")
local_nonpersistent_flags+=("--iexclude-file")
local_nonpersistent_flags+=("--iexclude-file=") local_nonpersistent_flags+=("--iexclude-file=")
flags+=("--ignore-ctime") flags+=("--ignore-ctime")
local_nonpersistent_flags+=("--ignore-ctime") local_nonpersistent_flags+=("--ignore-ctime")
@@ -428,24 +311,19 @@ _restic_backup()
flags+=("--one-file-system") flags+=("--one-file-system")
flags+=("-x") flags+=("-x")
local_nonpersistent_flags+=("--one-file-system") local_nonpersistent_flags+=("--one-file-system")
local_nonpersistent_flags+=("-x")
flags+=("--parent=") flags+=("--parent=")
two_word_flags+=("--parent") two_word_flags+=("--parent")
local_nonpersistent_flags+=("--parent")
local_nonpersistent_flags+=("--parent=") local_nonpersistent_flags+=("--parent=")
flags+=("--stdin") flags+=("--stdin")
local_nonpersistent_flags+=("--stdin") local_nonpersistent_flags+=("--stdin")
flags+=("--stdin-filename=") flags+=("--stdin-filename=")
two_word_flags+=("--stdin-filename") two_word_flags+=("--stdin-filename")
local_nonpersistent_flags+=("--stdin-filename")
local_nonpersistent_flags+=("--stdin-filename=") local_nonpersistent_flags+=("--stdin-filename=")
flags+=("--tag=") flags+=("--tag=")
two_word_flags+=("--tag") two_word_flags+=("--tag")
local_nonpersistent_flags+=("--tag")
local_nonpersistent_flags+=("--tag=") local_nonpersistent_flags+=("--tag=")
flags+=("--time=") flags+=("--time=")
two_word_flags+=("--time") two_word_flags+=("--time")
local_nonpersistent_flags+=("--time")
local_nonpersistent_flags+=("--time=") local_nonpersistent_flags+=("--time=")
flags+=("--with-atime") flags+=("--with-atime")
local_nonpersistent_flags+=("--with-atime") local_nonpersistent_flags+=("--with-atime")
@@ -507,10 +385,8 @@ _restic_cache()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--max-age=") flags+=("--max-age=")
two_word_flags+=("--max-age") two_word_flags+=("--max-age")
local_nonpersistent_flags+=("--max-age")
local_nonpersistent_flags+=("--max-age=") local_nonpersistent_flags+=("--max-age=")
flags+=("--no-size") flags+=("--no-size")
local_nonpersistent_flags+=("--no-size") local_nonpersistent_flags+=("--no-size")
@@ -570,7 +446,6 @@ _restic_cat()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
flags+=("--cache-dir=") flags+=("--cache-dir=")
@@ -629,12 +504,10 @@ _restic_check()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--read-data") flags+=("--read-data")
local_nonpersistent_flags+=("--read-data") local_nonpersistent_flags+=("--read-data")
flags+=("--read-data-subset=") flags+=("--read-data-subset=")
two_word_flags+=("--read-data-subset") two_word_flags+=("--read-data-subset")
local_nonpersistent_flags+=("--read-data-subset")
local_nonpersistent_flags+=("--read-data-subset=") local_nonpersistent_flags+=("--read-data-subset=")
flags+=("--with-cache") flags+=("--with-cache")
local_nonpersistent_flags+=("--with-cache") local_nonpersistent_flags+=("--with-cache")
@@ -694,40 +567,27 @@ _restic_copy()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--host=") flags+=("--host=")
two_word_flags+=("--host") two_word_flags+=("--host")
two_word_flags+=("-H") two_word_flags+=("-H")
local_nonpersistent_flags+=("--host")
local_nonpersistent_flags+=("--host=") local_nonpersistent_flags+=("--host=")
local_nonpersistent_flags+=("-H")
flags+=("--key-hint2=") flags+=("--key-hint2=")
two_word_flags+=("--key-hint2") two_word_flags+=("--key-hint2")
local_nonpersistent_flags+=("--key-hint2")
local_nonpersistent_flags+=("--key-hint2=") local_nonpersistent_flags+=("--key-hint2=")
flags+=("--password-command2=") flags+=("--password-command2=")
two_word_flags+=("--password-command2") two_word_flags+=("--password-command2")
local_nonpersistent_flags+=("--password-command2")
local_nonpersistent_flags+=("--password-command2=") local_nonpersistent_flags+=("--password-command2=")
flags+=("--password-file2=") flags+=("--password-file2=")
two_word_flags+=("--password-file2") two_word_flags+=("--password-file2")
local_nonpersistent_flags+=("--password-file2")
local_nonpersistent_flags+=("--password-file2=") local_nonpersistent_flags+=("--password-file2=")
flags+=("--path=") flags+=("--path=")
two_word_flags+=("--path") two_word_flags+=("--path")
local_nonpersistent_flags+=("--path")
local_nonpersistent_flags+=("--path=") local_nonpersistent_flags+=("--path=")
flags+=("--repo2=") flags+=("--repo2=")
two_word_flags+=("--repo2") two_word_flags+=("--repo2")
local_nonpersistent_flags+=("--repo2")
local_nonpersistent_flags+=("--repo2=") local_nonpersistent_flags+=("--repo2=")
flags+=("--repository-file2=")
two_word_flags+=("--repository-file2")
local_nonpersistent_flags+=("--repository-file2")
local_nonpersistent_flags+=("--repository-file2=")
flags+=("--tag=") flags+=("--tag=")
two_word_flags+=("--tag") two_word_flags+=("--tag")
local_nonpersistent_flags+=("--tag")
local_nonpersistent_flags+=("--tag=") local_nonpersistent_flags+=("--tag=")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
@@ -785,7 +645,6 @@ _restic_diff()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--metadata") flags+=("--metadata")
local_nonpersistent_flags+=("--metadata") local_nonpersistent_flags+=("--metadata")
flags+=("--cacert=") flags+=("--cacert=")
@@ -844,26 +703,19 @@ _restic_dump()
flags+=("--archive=") flags+=("--archive=")
two_word_flags+=("--archive") two_word_flags+=("--archive")
two_word_flags+=("-a") two_word_flags+=("-a")
local_nonpersistent_flags+=("--archive")
local_nonpersistent_flags+=("--archive=") local_nonpersistent_flags+=("--archive=")
local_nonpersistent_flags+=("-a")
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--host=") flags+=("--host=")
two_word_flags+=("--host") two_word_flags+=("--host")
two_word_flags+=("-H") two_word_flags+=("-H")
local_nonpersistent_flags+=("--host")
local_nonpersistent_flags+=("--host=") local_nonpersistent_flags+=("--host=")
local_nonpersistent_flags+=("-H")
flags+=("--path=") flags+=("--path=")
two_word_flags+=("--path") two_word_flags+=("--path")
local_nonpersistent_flags+=("--path")
local_nonpersistent_flags+=("--path=") local_nonpersistent_flags+=("--path=")
flags+=("--tag=") flags+=("--tag=")
two_word_flags+=("--tag") two_word_flags+=("--tag")
local_nonpersistent_flags+=("--tag")
local_nonpersistent_flags+=("--tag=") local_nonpersistent_flags+=("--tag=")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
@@ -923,50 +775,37 @@ _restic_find()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--host=") flags+=("--host=")
two_word_flags+=("--host") two_word_flags+=("--host")
two_word_flags+=("-H") two_word_flags+=("-H")
local_nonpersistent_flags+=("--host")
local_nonpersistent_flags+=("--host=") local_nonpersistent_flags+=("--host=")
local_nonpersistent_flags+=("-H")
flags+=("--ignore-case") flags+=("--ignore-case")
flags+=("-i") flags+=("-i")
local_nonpersistent_flags+=("--ignore-case") local_nonpersistent_flags+=("--ignore-case")
local_nonpersistent_flags+=("-i")
flags+=("--long") flags+=("--long")
flags+=("-l") flags+=("-l")
local_nonpersistent_flags+=("--long") local_nonpersistent_flags+=("--long")
local_nonpersistent_flags+=("-l")
flags+=("--newest=") flags+=("--newest=")
two_word_flags+=("--newest") two_word_flags+=("--newest")
two_word_flags+=("-N") two_word_flags+=("-N")
local_nonpersistent_flags+=("--newest")
local_nonpersistent_flags+=("--newest=") local_nonpersistent_flags+=("--newest=")
local_nonpersistent_flags+=("-N")
flags+=("--oldest=") flags+=("--oldest=")
two_word_flags+=("--oldest") two_word_flags+=("--oldest")
two_word_flags+=("-O") two_word_flags+=("-O")
local_nonpersistent_flags+=("--oldest")
local_nonpersistent_flags+=("--oldest=") local_nonpersistent_flags+=("--oldest=")
local_nonpersistent_flags+=("-O")
flags+=("--pack") flags+=("--pack")
local_nonpersistent_flags+=("--pack") local_nonpersistent_flags+=("--pack")
flags+=("--path=") flags+=("--path=")
two_word_flags+=("--path") two_word_flags+=("--path")
local_nonpersistent_flags+=("--path")
local_nonpersistent_flags+=("--path=") local_nonpersistent_flags+=("--path=")
flags+=("--show-pack-id") flags+=("--show-pack-id")
local_nonpersistent_flags+=("--show-pack-id") local_nonpersistent_flags+=("--show-pack-id")
flags+=("--snapshot=") flags+=("--snapshot=")
two_word_flags+=("--snapshot") two_word_flags+=("--snapshot")
two_word_flags+=("-s") two_word_flags+=("-s")
local_nonpersistent_flags+=("--snapshot")
local_nonpersistent_flags+=("--snapshot=") local_nonpersistent_flags+=("--snapshot=")
local_nonpersistent_flags+=("-s")
flags+=("--tag=") flags+=("--tag=")
two_word_flags+=("--tag") two_word_flags+=("--tag")
local_nonpersistent_flags+=("--tag")
local_nonpersistent_flags+=("--tag=") local_nonpersistent_flags+=("--tag=")
flags+=("--tree") flags+=("--tree")
local_nonpersistent_flags+=("--tree") local_nonpersistent_flags+=("--tree")
@@ -1026,109 +865,65 @@ _restic_forget()
flags+=("--keep-last=") flags+=("--keep-last=")
two_word_flags+=("--keep-last") two_word_flags+=("--keep-last")
two_word_flags+=("-l") two_word_flags+=("-l")
local_nonpersistent_flags+=("--keep-last")
local_nonpersistent_flags+=("--keep-last=") local_nonpersistent_flags+=("--keep-last=")
local_nonpersistent_flags+=("-l")
flags+=("--keep-hourly=") flags+=("--keep-hourly=")
two_word_flags+=("--keep-hourly") two_word_flags+=("--keep-hourly")
two_word_flags+=("-H") two_word_flags+=("-H")
local_nonpersistent_flags+=("--keep-hourly")
local_nonpersistent_flags+=("--keep-hourly=") local_nonpersistent_flags+=("--keep-hourly=")
local_nonpersistent_flags+=("-H")
flags+=("--keep-daily=") flags+=("--keep-daily=")
two_word_flags+=("--keep-daily") two_word_flags+=("--keep-daily")
two_word_flags+=("-d") two_word_flags+=("-d")
local_nonpersistent_flags+=("--keep-daily")
local_nonpersistent_flags+=("--keep-daily=") local_nonpersistent_flags+=("--keep-daily=")
local_nonpersistent_flags+=("-d")
flags+=("--keep-weekly=") flags+=("--keep-weekly=")
two_word_flags+=("--keep-weekly") two_word_flags+=("--keep-weekly")
two_word_flags+=("-w") two_word_flags+=("-w")
local_nonpersistent_flags+=("--keep-weekly")
local_nonpersistent_flags+=("--keep-weekly=") local_nonpersistent_flags+=("--keep-weekly=")
local_nonpersistent_flags+=("-w")
flags+=("--keep-monthly=") flags+=("--keep-monthly=")
two_word_flags+=("--keep-monthly") two_word_flags+=("--keep-monthly")
two_word_flags+=("-m") two_word_flags+=("-m")
local_nonpersistent_flags+=("--keep-monthly")
local_nonpersistent_flags+=("--keep-monthly=") local_nonpersistent_flags+=("--keep-monthly=")
local_nonpersistent_flags+=("-m")
flags+=("--keep-yearly=") flags+=("--keep-yearly=")
two_word_flags+=("--keep-yearly") two_word_flags+=("--keep-yearly")
two_word_flags+=("-y") two_word_flags+=("-y")
local_nonpersistent_flags+=("--keep-yearly")
local_nonpersistent_flags+=("--keep-yearly=") local_nonpersistent_flags+=("--keep-yearly=")
local_nonpersistent_flags+=("-y")
flags+=("--keep-within=") flags+=("--keep-within=")
two_word_flags+=("--keep-within") two_word_flags+=("--keep-within")
local_nonpersistent_flags+=("--keep-within")
local_nonpersistent_flags+=("--keep-within=") local_nonpersistent_flags+=("--keep-within=")
flags+=("--keep-within-hourly=")
two_word_flags+=("--keep-within-hourly")
local_nonpersistent_flags+=("--keep-within-hourly")
local_nonpersistent_flags+=("--keep-within-hourly=")
flags+=("--keep-within-daily=")
two_word_flags+=("--keep-within-daily")
local_nonpersistent_flags+=("--keep-within-daily")
local_nonpersistent_flags+=("--keep-within-daily=")
flags+=("--keep-within-weekly=")
two_word_flags+=("--keep-within-weekly")
local_nonpersistent_flags+=("--keep-within-weekly")
local_nonpersistent_flags+=("--keep-within-weekly=")
flags+=("--keep-within-monthly=")
two_word_flags+=("--keep-within-monthly")
local_nonpersistent_flags+=("--keep-within-monthly")
local_nonpersistent_flags+=("--keep-within-monthly=")
flags+=("--keep-within-yearly=")
two_word_flags+=("--keep-within-yearly")
local_nonpersistent_flags+=("--keep-within-yearly")
local_nonpersistent_flags+=("--keep-within-yearly=")
flags+=("--keep-tag=") flags+=("--keep-tag=")
two_word_flags+=("--keep-tag") two_word_flags+=("--keep-tag")
local_nonpersistent_flags+=("--keep-tag")
local_nonpersistent_flags+=("--keep-tag=") local_nonpersistent_flags+=("--keep-tag=")
flags+=("--host=") flags+=("--host=")
two_word_flags+=("--host") two_word_flags+=("--host")
local_nonpersistent_flags+=("--host")
local_nonpersistent_flags+=("--host=") local_nonpersistent_flags+=("--host=")
flags+=("--tag=") flags+=("--tag=")
two_word_flags+=("--tag") two_word_flags+=("--tag")
local_nonpersistent_flags+=("--tag")
local_nonpersistent_flags+=("--tag=") local_nonpersistent_flags+=("--tag=")
flags+=("--path=") flags+=("--path=")
two_word_flags+=("--path") two_word_flags+=("--path")
local_nonpersistent_flags+=("--path")
local_nonpersistent_flags+=("--path=") local_nonpersistent_flags+=("--path=")
flags+=("--compact") flags+=("--compact")
flags+=("-c") flags+=("-c")
local_nonpersistent_flags+=("--compact") local_nonpersistent_flags+=("--compact")
local_nonpersistent_flags+=("-c")
flags+=("--group-by=") flags+=("--group-by=")
two_word_flags+=("--group-by") two_word_flags+=("--group-by")
two_word_flags+=("-g") two_word_flags+=("-g")
local_nonpersistent_flags+=("--group-by")
local_nonpersistent_flags+=("--group-by=") local_nonpersistent_flags+=("--group-by=")
local_nonpersistent_flags+=("-g")
flags+=("--dry-run") flags+=("--dry-run")
flags+=("-n") flags+=("-n")
local_nonpersistent_flags+=("--dry-run") local_nonpersistent_flags+=("--dry-run")
local_nonpersistent_flags+=("-n")
flags+=("--prune") flags+=("--prune")
local_nonpersistent_flags+=("--prune") local_nonpersistent_flags+=("--prune")
flags+=("--max-unused=") flags+=("--max-unused=")
two_word_flags+=("--max-unused") two_word_flags+=("--max-unused")
local_nonpersistent_flags+=("--max-unused")
local_nonpersistent_flags+=("--max-unused=") local_nonpersistent_flags+=("--max-unused=")
flags+=("--max-repack-size=") flags+=("--max-repack-size=")
two_word_flags+=("--max-repack-size") two_word_flags+=("--max-repack-size")
local_nonpersistent_flags+=("--max-repack-size")
local_nonpersistent_flags+=("--max-repack-size=") local_nonpersistent_flags+=("--max-repack-size=")
flags+=("--repack-cacheable-only") flags+=("--repack-cacheable-only")
local_nonpersistent_flags+=("--repack-cacheable-only") local_nonpersistent_flags+=("--repack-cacheable-only")
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
flags+=("--cache-dir=") flags+=("--cache-dir=")
@@ -1184,23 +979,15 @@ _restic_generate()
flags+=("--bash-completion=") flags+=("--bash-completion=")
two_word_flags+=("--bash-completion") two_word_flags+=("--bash-completion")
local_nonpersistent_flags+=("--bash-completion")
local_nonpersistent_flags+=("--bash-completion=") local_nonpersistent_flags+=("--bash-completion=")
flags+=("--fish-completion=")
two_word_flags+=("--fish-completion")
local_nonpersistent_flags+=("--fish-completion")
local_nonpersistent_flags+=("--fish-completion=")
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--man=") flags+=("--man=")
two_word_flags+=("--man") two_word_flags+=("--man")
local_nonpersistent_flags+=("--man")
local_nonpersistent_flags+=("--man=") local_nonpersistent_flags+=("--man=")
flags+=("--zsh-completion=") flags+=("--zsh-completion=")
two_word_flags+=("--zsh-completion") two_word_flags+=("--zsh-completion")
local_nonpersistent_flags+=("--zsh-completion")
local_nonpersistent_flags+=("--zsh-completion=") local_nonpersistent_flags+=("--zsh-completion=")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
@@ -1241,60 +1028,6 @@ _restic_generate()
noun_aliases=() noun_aliases=()
} }
_restic_help()
{
last_command="restic_help"
command_aliases=()
commands=()
flags=()
two_word_flags=()
local_nonpersistent_flags=()
flags_with_completion=()
flags_completion=()
flags+=("--cacert=")
two_word_flags+=("--cacert")
flags+=("--cache-dir=")
two_word_flags+=("--cache-dir")
flags+=("--cleanup-cache")
flags+=("--json")
flags+=("--key-hint=")
two_word_flags+=("--key-hint")
flags+=("--limit-download=")
two_word_flags+=("--limit-download")
flags+=("--limit-upload=")
two_word_flags+=("--limit-upload")
flags+=("--no-cache")
flags+=("--no-lock")
flags+=("--option=")
two_word_flags+=("--option")
two_word_flags+=("-o")
flags+=("--password-command=")
two_word_flags+=("--password-command")
flags+=("--password-file=")
two_word_flags+=("--password-file")
two_word_flags+=("-p")
flags+=("--quiet")
flags+=("-q")
flags+=("--repo=")
two_word_flags+=("--repo")
two_word_flags+=("-r")
flags+=("--repository-file=")
two_word_flags+=("--repository-file")
flags+=("--tls-client-cert=")
two_word_flags+=("--tls-client-cert")
flags+=("--verbose")
flags+=("-v")
must_have_one_flag=()
must_have_one_noun=()
has_completion_function=1
noun_aliases=()
}
_restic_init() _restic_init()
{ {
last_command="restic_init" last_command="restic_init"
@@ -1314,27 +1047,18 @@ _restic_init()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--key-hint2=") flags+=("--key-hint2=")
two_word_flags+=("--key-hint2") two_word_flags+=("--key-hint2")
local_nonpersistent_flags+=("--key-hint2")
local_nonpersistent_flags+=("--key-hint2=") local_nonpersistent_flags+=("--key-hint2=")
flags+=("--password-command2=") flags+=("--password-command2=")
two_word_flags+=("--password-command2") two_word_flags+=("--password-command2")
local_nonpersistent_flags+=("--password-command2")
local_nonpersistent_flags+=("--password-command2=") local_nonpersistent_flags+=("--password-command2=")
flags+=("--password-file2=") flags+=("--password-file2=")
two_word_flags+=("--password-file2") two_word_flags+=("--password-file2")
local_nonpersistent_flags+=("--password-file2")
local_nonpersistent_flags+=("--password-file2=") local_nonpersistent_flags+=("--password-file2=")
flags+=("--repo2=") flags+=("--repo2=")
two_word_flags+=("--repo2") two_word_flags+=("--repo2")
local_nonpersistent_flags+=("--repo2")
local_nonpersistent_flags+=("--repo2=") local_nonpersistent_flags+=("--repo2=")
flags+=("--repository-file2=")
two_word_flags+=("--repository-file2")
local_nonpersistent_flags+=("--repository-file2")
local_nonpersistent_flags+=("--repository-file2=")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
flags+=("--cache-dir=") flags+=("--cache-dir=")
@@ -1391,18 +1115,14 @@ _restic_key()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--host=") flags+=("--host=")
two_word_flags+=("--host") two_word_flags+=("--host")
local_nonpersistent_flags+=("--host")
local_nonpersistent_flags+=("--host=") local_nonpersistent_flags+=("--host=")
flags+=("--new-password-file=") flags+=("--new-password-file=")
two_word_flags+=("--new-password-file") two_word_flags+=("--new-password-file")
local_nonpersistent_flags+=("--new-password-file")
local_nonpersistent_flags+=("--new-password-file=") local_nonpersistent_flags+=("--new-password-file=")
flags+=("--user=") flags+=("--user=")
two_word_flags+=("--user") two_word_flags+=("--user")
local_nonpersistent_flags+=("--user")
local_nonpersistent_flags+=("--user=") local_nonpersistent_flags+=("--user=")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
@@ -1460,7 +1180,6 @@ _restic_list()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
flags+=("--cache-dir=") flags+=("--cache-dir=")
@@ -1517,26 +1236,20 @@ _restic_ls()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--host=") flags+=("--host=")
two_word_flags+=("--host") two_word_flags+=("--host")
two_word_flags+=("-H") two_word_flags+=("-H")
local_nonpersistent_flags+=("--host")
local_nonpersistent_flags+=("--host=") local_nonpersistent_flags+=("--host=")
local_nonpersistent_flags+=("-H")
flags+=("--long") flags+=("--long")
flags+=("-l") flags+=("-l")
local_nonpersistent_flags+=("--long") local_nonpersistent_flags+=("--long")
local_nonpersistent_flags+=("-l")
flags+=("--path=") flags+=("--path=")
two_word_flags+=("--path") two_word_flags+=("--path")
local_nonpersistent_flags+=("--path")
local_nonpersistent_flags+=("--path=") local_nonpersistent_flags+=("--path=")
flags+=("--recursive") flags+=("--recursive")
local_nonpersistent_flags+=("--recursive") local_nonpersistent_flags+=("--recursive")
flags+=("--tag=") flags+=("--tag=")
two_word_flags+=("--tag") two_word_flags+=("--tag")
local_nonpersistent_flags+=("--tag")
local_nonpersistent_flags+=("--tag=") local_nonpersistent_flags+=("--tag=")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
@@ -1594,11 +1307,9 @@ _restic_migrate()
flags+=("--force") flags+=("--force")
flags+=("-f") flags+=("-f")
local_nonpersistent_flags+=("--force") local_nonpersistent_flags+=("--force")
local_nonpersistent_flags+=("-f")
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
flags+=("--cache-dir=") flags+=("--cache-dir=")
@@ -1657,28 +1368,22 @@ _restic_mount()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--host=") flags+=("--host=")
two_word_flags+=("--host") two_word_flags+=("--host")
two_word_flags+=("-H") two_word_flags+=("-H")
local_nonpersistent_flags+=("--host")
local_nonpersistent_flags+=("--host=") local_nonpersistent_flags+=("--host=")
local_nonpersistent_flags+=("-H")
flags+=("--no-default-permissions") flags+=("--no-default-permissions")
local_nonpersistent_flags+=("--no-default-permissions") local_nonpersistent_flags+=("--no-default-permissions")
flags+=("--owner-root") flags+=("--owner-root")
local_nonpersistent_flags+=("--owner-root") local_nonpersistent_flags+=("--owner-root")
flags+=("--path=") flags+=("--path=")
two_word_flags+=("--path") two_word_flags+=("--path")
local_nonpersistent_flags+=("--path")
local_nonpersistent_flags+=("--path=") local_nonpersistent_flags+=("--path=")
flags+=("--snapshot-template=") flags+=("--snapshot-template=")
two_word_flags+=("--snapshot-template") two_word_flags+=("--snapshot-template")
local_nonpersistent_flags+=("--snapshot-template")
local_nonpersistent_flags+=("--snapshot-template=") local_nonpersistent_flags+=("--snapshot-template=")
flags+=("--tag=") flags+=("--tag=")
two_word_flags+=("--tag") two_word_flags+=("--tag")
local_nonpersistent_flags+=("--tag")
local_nonpersistent_flags+=("--tag=") local_nonpersistent_flags+=("--tag=")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
@@ -1736,18 +1441,14 @@ _restic_prune()
flags+=("--dry-run") flags+=("--dry-run")
flags+=("-n") flags+=("-n")
local_nonpersistent_flags+=("--dry-run") local_nonpersistent_flags+=("--dry-run")
local_nonpersistent_flags+=("-n")
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--max-repack-size=") flags+=("--max-repack-size=")
two_word_flags+=("--max-repack-size") two_word_flags+=("--max-repack-size")
local_nonpersistent_flags+=("--max-repack-size")
local_nonpersistent_flags+=("--max-repack-size=") local_nonpersistent_flags+=("--max-repack-size=")
flags+=("--max-unused=") flags+=("--max-unused=")
two_word_flags+=("--max-unused") two_word_flags+=("--max-unused")
local_nonpersistent_flags+=("--max-unused")
local_nonpersistent_flags+=("--max-unused=") local_nonpersistent_flags+=("--max-unused=")
flags+=("--repack-cacheable-only") flags+=("--repack-cacheable-only")
local_nonpersistent_flags+=("--repack-cacheable-only") local_nonpersistent_flags+=("--repack-cacheable-only")
@@ -1807,7 +1508,6 @@ _restic_rebuild-index()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--read-all-packs") flags+=("--read-all-packs")
local_nonpersistent_flags+=("--read-all-packs") local_nonpersistent_flags+=("--read-all-packs")
flags+=("--cacert=") flags+=("--cacert=")
@@ -1866,7 +1566,6 @@ _restic_recover()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
flags+=("--cache-dir=") flags+=("--cache-dir=")
@@ -1923,47 +1622,34 @@ _restic_restore()
flags+=("--exclude=") flags+=("--exclude=")
two_word_flags+=("--exclude") two_word_flags+=("--exclude")
two_word_flags+=("-e") two_word_flags+=("-e")
local_nonpersistent_flags+=("--exclude")
local_nonpersistent_flags+=("--exclude=") local_nonpersistent_flags+=("--exclude=")
local_nonpersistent_flags+=("-e")
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--host=") flags+=("--host=")
two_word_flags+=("--host") two_word_flags+=("--host")
two_word_flags+=("-H") two_word_flags+=("-H")
local_nonpersistent_flags+=("--host")
local_nonpersistent_flags+=("--host=") local_nonpersistent_flags+=("--host=")
local_nonpersistent_flags+=("-H")
flags+=("--iexclude=") flags+=("--iexclude=")
two_word_flags+=("--iexclude") two_word_flags+=("--iexclude")
local_nonpersistent_flags+=("--iexclude")
local_nonpersistent_flags+=("--iexclude=") local_nonpersistent_flags+=("--iexclude=")
flags+=("--iinclude=") flags+=("--iinclude=")
two_word_flags+=("--iinclude") two_word_flags+=("--iinclude")
local_nonpersistent_flags+=("--iinclude")
local_nonpersistent_flags+=("--iinclude=") local_nonpersistent_flags+=("--iinclude=")
flags+=("--include=") flags+=("--include=")
two_word_flags+=("--include") two_word_flags+=("--include")
two_word_flags+=("-i") two_word_flags+=("-i")
local_nonpersistent_flags+=("--include")
local_nonpersistent_flags+=("--include=") local_nonpersistent_flags+=("--include=")
local_nonpersistent_flags+=("-i")
flags+=("--path=") flags+=("--path=")
two_word_flags+=("--path") two_word_flags+=("--path")
local_nonpersistent_flags+=("--path")
local_nonpersistent_flags+=("--path=") local_nonpersistent_flags+=("--path=")
flags+=("--tag=") flags+=("--tag=")
two_word_flags+=("--tag") two_word_flags+=("--tag")
local_nonpersistent_flags+=("--tag")
local_nonpersistent_flags+=("--tag=") local_nonpersistent_flags+=("--tag=")
flags+=("--target=") flags+=("--target=")
two_word_flags+=("--target") two_word_flags+=("--target")
two_word_flags+=("-t") two_word_flags+=("-t")
local_nonpersistent_flags+=("--target")
local_nonpersistent_flags+=("--target=") local_nonpersistent_flags+=("--target=")
local_nonpersistent_flags+=("-t")
flags+=("--verify") flags+=("--verify")
local_nonpersistent_flags+=("--verify") local_nonpersistent_flags+=("--verify")
flags+=("--cacert=") flags+=("--cacert=")
@@ -2022,10 +1708,8 @@ _restic_self-update()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--output=") flags+=("--output=")
two_word_flags+=("--output") two_word_flags+=("--output")
local_nonpersistent_flags+=("--output")
local_nonpersistent_flags+=("--output=") local_nonpersistent_flags+=("--output=")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
@@ -2083,34 +1767,24 @@ _restic_snapshots()
flags+=("--compact") flags+=("--compact")
flags+=("-c") flags+=("-c")
local_nonpersistent_flags+=("--compact") local_nonpersistent_flags+=("--compact")
local_nonpersistent_flags+=("-c")
flags+=("--group-by=") flags+=("--group-by=")
two_word_flags+=("--group-by") two_word_flags+=("--group-by")
two_word_flags+=("-g") two_word_flags+=("-g")
local_nonpersistent_flags+=("--group-by")
local_nonpersistent_flags+=("--group-by=") local_nonpersistent_flags+=("--group-by=")
local_nonpersistent_flags+=("-g")
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--host=") flags+=("--host=")
two_word_flags+=("--host") two_word_flags+=("--host")
two_word_flags+=("-H") two_word_flags+=("-H")
local_nonpersistent_flags+=("--host")
local_nonpersistent_flags+=("--host=") local_nonpersistent_flags+=("--host=")
local_nonpersistent_flags+=("-H") flags+=("--last")
flags+=("--latest=") local_nonpersistent_flags+=("--last")
two_word_flags+=("--latest")
local_nonpersistent_flags+=("--latest")
local_nonpersistent_flags+=("--latest=")
flags+=("--path=") flags+=("--path=")
two_word_flags+=("--path") two_word_flags+=("--path")
local_nonpersistent_flags+=("--path")
local_nonpersistent_flags+=("--path=") local_nonpersistent_flags+=("--path=")
flags+=("--tag=") flags+=("--tag=")
two_word_flags+=("--tag") two_word_flags+=("--tag")
local_nonpersistent_flags+=("--tag")
local_nonpersistent_flags+=("--tag=") local_nonpersistent_flags+=("--tag=")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
@@ -2168,24 +1842,18 @@ _restic_stats()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--host=") flags+=("--host=")
two_word_flags+=("--host") two_word_flags+=("--host")
two_word_flags+=("-H") two_word_flags+=("-H")
local_nonpersistent_flags+=("--host")
local_nonpersistent_flags+=("--host=") local_nonpersistent_flags+=("--host=")
local_nonpersistent_flags+=("-H")
flags+=("--mode=") flags+=("--mode=")
two_word_flags+=("--mode") two_word_flags+=("--mode")
local_nonpersistent_flags+=("--mode")
local_nonpersistent_flags+=("--mode=") local_nonpersistent_flags+=("--mode=")
flags+=("--path=") flags+=("--path=")
two_word_flags+=("--path") two_word_flags+=("--path")
local_nonpersistent_flags+=("--path")
local_nonpersistent_flags+=("--path=") local_nonpersistent_flags+=("--path=")
flags+=("--tag=") flags+=("--tag=")
two_word_flags+=("--tag") two_word_flags+=("--tag")
local_nonpersistent_flags+=("--tag")
local_nonpersistent_flags+=("--tag=") local_nonpersistent_flags+=("--tag=")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
@@ -2242,33 +1910,25 @@ _restic_tag()
flags+=("--add=") flags+=("--add=")
two_word_flags+=("--add") two_word_flags+=("--add")
local_nonpersistent_flags+=("--add")
local_nonpersistent_flags+=("--add=") local_nonpersistent_flags+=("--add=")
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--host=") flags+=("--host=")
two_word_flags+=("--host") two_word_flags+=("--host")
two_word_flags+=("-H") two_word_flags+=("-H")
local_nonpersistent_flags+=("--host")
local_nonpersistent_flags+=("--host=") local_nonpersistent_flags+=("--host=")
local_nonpersistent_flags+=("-H")
flags+=("--path=") flags+=("--path=")
two_word_flags+=("--path") two_word_flags+=("--path")
local_nonpersistent_flags+=("--path")
local_nonpersistent_flags+=("--path=") local_nonpersistent_flags+=("--path=")
flags+=("--remove=") flags+=("--remove=")
two_word_flags+=("--remove") two_word_flags+=("--remove")
local_nonpersistent_flags+=("--remove")
local_nonpersistent_flags+=("--remove=") local_nonpersistent_flags+=("--remove=")
flags+=("--set=") flags+=("--set=")
two_word_flags+=("--set") two_word_flags+=("--set")
local_nonpersistent_flags+=("--set")
local_nonpersistent_flags+=("--set=") local_nonpersistent_flags+=("--set=")
flags+=("--tag=") flags+=("--tag=")
two_word_flags+=("--tag") two_word_flags+=("--tag")
local_nonpersistent_flags+=("--tag")
local_nonpersistent_flags+=("--tag=") local_nonpersistent_flags+=("--tag=")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
@@ -2326,7 +1986,6 @@ _restic_unlock()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--remove-all") flags+=("--remove-all")
local_nonpersistent_flags+=("--remove-all") local_nonpersistent_flags+=("--remove-all")
flags+=("--cacert=") flags+=("--cacert=")
@@ -2385,7 +2044,6 @@ _restic_version()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--cacert=") flags+=("--cacert=")
two_word_flags+=("--cacert") two_word_flags+=("--cacert")
flags+=("--cache-dir=") flags+=("--cache-dir=")
@@ -2442,7 +2100,6 @@ _restic_root_command()
commands+=("find") commands+=("find")
commands+=("forget") commands+=("forget")
commands+=("generate") commands+=("generate")
commands+=("help")
commands+=("init") commands+=("init")
commands+=("key") commands+=("key")
commands+=("list") commands+=("list")
@@ -2474,7 +2131,6 @@ _restic_root_command()
flags+=("--help") flags+=("--help")
flags+=("-h") flags+=("-h")
local_nonpersistent_flags+=("--help") local_nonpersistent_flags+=("--help")
local_nonpersistent_flags+=("-h")
flags+=("--json") flags+=("--json")
flags+=("--key-hint=") flags+=("--key-hint=")
two_word_flags+=("--key-hint") two_word_flags+=("--key-hint")
@@ -2511,7 +2167,7 @@ _restic_root_command()
__start_restic() __start_restic()
{ {
local cur prev words cword split local cur prev words cword
declare -A flaghash 2>/dev/null || : declare -A flaghash 2>/dev/null || :
declare -A aliashash 2>/dev/null || : declare -A aliashash 2>/dev/null || :
if declare -F _init_completion >/dev/null 2>&1; then if declare -F _init_completion >/dev/null 2>&1; then
@@ -2527,13 +2183,10 @@ __start_restic()
local flags_with_completion=() local flags_with_completion=()
local flags_completion=() local flags_completion=()
local commands=("restic") local commands=("restic")
local command_aliases=()
local must_have_one_flag=() local must_have_one_flag=()
local must_have_one_noun=() local must_have_one_noun=()
local has_completion_function
local last_command local last_command
local nouns=() local nouns=()
local noun_aliases=()
__restic_handle_word __restic_handle_word
} }
+1 -1
View File
@@ -550,7 +550,7 @@ Backups and Deduplication
For creating a backup, restic scans the source directory for all files, For creating a backup, restic scans the source directory for all files,
sub-directories and other entries. The data from each file is split into sub-directories and other entries. The data from each file is split into
variable length Blobs cut at offsets defined by a sliding window of 64 variable length Blobs cut at offsets defined by a sliding window of 64
bytes. The implementation uses Rabin Fingerprints for implementing this byte. The implementation uses Rabin Fingerprints for implementing this
Content Defined Chunking (CDC). An irreducible polynomial is selected at Content Defined Chunking (CDC). An irreducible polynomial is selected at
random and saved in the file ``config`` when a repository is random and saved in the file ``config`` when a repository is
initialized, so that watermark attacks are much harder. initialized, so that watermark attacks are much harder.
-176
View File
@@ -1,176 +0,0 @@
# fish completion for restic -*- shell-script -*-
function __restic_debug
set -l file "$BASH_COMP_DEBUG_FILE"
if test -n "$file"
echo "$argv" >> $file
end
end
function __restic_perform_completion
__restic_debug "Starting __restic_perform_completion"
# Extract all args except the last one
set -l args (commandline -opc)
# Extract the last arg and escape it in case it is a space
set -l lastArg (string escape -- (commandline -ct))
__restic_debug "args: $args"
__restic_debug "last arg: $lastArg"
set -l requestComp "$args[1] __complete $args[2..-1] $lastArg"
__restic_debug "Calling $requestComp"
set -l results (eval $requestComp 2> /dev/null)
# Some programs may output extra empty lines after the directive.
# Let's ignore them or else it will break completion.
# Ref: https://github.com/spf13/cobra/issues/1279
for line in $results[-1..1]
if test (string trim -- $line) = ""
# Found an empty line, remove it
set results $results[1..-2]
else
# Found non-empty line, we have our proper output
break
end
end
set -l comps $results[1..-2]
set -l directiveLine $results[-1]
# For Fish, when completing a flag with an = (e.g., <program> -n=<TAB>)
# completions must be prefixed with the flag
set -l flagPrefix (string match -r -- '-.*=' "$lastArg")
__restic_debug "Comps: $comps"
__restic_debug "DirectiveLine: $directiveLine"
__restic_debug "flagPrefix: $flagPrefix"
for comp in $comps
printf "%s%s\n" "$flagPrefix" "$comp"
end
printf "%s\n" "$directiveLine"
end
# This function does two things:
# - Obtain the completions and store them in the global __restic_comp_results
# - Return false if file completion should be performed
function __restic_prepare_completions
__restic_debug ""
__restic_debug "========= starting completion logic =========="
# Start fresh
set --erase __restic_comp_results
set -l results (__restic_perform_completion)
__restic_debug "Completion results: $results"
if test -z "$results"
__restic_debug "No completion, probably due to a failure"
# Might as well do file completion, in case it helps
return 1
end
set -l directive (string sub --start 2 $results[-1])
set --global __restic_comp_results $results[1..-2]
__restic_debug "Completions are: $__restic_comp_results"
__restic_debug "Directive is: $directive"
set -l shellCompDirectiveError 1
set -l shellCompDirectiveNoSpace 2
set -l shellCompDirectiveNoFileComp 4
set -l shellCompDirectiveFilterFileExt 8
set -l shellCompDirectiveFilterDirs 16
if test -z "$directive"
set directive 0
end
set -l compErr (math (math --scale 0 $directive / $shellCompDirectiveError) % 2)
if test $compErr -eq 1
__restic_debug "Received error directive: aborting."
# Might as well do file completion, in case it helps
return 1
end
set -l filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) % 2)
set -l dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) % 2)
if test $filefilter -eq 1; or test $dirfilter -eq 1
__restic_debug "File extension filtering or directory filtering not supported"
# Do full file completion instead
return 1
end
set -l nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) % 2)
set -l nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) % 2)
__restic_debug "nospace: $nospace, nofiles: $nofiles"
# If we want to prevent a space, or if file completion is NOT disabled,
# we need to count the number of valid completions.
# To do so, we will filter on prefix as the completions we have received
# may not already be filtered so as to allow fish to match on different
# criteria than the prefix.
if test $nospace -ne 0; or test $nofiles -eq 0
set -l prefix (commandline -t | string escape --style=regex)
__restic_debug "prefix: $prefix"
set -l completions (string match -r -- "^$prefix.*" $__restic_comp_results)
set --global __restic_comp_results $completions
__restic_debug "Filtered completions are: $__restic_comp_results"
# Important not to quote the variable for count to work
set -l numComps (count $__restic_comp_results)
__restic_debug "numComps: $numComps"
if test $numComps -eq 1; and test $nospace -ne 0
# We must first split on \t to get rid of the descriptions to be
# able to check what the actual completion will be.
# We don't need descriptions anyway since there is only a single
# real completion which the shell will expand immediately.
set -l split (string split --max 1 \t $__restic_comp_results[1])
# Fish won't add a space if the completion ends with any
# of the following characters: @=/:.,
set -l lastChar (string sub -s -1 -- $split)
if not string match -r -q "[@=/:.,]" -- "$lastChar"
# In other cases, to support the "nospace" directive we trick the shell
# by outputting an extra, longer completion.
__restic_debug "Adding second completion to perform nospace directive"
set --global __restic_comp_results $split[1] $split[1].
__restic_debug "Completions are now: $__restic_comp_results"
end
end
if test $numComps -eq 0; and test $nofiles -eq 0
# To be consistent with bash and zsh, we only trigger file
# completion when there are no other completions
__restic_debug "Requesting file completion"
return 1
end
end
return 0
end
# Since Fish completions are only loaded once the user triggers them, we trigger them ourselves
# so we can properly delete any completions provided by another script.
# Only do this if the program can be found, or else fish may print some errors; besides,
# the existing completions will only be loaded if the program can be found.
if type -q "restic"
# The space after the program name is essential to trigger completion for the program
# and not completion of the program name itself.
# Also, we use '> /dev/null 2>&1' since '&>' is not supported in older versions of fish.
complete --do-complete "restic " > /dev/null 2>&1
end
# Remove any pre-existing completions for the program since we will be handling all of them.
complete -c restic -e
# The call to __restic_prepare_completions will setup __restic_comp_results
# which provides the program's completion choices.
complete -c restic -n '__restic_prepare_completions' -f -a '$__restic_comp_results'
+43 -40
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -27,161 +29,162 @@ Exit status is 3 if some source data could not be read (incomplete snapshot crea
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-e\fP, \fB\-\-exclude\fP=[] \fB\-e\fP, \fB\-\-exclude\fP=[]
exclude a \fB\fCpattern\fR (can be specified multiple times) exclude a \fB\fCpattern\fR (can be specified multiple times)
.PP .PP
\fB\-\-exclude\-caches\fP[=false] \fB\-\-exclude\-caches\fP[=false]
excludes cache directories that are marked with a CACHEDIR.TAG file. See https://bford.info/cachedir/ for the Cache Directory Tagging Standard excludes cache directories that are marked with a CACHEDIR.TAG file. See
\[la]https://bford.info/cachedir/\[ra] for the Cache Directory Tagging Standard
.PP .PP
\fB\-\-exclude\-file\fP=[] \fB\-\-exclude\-file\fP=[]
read exclude patterns from a \fB\fCfile\fR (can be specified multiple times) read exclude patterns from a \fB\fCfile\fR (can be specified multiple times)
.PP .PP
\fB\-\-exclude\-if\-present\fP=[] \fB\-\-exclude\-if\-present\fP=[]
takes \fB\fCfilename[:header]\fR, exclude contents of directories containing filename (except filename itself) if header of that file is as provided (can be specified multiple times) takes \fB\fCfilename[:header]\fR, exclude contents of directories containing filename (except filename itself) if header of that file is as provided (can be specified multiple times)
.PP .PP
\fB\-\-exclude\-larger\-than\fP="" \fB\-\-exclude\-larger\-than\fP=""
max \fB\fCsize\fR of the files to be backed up (allowed suffixes: k/K, m/M, g/G, t/T) max \fB\fCsize\fR of the files to be backed up (allowed suffixes: k/K, m/M, g/G, t/T)
.PP .PP
\fB\-\-files\-from\fP=[] \fB\-\-files\-from\fP=[]
read the files to backup from \fB\fCfile\fR (can be combined with file args; can be specified multiple times) read the files to backup from \fB\fCfile\fR (can be combined with file args; can be specified multiple times)
.PP .PP
\fB\-\-files\-from\-raw\fP=[] \fB\-\-files\-from\-raw\fP=[]
read the files to backup from \fB\fCfile\fR (can be combined with file args; can be specified multiple times) read the files to backup from \fB\fCfile\fR (can be combined with file args; can be specified multiple times)
.PP .PP
\fB\-\-files\-from\-verbatim\fP=[] \fB\-\-files\-from\-verbatim\fP=[]
read the files to backup from \fB\fCfile\fR (can be combined with file args; can be specified multiple times) read the files to backup from \fB\fCfile\fR (can be combined with file args; can be specified multiple times)
.PP .PP
\fB\-f\fP, \fB\-\-force\fP[=false] \fB\-f\fP, \fB\-\-force\fP[=false]
force re\-reading the target files/directories (overrides the "parent" flag) force re\-reading the target files/directories (overrides the "parent" flag)
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for backup help for backup
.PP .PP
\fB\-H\fP, \fB\-\-host\fP="" \fB\-H\fP, \fB\-\-host\fP=""
set the \fB\fChostname\fR for the snapshot manually. To prevent an expensive rescan use the "parent" flag set the \fB\fChostname\fR for the snapshot manually. To prevent an expensive rescan use the "parent" flag
.PP .PP
\fB\-\-iexclude\fP=[] \fB\-\-iexclude\fP=[]
same as \-\-exclude \fB\fCpattern\fR but ignores the casing of filenames same as \-\-exclude \fB\fCpattern\fR but ignores the casing of filenames
.PP .PP
\fB\-\-iexclude\-file\fP=[] \fB\-\-iexclude\-file\fP=[]
same as \-\-exclude\-file but ignores casing of \fB\fCfile\fRnames in patterns same as \-\-exclude\-file but ignores casing of \fB\fCfile\fRnames in patterns
.PP .PP
\fB\-\-ignore\-ctime\fP[=false] \fB\-\-ignore\-ctime\fP[=false]
ignore ctime changes when checking for modified files ignore ctime changes when checking for modified files
.PP .PP
\fB\-\-ignore\-inode\fP[=false] \fB\-\-ignore\-inode\fP[=false]
ignore inode number changes when checking for modified files ignore inode number changes when checking for modified files
.PP .PP
\fB\-x\fP, \fB\-\-one\-file\-system\fP[=false] \fB\-x\fP, \fB\-\-one\-file\-system\fP[=false]
exclude other file systems, don't cross filesystem boundaries and subvolumes exclude other file systems
.PP .PP
\fB\-\-parent\fP="" \fB\-\-parent\fP=""
use this parent \fB\fCsnapshot\fR (default: last snapshot in the repo that has the same target files/directories) use this parent \fB\fCsnapshot\fR (default: last snapshot in the repo that has the same target files/directories)
.PP .PP
\fB\-\-stdin\fP[=false] \fB\-\-stdin\fP[=false]
read backup from stdin read backup from stdin
.PP .PP
\fB\-\-stdin\-filename\fP="stdin" \fB\-\-stdin\-filename\fP="stdin"
\fB\fCfilename\fR to use when reading from stdin \fB\fCfilename\fR to use when reading from stdin
.PP .PP
\fB\-\-tag\fP=[] \fB\-\-tag\fP=[]
add \fB\fCtags\fR for the new snapshot in the format \fB\fCtag[,tag,...]\fR (can be specified multiple times) add \fB\fCtags\fR for the new snapshot in the format \fB\fCtag[,tag,...]\fR (can be specified multiple times)
.PP .PP
\fB\-\-time\fP="" \fB\-\-time\fP=""
\fB\fCtime\fR of the backup (ex. '2012\-11\-01 22:08:41') (default: now) \fB\fCtime\fR of the backup (ex. '2012\-11\-01 22:08:41') (default: now)
.PP .PP
\fB\-\-with\-atime\fP[=false] \fB\-\-with\-atime\fP[=false]
store the atime for all files and directories store the atime for all files and directories
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+24 -22
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -24,89 +26,89 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-\-cleanup\fP[=false] \fB\-\-cleanup\fP[=false]
remove old cache directories remove old cache directories
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for cache help for cache
.PP .PP
\fB\-\-max\-age\fP=30 \fB\-\-max\-age\fP=30
max age in \fB\fCdays\fR for cache directories to be considered old max age in \fB\fCdays\fR for cache directories to be considered old
.PP .PP
\fB\-\-no\-size\fP[=false] \fB\-\-no\-size\fP[=false]
do not output the size of the cache directories do not output the size of the cache directories
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+21 -19
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -24,77 +26,77 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for cat help for cat
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+25 -23
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -29,93 +31,93 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-\-check\-unused\fP[=false] \fB\-\-check\-unused\fP[=false]
find unused blobs find unused blobs
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for check help for check
.PP .PP
\fB\-\-read\-data\fP[=false] \fB\-\-read\-data\fP[=false]
read all data blobs read all data blobs
.PP .PP
\fB\-\-read\-data\-subset\fP="" \fB\-\-read\-data\-subset\fP=""
read a \fB\fCsubset\fR of data packs, specified as 'n/t' for specific subset or either 'x%' or 'x.y%' for random subset read a \fB\fCsubset\fR of data packs, specified as 'n/t' for specific subset or either 'x%' or 'x.y%' for random subset
.PP .PP
\fB\-\-with\-cache\fP[=false] \fB\-\-with\-cache\fP[=false]
use the cache use the cache
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+28 -30
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -33,109 +35,105 @@ new destination repository using the "init" command.
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for copy help for copy
.PP .PP
\fB\-H\fP, \fB\-\-host\fP=[] \fB\-H\fP, \fB\-\-host\fP=[]
only consider snapshots for this \fB\fChost\fR, when no snapshot ID is given (can be specified multiple times) only consider snapshots for this \fB\fChost\fR, when no snapshot ID is given (can be specified multiple times)
.PP .PP
\fB\-\-key\-hint2\fP="" \fB\-\-key\-hint2\fP=""
key ID of key to try decrypting the destination repository first (default: $RESTIC\_KEY\_HINT2) key ID of key to try decrypting the destination repository first (default: $RESTIC\_KEY\_HINT2)
.PP .PP
\fB\-\-password\-command2\fP="" \fB\-\-password\-command2\fP=""
shell \fB\fCcommand\fR to obtain the destination repository password from (default: $RESTIC\_PASSWORD\_COMMAND2) shell \fB\fCcommand\fR to obtain the destination repository password from (default: $RESTIC\_PASSWORD\_COMMAND2)
.PP .PP
\fB\-\-password\-file2\fP="" \fB\-\-password\-file2\fP=""
\fB\fCfile\fR to read the destination repository password from (default: $RESTIC\_PASSWORD\_FILE2) \fB\fCfile\fR to read the destination repository password from (default: $RESTIC\_PASSWORD\_FILE2)
.PP .PP
\fB\-\-path\fP=[] \fB\-\-path\fP=[]
only consider snapshots which include this (absolute) \fB\fCpath\fR, when no snapshot ID is given only consider snapshots which include this (absolute) \fB\fCpath\fR, when no snapshot ID is given
.PP .PP
\fB\-\-repo2\fP="" \fB\-\-repo2\fP=""
destination \fB\fCrepository\fR to copy snapshots to (default: $RESTIC\_REPOSITORY2) destination \fB\fCrepository\fR to copy snapshots to (default: $RESTIC\_REPOSITORY2)
.PP
\fB\-\-repository\-file2\fP=""
\fB\fCfile\fR from which to read the destination repository location to copy snapshots to (default: $RESTIC\_REPOSITORY\_FILE2)
.PP .PP
\fB\-\-tag\fP=[] \fB\-\-tag\fP=[]
only consider snapshots which include this \fB\fCtaglist\fR, when no snapshot ID is given only consider snapshots which include this \fB\fCtaglist\fR, when no snapshot ID is given
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+22 -20
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -40,81 +42,81 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for diff help for diff
.PP .PP
\fB\-\-metadata\fP[=false] \fB\-\-metadata\fP[=false]
print changes in metadata print changes in metadata
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+25 -23
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -31,93 +33,93 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-a\fP, \fB\-\-archive\fP="tar" \fB\-a\fP, \fB\-\-archive\fP="tar"
set archive \fB\fCformat\fR as "tar" or "zip" set archive \fB\fCformat\fR as "tar" or "zip"
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for dump help for dump
.PP .PP
\fB\-H\fP, \fB\-\-host\fP=[] \fB\-H\fP, \fB\-\-host\fP=[]
only consider snapshots for this host when the snapshot ID is "latest" (can be specified multiple times) only consider snapshots for this host when the snapshot ID is "latest" (can be specified multiple times)
.PP .PP
\fB\-\-path\fP=[] \fB\-\-path\fP=[]
only consider snapshots which include this (absolute) \fB\fCpath\fR for snapshot ID "latest" only consider snapshots which include this (absolute) \fB\fCpath\fR for snapshot ID "latest"
.PP .PP
\fB\-\-tag\fP=[] \fB\-\-tag\fP=[]
only consider snapshots which include this \fB\fCtaglist\fR for snapshot ID "latest" only consider snapshots which include this \fB\fCtaglist\fR for snapshot ID "latest"
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+33 -31
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -21,125 +23,125 @@ It can also be used to search for restic blobs or trees for troubleshooting.
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-\-blob\fP[=false] \fB\-\-blob\fP[=false]
pattern is a blob\-ID pattern is a blob\-ID
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for find help for find
.PP .PP
\fB\-H\fP, \fB\-\-host\fP=[] \fB\-H\fP, \fB\-\-host\fP=[]
only consider snapshots for this \fB\fChost\fR, when no snapshot ID is given (can be specified multiple times) only consider snapshots for this \fB\fChost\fR, when no snapshot ID is given (can be specified multiple times)
.PP .PP
\fB\-i\fP, \fB\-\-ignore\-case\fP[=false] \fB\-i\fP, \fB\-\-ignore\-case\fP[=false]
ignore case for pattern ignore case for pattern
.PP .PP
\fB\-l\fP, \fB\-\-long\fP[=false] \fB\-l\fP, \fB\-\-long\fP[=false]
use a long listing format showing size and mode use a long listing format showing size and mode
.PP .PP
\fB\-N\fP, \fB\-\-newest\fP="" \fB\-N\fP, \fB\-\-newest\fP=""
newest modification date/time newest modification date/time
.PP .PP
\fB\-O\fP, \fB\-\-oldest\fP="" \fB\-O\fP, \fB\-\-oldest\fP=""
oldest modification date/time oldest modification date/time
.PP .PP
\fB\-\-pack\fP[=false] \fB\-\-pack\fP[=false]
pattern is a pack\-ID pattern is a pack\-ID
.PP .PP
\fB\-\-path\fP=[] \fB\-\-path\fP=[]
only consider snapshots which include this (absolute) \fB\fCpath\fR, when no snapshot\-ID is given only consider snapshots which include this (absolute) \fB\fCpath\fR, when no snapshot\-ID is given
.PP .PP
\fB\-\-show\-pack\-id\fP[=false] \fB\-\-show\-pack\-id\fP[=false]
display the pack\-ID the blobs belong to (with \-\-blob or \-\-tree) display the pack\-ID the blobs belong to (with \-\-blob or \-\-tree)
.PP .PP
\fB\-s\fP, \fB\-\-snapshot\fP=[] \fB\-s\fP, \fB\-\-snapshot\fP=[]
snapshot \fB\fCid\fR to search in (can be given multiple times) snapshot \fB\fCid\fR to search in (can be given multiple times)
.PP .PP
\fB\-\-tag\fP=[] \fB\-\-tag\fP=[]
only consider snapshots which include this \fB\fCtaglist\fR, when no snapshot\-ID is given only consider snapshots which include this \fB\fCtaglist\fR, when no snapshot\-ID is given
.PP .PP
\fB\-\-tree\fP[=false] \fB\-\-tree\fP[=false]
pattern is a tree\-ID pattern is a tree\-ID
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH EXAMPLE .SH EXAMPLE
+39 -57
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -27,169 +29,149 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-l\fP, \fB\-\-keep\-last\fP=0 \fB\-l\fP, \fB\-\-keep\-last\fP=0
keep the last \fB\fCn\fR snapshots keep the last \fB\fCn\fR snapshots
.PP .PP
\fB\-H\fP, \fB\-\-keep\-hourly\fP=0 \fB\-H\fP, \fB\-\-keep\-hourly\fP=0
keep the last \fB\fCn\fR hourly snapshots keep the last \fB\fCn\fR hourly snapshots
.PP .PP
\fB\-d\fP, \fB\-\-keep\-daily\fP=0 \fB\-d\fP, \fB\-\-keep\-daily\fP=0
keep the last \fB\fCn\fR daily snapshots keep the last \fB\fCn\fR daily snapshots
.PP .PP
\fB\-w\fP, \fB\-\-keep\-weekly\fP=0 \fB\-w\fP, \fB\-\-keep\-weekly\fP=0
keep the last \fB\fCn\fR weekly snapshots keep the last \fB\fCn\fR weekly snapshots
.PP .PP
\fB\-m\fP, \fB\-\-keep\-monthly\fP=0 \fB\-m\fP, \fB\-\-keep\-monthly\fP=0
keep the last \fB\fCn\fR monthly snapshots keep the last \fB\fCn\fR monthly snapshots
.PP .PP
\fB\-y\fP, \fB\-\-keep\-yearly\fP=0 \fB\-y\fP, \fB\-\-keep\-yearly\fP=0
keep the last \fB\fCn\fR yearly snapshots keep the last \fB\fCn\fR yearly snapshots
.PP .PP
\fB\-\-keep\-within\fP= \fB\-\-keep\-within\fP=
keep snapshots that are newer than \fB\fCduration\fR (eg. 1y5m7d2h) relative to the latest snapshot keep snapshots that are newer than \fB\fCduration\fR (eg. 1y5m7d2h) relative to the latest snapshot
.PP
\fB\-\-keep\-within\-hourly\fP=
keep hourly snapshots that are newer than \fB\fCduration\fR (eg. 1y5m7d2h) relative to the latest snapshot
.PP
\fB\-\-keep\-within\-daily\fP=
keep daily snapshots that are newer than \fB\fCduration\fR (eg. 1y5m7d2h) relative to the latest snapshot
.PP
\fB\-\-keep\-within\-weekly\fP=
keep weekly snapshots that are newer than \fB\fCduration\fR (eg. 1y5m7d2h) relative to the latest snapshot
.PP
\fB\-\-keep\-within\-monthly\fP=
keep monthly snapshots that are newer than \fB\fCduration\fR (eg. 1y5m7d2h) relative to the latest snapshot
.PP
\fB\-\-keep\-within\-yearly\fP=
keep yearly snapshots that are newer than \fB\fCduration\fR (eg. 1y5m7d2h) relative to the latest snapshot
.PP .PP
\fB\-\-keep\-tag\fP=[] \fB\-\-keep\-tag\fP=[]
keep snapshots with this \fB\fCtaglist\fR (can be specified multiple times) keep snapshots with this \fB\fCtaglist\fR (can be specified multiple times)
.PP .PP
\fB\-\-host\fP=[] \fB\-\-host\fP=[]
only consider snapshots with the given \fB\fChost\fR (can be specified multiple times) only consider snapshots with the given \fB\fChost\fR (can be specified multiple times)
.PP .PP
\fB\-\-tag\fP=[] \fB\-\-tag\fP=[]
only consider snapshots which include this \fB\fCtaglist\fR in the format \fB\fCtag[,tag,...]\fR (can be specified multiple times) only consider snapshots which include this \fB\fCtaglist\fR in the format \fB\fCtag[,tag,...]\fR (can be specified multiple times)
.PP .PP
\fB\-\-path\fP=[] \fB\-\-path\fP=[]
only consider snapshots which include this (absolute) \fB\fCpath\fR (can be specified multiple times) only consider snapshots which include this (absolute) \fB\fCpath\fR (can be specified multiple times)
.PP .PP
\fB\-c\fP, \fB\-\-compact\fP[=false] \fB\-c\fP, \fB\-\-compact\fP[=false]
use compact output format use compact output format
.PP .PP
\fB\-g\fP, \fB\-\-group\-by\fP="host,paths" \fB\-g\fP, \fB\-\-group\-by\fP="host,paths"
string for grouping snapshots by host,paths,tags string for grouping snapshots by host,paths,tags
.PP .PP
\fB\-n\fP, \fB\-\-dry\-run\fP[=false] \fB\-n\fP, \fB\-\-dry\-run\fP[=false]
do not delete anything, just print what would be done do not delete anything, just print what would be done
.PP .PP
\fB\-\-prune\fP[=false] \fB\-\-prune\fP[=false]
automatically run the 'prune' command if snapshots have been removed automatically run the 'prune' command if snapshots have been removed
.PP .PP
\fB\-\-max\-unused\fP="5%" \fB\-\-max\-unused\fP="5%"
tolerate given \fB\fClimit\fR of unused data (absolute value in bytes with suffixes k/K, m/M, g/G, t/T, a value in % or the word 'unlimited') tolerate given \fB\fClimit\fR of unused data (absolute value in bytes with suffixes k/K, m/M, g/G, t/T, a value in % or the word 'unlimited')
.PP .PP
\fB\-\-max\-repack\-size\fP="" \fB\-\-max\-repack\-size\fP=""
maximum \fB\fCsize\fR to repack (allowed suffixes: k/K, m/M, g/G, t/T) maximum \fB\fCsize\fR to repack (allowed suffixes: k/K, m/M, g/G, t/T)
.PP .PP
\fB\-\-repack\-cacheable\-only\fP[=false] \fB\-\-repack\-cacheable\-only\fP[=false]
only repack packs which are cacheable only repack packs which are cacheable
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for forget help for forget
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+26 -28
View File
@@ -1,9 +1,11 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
restic\-generate \- Generate manual pages and auto\-completion files (bash, fish, zsh) restic\-generate \- Generate manual pages and auto\-completion files (bash, zsh)
.SH SYNOPSIS .SH SYNOPSIS
@@ -14,7 +16,7 @@ restic\-generate \- Generate manual pages and auto\-completion files (bash, fish
.SH DESCRIPTION .SH DESCRIPTION
.PP .PP
The "generate" command writes automatically generated files (like the man pages The "generate" command writes automatically generated files (like the man pages
and the auto\-completion files for bash, fish and zsh). and the auto\-completion files for bash and zsh).
.SH EXIT STATUS .SH EXIT STATUS
@@ -25,93 +27,89 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-\-bash\-completion\fP="" \fB\-\-bash\-completion\fP=""
write bash completion \fB\fCfile\fR write bash completion \fB\fCfile\fR
.PP
\fB\-\-fish\-completion\fP=""
write fish completion \fB\fCfile\fR
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for generate help for generate
.PP .PP
\fB\-\-man\fP="" \fB\-\-man\fP=""
write man pages to \fB\fCdirectory\fR write man pages to \fB\fCdirectory\fR
.PP .PP
\fB\-\-zsh\-completion\fP="" \fB\-\-zsh\-completion\fP=""
write zsh completion \fB\fCfile\fR write zsh completion \fB\fCfile\fR
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+26 -28
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -24,101 +26,97 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-\-copy\-chunker\-params\fP[=false] \fB\-\-copy\-chunker\-params\fP[=false]
copy chunker parameters from the secondary repository (useful with the copy command) copy chunker parameters from the secondary repository (useful with the copy command)
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for init help for init
.PP .PP
\fB\-\-key\-hint2\fP="" \fB\-\-key\-hint2\fP=""
key ID of key to try decrypting the secondary repository first (default: $RESTIC\_KEY\_HINT2) key ID of key to try decrypting the secondary repository first (default: $RESTIC\_KEY\_HINT2)
.PP .PP
\fB\-\-password\-command2\fP="" \fB\-\-password\-command2\fP=""
shell \fB\fCcommand\fR to obtain the secondary repository password from (default: $RESTIC\_PASSWORD\_COMMAND2) shell \fB\fCcommand\fR to obtain the secondary repository password from (default: $RESTIC\_PASSWORD\_COMMAND2)
.PP .PP
\fB\-\-password\-file2\fP="" \fB\-\-password\-file2\fP=""
\fB\fCfile\fR to read the secondary repository password from (default: $RESTIC\_PASSWORD\_FILE2) \fB\fCfile\fR to read the secondary repository password from (default: $RESTIC\_PASSWORD\_FILE2)
.PP .PP
\fB\-\-repo2\fP="" \fB\-\-repo2\fP=""
secondary \fB\fCrepository\fR to copy chunker parameters from (default: $RESTIC\_REPOSITORY2) secondary \fB\fCrepository\fR to copy chunker parameters from (default: $RESTIC\_REPOSITORY2)
.PP
\fB\-\-repository\-file2\fP=""
\fB\fCfile\fR from which to read the secondary repository location to copy chunker parameters from (default: $RESTIC\_REPOSITORY\_FILE2)
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+24 -22
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -24,89 +26,89 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for key help for key
.PP .PP
\fB\-\-host\fP="" \fB\-\-host\fP=""
the hostname for new keys the hostname for new keys
.PP .PP
\fB\-\-new\-password\-file\fP="" \fB\-\-new\-password\-file\fP=""
\fB\fCfile\fR from which to read the new password \fB\fCfile\fR from which to read the new password
.PP .PP
\fB\-\-user\fP="" \fB\-\-user\fP=""
the username for new keys the username for new keys
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+21 -19
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -24,77 +26,77 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for list help for list
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+26 -24
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -39,97 +41,97 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for ls help for ls
.PP .PP
\fB\-H\fP, \fB\-\-host\fP=[] \fB\-H\fP, \fB\-\-host\fP=[]
only consider snapshots for this \fB\fChost\fR, when no snapshot ID is given (can be specified multiple times) only consider snapshots for this \fB\fChost\fR, when no snapshot ID is given (can be specified multiple times)
.PP .PP
\fB\-l\fP, \fB\-\-long\fP[=false] \fB\-l\fP, \fB\-\-long\fP[=false]
use a long listing format showing size and mode use a long listing format showing size and mode
.PP .PP
\fB\-\-path\fP=[] \fB\-\-path\fP=[]
only consider snapshots which include this (absolute) \fB\fCpath\fR, when no snapshot ID is given only consider snapshots which include this (absolute) \fB\fCpath\fR, when no snapshot ID is given
.PP .PP
\fB\-\-recursive\fP[=false] \fB\-\-recursive\fP[=false]
include files in subfolders of the listed directories include files in subfolders of the listed directories
.PP .PP
\fB\-\-tag\fP=[] \fB\-\-tag\fP=[]
only consider snapshots which include this \fB\fCtaglist\fR, when no snapshot ID is given only consider snapshots which include this \fB\fCtaglist\fR, when no snapshot ID is given
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+22 -20
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -25,81 +27,81 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-f\fP, \fB\-\-force\fP[=false] \fB\-f\fP, \fB\-\-force\fP[=false]
apply a migration a second time apply a migration a second time
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for migrate help for migrate
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+30 -27
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -45,7 +47,8 @@ Mon Jan 2 15:04:05 \-0700 MST 2006
.PP .PP
For details please see the documentation for time.Format() at: For details please see the documentation for time.Format() at:
https://godoc.org/time#Time.Format
\[la]https://godoc.org/time#Time.Format\[ra]
.SH EXIT STATUS .SH EXIT STATUS
@@ -56,105 +59,105 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-\-allow\-other\fP[=false] \fB\-\-allow\-other\fP[=false]
allow other users to access the data in the mounted directory allow other users to access the data in the mounted directory
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for mount help for mount
.PP .PP
\fB\-H\fP, \fB\-\-host\fP=[] \fB\-H\fP, \fB\-\-host\fP=[]
only consider snapshots for this host (can be specified multiple times) only consider snapshots for this host (can be specified multiple times)
.PP .PP
\fB\-\-no\-default\-permissions\fP[=false] \fB\-\-no\-default\-permissions\fP[=false]
for 'allow\-other', ignore Unix permissions and allow users to read all snapshot files for 'allow\-other', ignore Unix permissions and allow users to read all snapshot files
.PP .PP
\fB\-\-owner\-root\fP[=false] \fB\-\-owner\-root\fP[=false]
use 'root' as the owner of files and dirs use 'root' as the owner of files and dirs
.PP .PP
\fB\-\-path\fP=[] \fB\-\-path\fP=[]
only consider snapshots which include this (absolute) \fB\fCpath\fR only consider snapshots which include this (absolute) \fB\fCpath\fR
.PP .PP
\fB\-\-snapshot\-template\fP="2006\-01\-02T15:04:05Z07:00" \fB\-\-snapshot\-template\fP="2006\-01\-02T15:04:05Z07:00"
set \fB\fCtemplate\fR to use for snapshot dirs set \fB\fCtemplate\fR to use for snapshot dirs
.PP .PP
\fB\-\-tag\fP=[] \fB\-\-tag\fP=[]
only consider snapshots which include this \fB\fCtaglist\fR only consider snapshots which include this \fB\fCtaglist\fR
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+25 -23
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -25,93 +27,93 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-n\fP, \fB\-\-dry\-run\fP[=false] \fB\-n\fP, \fB\-\-dry\-run\fP[=false]
do not modify the repository, just print what would be done do not modify the repository, just print what would be done
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for prune help for prune
.PP .PP
\fB\-\-max\-repack\-size\fP="" \fB\-\-max\-repack\-size\fP=""
maximum \fB\fCsize\fR to repack (allowed suffixes: k/K, m/M, g/G, t/T) maximum \fB\fCsize\fR to repack (allowed suffixes: k/K, m/M, g/G, t/T)
.PP .PP
\fB\-\-max\-unused\fP="5%" \fB\-\-max\-unused\fP="5%"
tolerate given \fB\fClimit\fR of unused data (absolute value in bytes with suffixes k/K, m/M, g/G, t/T, a value in % or the word 'unlimited') tolerate given \fB\fClimit\fR of unused data (absolute value in bytes with suffixes k/K, m/M, g/G, t/T, a value in % or the word 'unlimited')
.PP .PP
\fB\-\-repack\-cacheable\-only\fP[=false] \fB\-\-repack\-cacheable\-only\fP[=false]
only repack packs which are cacheable only repack packs which are cacheable
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+22 -20
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -25,81 +27,81 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for rebuild\-index help for rebuild\-index
.PP .PP
\fB\-\-read\-all\-packs\fP[=false] \fB\-\-read\-all\-packs\fP[=false]
read all pack files to generate new index from scratch read all pack files to generate new index from scratch
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+21 -19
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -26,77 +28,77 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for recover help for recover
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+30 -28
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -29,113 +31,113 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-e\fP, \fB\-\-exclude\fP=[] \fB\-e\fP, \fB\-\-exclude\fP=[]
exclude a \fB\fCpattern\fR (can be specified multiple times) exclude a \fB\fCpattern\fR (can be specified multiple times)
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for restore help for restore
.PP .PP
\fB\-H\fP, \fB\-\-host\fP=[] \fB\-H\fP, \fB\-\-host\fP=[]
only consider snapshots for this host when the snapshot ID is "latest" (can be specified multiple times) only consider snapshots for this host when the snapshot ID is "latest" (can be specified multiple times)
.PP .PP
\fB\-\-iexclude\fP=[] \fB\-\-iexclude\fP=[]
same as \fB\fC\-\-exclude\fR but ignores the casing of filenames same as \fB\fC\-\-exclude\fR but ignores the casing of filenames
.PP .PP
\fB\-\-iinclude\fP=[] \fB\-\-iinclude\fP=[]
same as \fB\fC\-\-include\fR but ignores the casing of filenames same as \fB\fC\-\-include\fR but ignores the casing of filenames
.PP .PP
\fB\-i\fP, \fB\-\-include\fP=[] \fB\-i\fP, \fB\-\-include\fP=[]
include a \fB\fCpattern\fR, exclude everything else (can be specified multiple times) include a \fB\fCpattern\fR, exclude everything else (can be specified multiple times)
.PP .PP
\fB\-\-path\fP=[] \fB\-\-path\fP=[]
only consider snapshots which include this (absolute) \fB\fCpath\fR for snapshot ID "latest" only consider snapshots which include this (absolute) \fB\fCpath\fR for snapshot ID "latest"
.PP .PP
\fB\-\-tag\fP=[] \fB\-\-tag\fP=[]
only consider snapshots which include this \fB\fCtaglist\fR for snapshot ID "latest" only consider snapshots which include this \fB\fCtaglist\fR for snapshot ID "latest"
.PP .PP
\fB\-t\fP, \fB\-\-target\fP="" \fB\-t\fP, \fB\-\-target\fP=""
directory to extract data to directory to extract data to
.PP .PP
\fB\-\-verify\fP[=false] \fB\-\-verify\fP[=false]
verify restored files content verify restored files content
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+22 -20
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -27,81 +29,81 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for self\-update help for self\-update
.PP .PP
\fB\-\-output\fP="" \fB\-\-output\fP=""
Save the downloaded file as \fB\fCfilename\fR (default: running binary itself) Save the downloaded file as \fB\fCfilename\fR (default: running binary itself)
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+28 -26
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -24,101 +26,101 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-c\fP, \fB\-\-compact\fP[=false] \fB\-c\fP, \fB\-\-compact\fP[=false]
use compact output format use compact output format
.PP .PP
\fB\-g\fP, \fB\-\-group\-by\fP="" \fB\-g\fP, \fB\-\-group\-by\fP=""
string for grouping snapshots by host,paths,tags string for grouping snapshots by host,paths,tags
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for snapshots help for snapshots
.PP .PP
\fB\-H\fP, \fB\-\-host\fP=[] \fB\-H\fP, \fB\-\-host\fP=[]
only consider snapshots for this \fB\fChost\fR (can be specified multiple times) only consider snapshots for this \fB\fChost\fR (can be specified multiple times)
.PP .PP
\fB\-\-latest\fP=0 \fB\-\-last\fP[=false]
only show the last \fB\fCn\fR snapshots for each host and path only show the last snapshot for each host and path
.PP .PP
\fB\-\-path\fP=[] \fB\-\-path\fP=[]
only consider snapshots for this \fB\fCpath\fR (can be specified multiple times) only consider snapshots for this \fB\fCpath\fR (can be specified multiple times)
.PP .PP
\fB\-\-tag\fP=[] \fB\-\-tag\fP=[]
only consider snapshots which include this \fB\fCtaglist\fR in the format \fB\fCtag[,tag,...]\fR (can be specified multiple times) only consider snapshots which include this \fB\fCtaglist\fR in the format \fB\fCtag[,tag,...]\fR (can be specified multiple times)
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+25 -23
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -54,93 +56,93 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for stats help for stats
.PP .PP
\fB\-H\fP, \fB\-\-host\fP=[] \fB\-H\fP, \fB\-\-host\fP=[]
only consider snapshots with the given \fB\fChost\fR (can be specified multiple times) only consider snapshots with the given \fB\fChost\fR (can be specified multiple times)
.PP .PP
\fB\-\-mode\fP="restore\-size" \fB\-\-mode\fP="restore\-size"
counting mode: restore\-size (default), files\-by\-contents, blobs\-per\-file or raw\-data counting mode: restore\-size (default), files\-by\-contents, blobs\-per\-file or raw\-data
.PP .PP
\fB\-\-path\fP=[] \fB\-\-path\fP=[]
only consider snapshots which include this (absolute) \fB\fCpath\fR (can be specified multiple times) only consider snapshots which include this (absolute) \fB\fCpath\fR (can be specified multiple times)
.PP .PP
\fB\-\-tag\fP=[] \fB\-\-tag\fP=[]
only consider snapshots which include this \fB\fCtaglist\fR in the format \fB\fCtag[,tag,...]\fR (can be specified multiple times) only consider snapshots which include this \fB\fCtaglist\fR in the format \fB\fCtag[,tag,...]\fR (can be specified multiple times)
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+27 -25
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -31,101 +33,101 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-\-add\fP=[] \fB\-\-add\fP=[]
\fB\fCtags\fR which will be added to the existing tags in the format \fB\fCtag[,tag,...]\fR (can be given multiple times) \fB\fCtags\fR which will be added to the existing tags in the format \fB\fCtag[,tag,...]\fR (can be given multiple times)
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for tag help for tag
.PP .PP
\fB\-H\fP, \fB\-\-host\fP=[] \fB\-H\fP, \fB\-\-host\fP=[]
only consider snapshots for this \fB\fChost\fR, when no snapshot ID is given (can be specified multiple times) only consider snapshots for this \fB\fChost\fR, when no snapshot ID is given (can be specified multiple times)
.PP .PP
\fB\-\-path\fP=[] \fB\-\-path\fP=[]
only consider snapshots which include this (absolute) \fB\fCpath\fR, when no snapshot\-ID is given only consider snapshots which include this (absolute) \fB\fCpath\fR, when no snapshot\-ID is given
.PP .PP
\fB\-\-remove\fP=[] \fB\-\-remove\fP=[]
\fB\fCtags\fR which will be removed from the existing tags in the format \fB\fCtag[,tag,...]\fR (can be given multiple times) \fB\fCtags\fR which will be removed from the existing tags in the format \fB\fCtag[,tag,...]\fR (can be given multiple times)
.PP .PP
\fB\-\-set\fP=[] \fB\-\-set\fP=[]
\fB\fCtags\fR which will replace the existing tags in the format \fB\fCtag[,tag,...]\fR (can be given multiple times) \fB\fCtags\fR which will replace the existing tags in the format \fB\fCtag[,tag,...]\fR (can be given multiple times)
.PP .PP
\fB\-\-tag\fP=[] \fB\-\-tag\fP=[]
only consider snapshots which include this \fB\fCtaglist\fR, when no snapshot\-ID is given only consider snapshots which include this \fB\fCtaglist\fR, when no snapshot\-ID is given
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+22 -20
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -24,81 +26,81 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for unlock help for unlock
.PP .PP
\fB\-\-remove\-all\fP[=false] \fB\-\-remove\-all\fP[=false]
remove all locks, even non\-stale ones remove all locks, even non\-stale ones
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+21 -19
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -25,77 +27,77 @@ Exit status is 0 if the command was successful, and non\-zero if there was any e
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for version help for version
.SH OPTIONS INHERITED FROM PARENT COMMANDS .SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+21 -19
View File
@@ -1,5 +1,7 @@
.TH "restic backup" "1" "Jan 2017" "generated by `restic generate`" ""
.nh .nh
.TH "restic backup" "1" "Jan 2017" "generated by \fB\fCrestic generate\fR" "" .ad l
.SH NAME .SH NAME
.PP .PP
@@ -20,75 +22,75 @@ directories in an encrypted repository stored on different backends.
.SH OPTIONS .SH OPTIONS
.PP .PP
\fB\-\-cacert\fP=[] \fB\-\-cacert\fP=[]
\fB\fCfile\fR to load root certificates from (default: use system certificates) \fB\fCfile\fR to load root certificates from (default: use system certificates)
.PP .PP
\fB\-\-cache\-dir\fP="" \fB\-\-cache\-dir\fP=""
set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory) set the cache \fB\fCdirectory\fR\&. (default: use system default cache directory)
.PP .PP
\fB\-\-cleanup\-cache\fP[=false] \fB\-\-cleanup\-cache\fP[=false]
auto remove old cache directories auto remove old cache directories
.PP .PP
\fB\-h\fP, \fB\-\-help\fP[=false] \fB\-h\fP, \fB\-\-help\fP[=false]
help for restic help for restic
.PP .PP
\fB\-\-json\fP[=false] \fB\-\-json\fP[=false]
set output mode to JSON for commands that support it set output mode to JSON for commands that support it
.PP .PP
\fB\-\-key\-hint\fP="" \fB\-\-key\-hint\fP=""
\fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT) \fB\fCkey\fR ID of key to try decrypting first (default: $RESTIC\_KEY\_HINT)
.PP .PP
\fB\-\-limit\-download\fP=0 \fB\-\-limit\-download\fP=0
limits downloads to a maximum rate in KiB/s. (default: unlimited) limits downloads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-limit\-upload\fP=0 \fB\-\-limit\-upload\fP=0
limits uploads to a maximum rate in KiB/s. (default: unlimited) limits uploads to a maximum rate in KiB/s. (default: unlimited)
.PP .PP
\fB\-\-no\-cache\fP[=false] \fB\-\-no\-cache\fP[=false]
do not use a local cache do not use a local cache
.PP .PP
\fB\-\-no\-lock\fP[=false] \fB\-\-no\-lock\fP[=false]
do not lock the repository, this allows some operations on read\-only repositories do not lock the repository, this allows some operations on read\-only repositories
.PP .PP
\fB\-o\fP, \fB\-\-option\fP=[] \fB\-o\fP, \fB\-\-option\fP=[]
set extended option (\fB\fCkey=value\fR, can be specified multiple times) set extended option (\fB\fCkey=value\fR, can be specified multiple times)
.PP .PP
\fB\-\-password\-command\fP="" \fB\-\-password\-command\fP=""
shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND) shell \fB\fCcommand\fR to obtain the repository password from (default: $RESTIC\_PASSWORD\_COMMAND)
.PP .PP
\fB\-p\fP, \fB\-\-password\-file\fP="" \fB\-p\fP, \fB\-\-password\-file\fP=""
\fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE) \fB\fCfile\fR to read the repository password from (default: $RESTIC\_PASSWORD\_FILE)
.PP .PP
\fB\-q\fP, \fB\-\-quiet\fP[=false] \fB\-q\fP, \fB\-\-quiet\fP[=false]
do not output comprehensive progress report do not output comprehensive progress report
.PP .PP
\fB\-r\fP, \fB\-\-repo\fP="" \fB\-r\fP, \fB\-\-repo\fP=""
\fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY) \fB\fCrepository\fR to backup to or restore from (default: $RESTIC\_REPOSITORY)
.PP .PP
\fB\-\-repository\-file\fP="" \fB\-\-repository\-file\fP=""
\fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE) \fB\fCfile\fR to read the repository location from (default: $RESTIC\_REPOSITORY\_FILE)
.PP .PP
\fB\-\-tls\-client\-cert\fP="" \fB\-\-tls\-client\-cert\fP=""
path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key path to a \fB\fCfile\fR containing PEM encoded TLS client certificate and private key
.PP .PP
\fB\-v\fP, \fB\-\-verbose\fP[=0] \fB\-v\fP, \fB\-\-verbose\fP[=0]
be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3) be verbose (specify multiple times or a level using \-\-verbose=\fB\fCn\fR, max level/times is 3)
.SH SEE ALSO .SH SEE ALSO
+8 -14
View File
@@ -26,7 +26,7 @@ Usage help is available:
dump Print a backed-up file to stdout dump Print a backed-up file to stdout
find Find a file, a directory or restic IDs find Find a file, a directory or restic IDs
forget Remove snapshots from the repository forget Remove snapshots from the repository
generate Generate manual pages and auto-completion files (bash, fish, zsh) generate Generate manual pages and auto-completion files (bash, zsh)
help Help about any command help Help about any command
init Initialize a new repository init Initialize a new repository
key Manage keys (passwords) key Manage keys (passwords)
@@ -105,7 +105,7 @@ command:
--iexclude pattern same as --exclude pattern but ignores the casing of filenames --iexclude pattern same as --exclude pattern but ignores the casing of filenames
--iexclude-file file same as --exclude-file but ignores casing of filenames in patterns --iexclude-file file same as --exclude-file but ignores casing of filenames in patterns
--ignore-inode ignore inode number changes when checking for modified files --ignore-inode ignore inode number changes when checking for modified files
-x, --one-file-system exclude other file systems, don't cross filesystem boundaries and subvolumes -x, --one-file-system exclude other file systems
--parent snapshot use this parent snapshot (default: last snapshot in the repo that has the same target files/directories) --parent snapshot use this parent snapshot (default: last snapshot in the repo that has the same target files/directories)
--stdin read backup from stdin --stdin read backup from stdin
--stdin-filename filename filename to use when reading from stdin (default "stdin") --stdin-filename filename filename to use when reading from stdin (default "stdin")
@@ -165,10 +165,12 @@ command does that:
create exclusive lock for repository create exclusive lock for repository
modified tags on 1 snapshots modified tags on 1 snapshots
Note the snapshot ID has changed, so between each change we need to look up the Note the snapshot ID has changed, so between each change we need to look
new ID of the snapshot. But there is an even better way - the ``tag`` command up the new ID of the snapshot. But there is an even better way, the
accepts a filter using the ``--tag`` option, so we can filter snapshots based ``tag`` command accepts ``--tag`` for a filter, so we can filter
on the tag we just added. This way we can add and remove tags incrementally: snapshots based on the tag we just added.
So we can add and remove tags incrementally like this:
.. code-block:: console .. code-block:: console
@@ -187,14 +189,6 @@ on the tag we just added. This way we can add and remove tags incrementally:
$ restic -r /srv/restic-repo tag --tag NL --add SOMETHING $ restic -r /srv/restic-repo tag --tag NL --add SOMETHING
no snapshots were modified no snapshots were modified
To operate on untagged snapshots only, specify the empty string ``''`` as the
filter value to ``--tag``. The following command will add the tag ``OTHER``
to all untagged snapshots:
.. code-block:: console
$ restic -r /srv/restic-repo tag --tag '' --add OTHER
Under the hood Under the hood
-------------- --------------
+860 -170
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -5,7 +5,7 @@ set -e
echo "Build binary using golang docker image" echo "Build binary using golang docker image"
docker run --rm -ti \ docker run --rm -ti \
-v "`pwd`":/go/src/github.com/restic/restic \ -v "`pwd`":/go/src/github.com/restic/restic \
-w /go/src/github.com/restic/restic golang:1.16-alpine go run build.go -w /go/src/github.com/restic/restic golang:1.15-alpine go run build.go
echo "Build docker image restic/restic:latest" echo "Build docker image restic/restic:latest"
docker build --rm -t restic/restic:latest -f docker/Dockerfile . docker build --rm -t restic/restic:latest -f docker/Dockerfile .
+32 -22
View File
@@ -2,39 +2,49 @@ module github.com/restic/restic
require ( require (
bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512 bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512
cloud.google.com/go/storage v1.16.0 cloud.google.com/go/storage v1.12.0
github.com/Azure/azure-sdk-for-go v55.6.0+incompatible github.com/Azure/azure-sdk-for-go v46.1.0+incompatible
github.com/Azure/go-autorest/autorest v0.11.19 // indirect github.com/Azure/go-autorest/autorest v0.11.6 // indirect
github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect
github.com/cenkalti/backoff/v4 v4.1.1 github.com/cenkalti/backoff/v4 v4.0.2
github.com/cespare/xxhash/v2 v2.1.1 github.com/cespare/xxhash/v2 v2.1.1
github.com/dchest/siphash v1.2.2 github.com/dchest/siphash v1.2.2
github.com/dnaeon/go-vcr v1.2.0 // indirect github.com/dnaeon/go-vcr v1.0.1 // indirect
github.com/elithrar/simple-scrypt v1.3.0 github.com/elithrar/simple-scrypt v1.3.0
github.com/go-ole/go-ole v1.2.5 github.com/go-ole/go-ole v1.2.4
github.com/gofrs/uuid v4.0.0+incompatible // indirect github.com/google/go-cmp v0.5.2
github.com/google/go-cmp v0.5.6 github.com/google/uuid v1.1.2 // indirect
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect
github.com/hashicorp/golang-lru v0.5.4 github.com/hashicorp/golang-lru v0.5.4
github.com/juju/ratelimit v1.0.1 github.com/juju/ratelimit v1.0.1
github.com/kr/text v0.2.0 // indirect
github.com/kurin/blazer v0.5.3 github.com/kurin/blazer v0.5.3
github.com/minio/minio-go/v7 v7.0.12 github.com/minio/minio-go/v7 v7.0.5
github.com/minio/sha256-simd v1.0.0 github.com/minio/sha256-simd v0.1.1
github.com/ncw/swift v1.0.53 github.com/ncw/swift v1.0.52
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
github.com/pkg/errors v0.9.1 github.com/pkg/errors v0.9.1
github.com/pkg/profile v1.6.0 github.com/pkg/profile v1.5.0
github.com/pkg/sftp v1.13.2 github.com/pkg/sftp v1.12.0
github.com/pkg/xattr v0.4.3 github.com/pkg/xattr v0.4.2
github.com/restic/chunker v0.4.0 github.com/restic/chunker v0.4.0
github.com/spf13/cobra v1.2.1 github.com/satori/go.uuid v1.2.0 // indirect
github.com/smartystreets/assertions v1.2.0 // indirect
github.com/smartystreets/goconvey v1.6.4 // indirect
github.com/spf13/cobra v0.0.5
github.com/spf13/pflag v1.0.5 github.com/spf13/pflag v1.0.5
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a
golang.org/x/net v0.0.0-20210614182718-04defd469f4e golang.org/x/net v0.0.0-20200904194848-62affa334b73
golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c golang.org/x/sys v0.0.0-20201101102859-da207088b7d1
golang.org/x/text v0.3.6 golang.org/x/text v0.3.4
google.golang.org/api v0.50.0 google.golang.org/api v0.32.0
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect
gopkg.in/ini.v1 v1.61.0 // indirect
gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637 gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637
gopkg.in/yaml.v2 v2.3.0 // indirect
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect
) )
go 1.13 go 1.13
+139 -293
View File
@@ -15,14 +15,8 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.66.0 h1:DZeAkuQGQqnm9Xv36SbMJEU8aFBz4wL04UpMWPWwjzg=
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.66.0/go.mod h1:dgqGAjKCDxyhGTtC9dAREQGUJpkceNm1yt590Qno0Ko=
cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY=
cloud.google.com/go v0.84.0 h1:hVhK90DwCdOAYGME/FJd9vNIZye9HBR6Yy3fu4js3N8=
cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
@@ -31,7 +25,6 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
@@ -40,38 +33,34 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
cloud.google.com/go/storage v1.16.0 h1:1UwAux2OZP4310YXg5ohqBEpV16Y93uZG4+qOX7K2Kg= cloud.google.com/go/storage v1.12.0 h1:4y3gHptW1EHVtcPAVE0eBBlFuGqEejTTG3KdIE0lUX4=
cloud.google.com/go/storage v1.16.0/go.mod h1:ieKBmUyzcftN5tbxwnXClMKH00CfcQ+xL6NN0r5QfmE= cloud.google.com/go/storage v1.12.0/go.mod h1:fFLk2dp2oAhDz8QFKwqrjdJvxSp/W2g7nillojlL5Ho=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/Azure/azure-sdk-for-go v55.6.0+incompatible h1:SDeTdsn7/wiCDVLiKR1VFDCPURKKEg59bP7ewi7kUJc= github.com/Azure/azure-sdk-for-go v46.1.0+incompatible h1:e9xxveqrMFRJgj44gychg6jYGfZbwwKhW4wGq9LEG8Q=
github.com/Azure/azure-sdk-for-go v55.6.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v46.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/Azure/go-autorest/autorest v0.11.19 h1:7/IqD2fEYVha1EPeaiytVKhzmPV223pfkRIQUGOK2IE= github.com/Azure/go-autorest/autorest v0.11.6 h1:LIzfhNo9I3+il0KO2JY1/lgJmjig7lY0wFulQNZkbtg=
github.com/Azure/go-autorest/autorest v0.11.19/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest v0.11.6/go.mod h1:V6p3pKZx1KKkJubbxnDWrzNhEIfOy/pTGasLqzHIPHs=
github.com/Azure/go-autorest/autorest/adal v0.9.13 h1:Mp5hbtOePIzM8pJVRa3YLrWWmZtoxRXqUEzCfJt3+/Q= github.com/Azure/go-autorest/autorest/adal v0.9.4 h1:1/DtH4Szusk4psLBrJn/gocMRIf1ji30WAz3GfyULRQ=
github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= github.com/Azure/go-autorest/autorest/adal v0.9.4/go.mod h1:/3SMAM86bP6wC9Ev35peQDUeqFZBMH07vvUOmg4z/fE=
github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw=
github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk=
github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk=
github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE=
github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= github.com/Azure/go-autorest/logger v0.2.0 h1:e4RVHVZKC5p6UANLJHkM4OfR1UKZPj8Wt8Pcx+3oqrE=
github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/cenkalti/backoff/v4 v4.0.2 h1:JIufpQLbh4DkbQoii76ItQIUFzevQSqOLZca4eamEDs=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/cenkalti/backoff/v4 v4.0.2/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
github.com/cenkalti/backoff/v4 v4.1.1 h1:G2HAfAmvm/GcKan2oOQpBXOd2tT2G57ZnZGWa1PxPBQ=
github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
@@ -80,44 +69,34 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dchest/siphash v1.2.2 h1:9DFz8tQwl9pTVt5iok/9zKyzA1Q6bRGiF3HPiEEVr9I= github.com/dchest/siphash v1.2.2 h1:9DFz8tQwl9pTVt5iok/9zKyzA1Q6bRGiF3HPiEEVr9I=
github.com/dchest/siphash v1.2.2/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4= github.com/dchest/siphash v1.2.2/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4=
github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dnaeon/go-vcr v1.0.1 h1:r8L/HqC0Hje5AXMu1ooW8oyQyOFv4GxqpL0nRP7SLLY=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
github.com/elithrar/simple-scrypt v1.3.0 h1:KIlOlxdoQf9JWKl5lMAJ28SY2URB0XTRDn2TckyzAZg= github.com/elithrar/simple-scrypt v1.3.0 h1:KIlOlxdoQf9JWKl5lMAJ28SY2URB0XTRDn2TckyzAZg=
github.com/elithrar/simple-scrypt v1.3.0/go.mod h1:U2XQRI95XHY0St410VE3UjT7vuKb1qPwrl/EJwEqnZo= github.com/elithrar/simple-scrypt v1.3.0/go.mod h1:U2XQRI95XHY0St410VE3UjT7vuKb1qPwrl/EJwEqnZo=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk=
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI=
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -130,8 +109,9 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
@@ -143,16 +123,11 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -160,19 +135,13 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0 h1:pMen7vLs8nvgEYhywH3KDWJIJTeEr2ULsVWHWYHQyBs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ=
github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
@@ -180,50 +149,29 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20200905233945-acf8798be1f7/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0=
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
@@ -231,13 +179,11 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/juju/ratelimit v1.0.1 h1:+7AIFJVQ0EQgq/K9+0Krm7m530Du7tIz0METWzN0RgY= github.com/juju/ratelimit v1.0.1 h1:+7AIFJVQ0EQgq/K9+0Krm7m530Du7tIz0METWzN0RgY=
github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/cpuid v1.2.3 h1:CCtW0xUnWGVINKvE/WWOYKdsPV6mawAtvQuSl8guwQs=
github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s=
github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4=
github.com/klauspost/cpuid/v2 v2.0.4 h1:g0I61F2K2DjRHz1cnxlkNSBIaePVoJIjjnHui8QHbiw=
github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
@@ -245,122 +191,101 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kurin/blazer v0.5.3 h1:SAgYv0TKU0kN/ETfO5ExjNAPyMt2FocO2s/UlCHfjAk= github.com/kurin/blazer v0.5.3 h1:SAgYv0TKU0kN/ETfO5ExjNAPyMt2FocO2s/UlCHfjAk=
github.com/kurin/blazer v0.5.3/go.mod h1:4FCXMUWo9DllR2Do4TtBd377ezyAJ51vB5uTBjt0pGU= github.com/kurin/blazer v0.5.3/go.mod h1:4FCXMUWo9DllR2Do4TtBd377ezyAJ51vB5uTBjt0pGU=
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4=
github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw=
github.com/minio/minio-go/v7 v7.0.12 h1:/4pxUdwn9w0QEryNkrrWaodIESPRX+NxpO0Q6hVdaAA= github.com/minio/minio-go/v7 v7.0.5 h1:I2NIJ2ojwJqD/YByemC1M59e1b4FW9kS7NlOar7HPV4=
github.com/minio/minio-go/v7 v7.0.12/go.mod h1:S23iSP5/gbMwtxeY5FM71R+TkAYyzEdoNEDDwpt8yWs= github.com/minio/minio-go/v7 v7.0.5/go.mod h1:TA0CQCjJZHM5SJj9IjqR0NmpmQJ6bCbXifAJ3mUU6Hw=
github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU=
github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g=
github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM=
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= github.com/ncw/swift v1.0.52 h1:ACF3JufDGgeKp/9mrDgQlEgS8kRYC4XKcuzj/8EJjQU=
github.com/ncw/swift v1.0.53 h1:luHjjTNtekIEvHg5KdAFIBaH7bWfNkefwFnpDffSIks= github.com/ncw/swift v1.0.52/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
github.com/ncw/swift v1.0.53/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/profile v1.6.0 h1:hUDfIISABYI59DyeB3OTay/HxSRwTQ8rB/H83k6r5dM= github.com/pkg/profile v1.5.0 h1:042Buzk+NhDI+DeSAA62RwJL8VAuZUMQZUjCsRz1Mug=
github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/profile v1.5.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18=
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.12.0 h1:/f3b24xrDhkhddlaobPe2JgBqfdt+gC/NYl0QY9IOuI=
github.com/pkg/sftp v1.13.2 h1:taJnKntsWgU+qae21Rx52lIwndAdKrj0mfUNQsz1z4Q= github.com/pkg/sftp v1.12.0/go.mod h1:fUqqXB5vEgVCZ131L+9say31RAri6aF6KDViawhxKK8=
github.com/pkg/sftp v1.13.2/go.mod h1:LzqnAvaD5TWeNBsZpfKxSYn1MbjWwOsCIAFFJbpIsK8= github.com/pkg/xattr v0.4.2 h1:fbVxr9lvkToTGgPljVszvFsOdcbSv5BmGABneyxRgZM=
github.com/pkg/xattr v0.4.3 h1:5Jx4GCg5ABtqWZH8WLzeI4fOtM1HyX4RBawuCoua1es= github.com/pkg/xattr v0.4.2/go.mod h1:sBD3RAqlr8Q+RC3FutZcikpT8nyDrIEEBw2J744gVWs=
github.com/pkg/xattr v0.4.3/go.mod h1:sBD3RAqlr8Q+RC3FutZcikpT8nyDrIEEBw2J744gVWs=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/restic/chunker v0.4.0 h1:YUPYCUn70MYP7VO4yllypp2SjmsRhRJaad3xKu1QFRw= github.com/restic/chunker v0.4.0 h1:YUPYCUn70MYP7VO4yllypp2SjmsRhRJaad3xKu1QFRw=
github.com/restic/chunker v0.4.0/go.mod h1:z0cH2BejpW636LXw0R/BGyv+Ey8+m9QGiOanDHItzyw= github.com/restic/chunker v0.4.0/go.mod h1:z0cH2BejpW636LXw0R/BGyv+Ey8+m9QGiOanDHItzyw=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs=
github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s=
github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ=
github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e h1:gsTQYXdTw2Gq7RBsWvlQ91b+aEQ6bXFUngBGuR8sPpI=
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -382,10 +307,8 @@ golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHl
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
@@ -393,15 +316,10 @@ golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -426,48 +344,30 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q=
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 h1:ld7aEMNHoBnnDAX15v1T6z31v8HwR2A9FYOuAhWqkwc=
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 h1:3B43BWw0xEBsLZ/NO1VALz6fppU3481pik+2Ksv45z8=
golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -476,11 +376,9 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191210023423-ac6580df4449 h1:gSbV7h1NRL2G1xTg/owz62CST1oJBmxy4QpMMregXVQ=
golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -489,6 +387,7 @@ golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -497,40 +396,20 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201101102859-da207088b7d1 h1:a/mKvvZr9Jcc8oKfcmgzyp7OwF73JPWsQLvH1z2Kxck=
golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 h1:z99zHgr7hKfrUcX/KsoJk5FJfjTceCKIp96+biqP4To=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -550,7 +429,6 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -573,22 +451,15 @@ golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roY
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200828161849-5deb26317202/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20200915173823-2db8f0ff891c h1:AQsh/7arPVFDBraQa8x7GoVnwnGg1kM7J2ySI0kF5WU=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20200915173823-2db8f0ff891c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20200918232735-d647fc253266 h1:k7tVuG0g1JwmD3Jh8oAl1vQ1C3jb4Hi/dUl1wWDBJpQ=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20200918232735-d647fc253266/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.4 h1:cVngSRcfgyZCzys3KYOpCFa+4dqX/Oub9tAq00ttGVs=
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -610,27 +481,22 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.31.0/go.mod h1:CL+9IBCa2WWU6gRuBWaKqGWLFFwbEUXkfeMkHLQWYWo=
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.32.0 h1:Le77IccnTqEa8ryp9wIpX5W3zYm7Gf9LhOp9PHcwFts=
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= google.golang.org/api v0.32.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/appengine v1.1.0 h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs=
google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo=
google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4=
google.golang.org/api v0.49.0/go.mod h1:BECiH72wsfwUvOVn3+btPD5WHi0LzavZReBndi42L18=
google.golang.org/api v0.50.0 h1:LX7NFCFYOHzr7WHaYiRUpeipZe9o5L8T+2F4Z798VDw=
google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7 h1:ZUjXAXmrAyrmmCPHgCA/vChHcpsX27MZ3yBonD/z1KE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -652,32 +518,19 @@ google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfG
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200831141814-d751682dd103/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200914193844-75d14daec038/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200921151605-7abf4a1a14d5 h1:B9nroC8SSX5GtbVvxPF9tYIVkaCpjhVLOrlAY8ONzm8=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200921151605-7abf4a1a14d5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
google.golang.org/genproto v0.0.0-20210624174822-c5cf32407d0a/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84 h1:R1r5J0u6Cx+RNl/6mezTw6oA14cmKC96FeUwL6A9bd4=
google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1 h1:Hz2g2wirWK7H0qIIhGIqRGTuMwTE8HEKFnDZZ7lm9NU=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
@@ -690,17 +543,8 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.32.0 h1:zWTV+LMdc3kaiJMSTOFz2UgSBgx8RNQoTGiZu3fR9S0=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0=
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -710,27 +554,29 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U=
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= gopkg.in/ini.v1 v1.61.0 h1:LBCdW4FmFYL4s/vDZD1RQYX7oAR6IjujCYgMdbHBR10=
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.61.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637 h1:yiW+nvdHb9LVqSHQBXfZCieqV4fzYhNBql77zY0ykqs= gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637 h1:yiW+nvdHb9LVqSHQBXfZCieqV4fzYhNBql77zY0ykqs=
gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637/go.mod h1:BHsqpu/nsuzkT5BpiH1EMZPLyqSMM8JbIavyFACoFNk= gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637/go.mod h1:BHsqpu/nsuzkT5BpiH1EMZPLyqSMM8JbIavyFACoFNk=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+2 -2
View File
@@ -224,9 +224,9 @@ func buildTargets(sourceDir, outputDir string, targets map[string][]string) {
// ATTENTION: the list of architectures must be in sync with .github/workflows/tests.yml! // ATTENTION: the list of architectures must be in sync with .github/workflows/tests.yml!
var defaultBuildTargets = map[string][]string{ var defaultBuildTargets = map[string][]string{
"aix": {"ppc64"}, "aix": {"ppc64"},
"darwin": {"amd64", "arm64"}, "darwin": {"amd64"},
"freebsd": {"386", "amd64", "arm"}, "freebsd": {"386", "amd64", "arm"},
"linux": {"386", "amd64", "arm", "arm64", "ppc64le", "mips", "mipsle", "mips64", "mips64le", "s390x"}, "linux": {"386", "amd64", "arm", "arm64", "ppc64le", "mips", "mipsle", "mips64", "mips64le"},
"netbsd": {"386", "amd64"}, "netbsd": {"386", "amd64"},
"openbsd": {"386", "amd64"}, "openbsd": {"386", "amd64"},
"windows": {"386", "amd64"}, "windows": {"386", "amd64"},
+1 -2
View File
@@ -290,7 +290,6 @@ func generateFiles() {
run("./restic-generate.temp", "generate", run("./restic-generate.temp", "generate",
"--man", "doc/man", "--man", "doc/man",
"--zsh-completion", "doc/zsh-completion.zsh", "--zsh-completion", "doc/zsh-completion.zsh",
"--fish-completion", "doc/fish-completion.fish",
"--bash-completion", "doc/bash-completion.sh") "--bash-completion", "doc/bash-completion.sh")
rm("restic-generate.temp") rm("restic-generate.temp")
@@ -474,5 +473,5 @@ func main() {
msg("done, output dir is %v", opts.OutputDir) msg("done, output dir is %v", opts.OutputDir)
msg("now run:\n\ngit push --tags origin master\ndocker push restic/restic:latest\ndocker push restic/restic:%s\n", opts.Version) msg("now run:\n\ngit push --tags origin master\ndocker push restic/restic\n")
} }
+1 -1
View File
@@ -16,7 +16,7 @@ type Config struct {
Container string Container string
Prefix string Prefix string
Connections uint `option:"connections" help:"set a limit for the number of concurrent connections (default: 5)"` Connections uint `option:"connections" help:"set a limit for the number of concurrent connections (default: 20)"`
} }
// NewConfig returns a new Config with the default values filled in. // NewConfig returns a new Config with the default values filled in.
+15
View File
@@ -57,6 +57,7 @@ func (be *RetryBackend) retry(ctx context.Context, msg string, f func() error) e
// Save stores the data in the backend under the given handle. // Save stores the data in the backend under the given handle.
func (be *RetryBackend) Save(ctx context.Context, h restic.Handle, rd restic.RewindReader) error { func (be *RetryBackend) Save(ctx context.Context, h restic.Handle, rd restic.RewindReader) error {
firstTry := true
return be.retry(ctx, fmt.Sprintf("Save(%v)", h), func() error { return be.retry(ctx, fmt.Sprintf("Save(%v)", h), func() error {
err := rd.Rewind() err := rd.Rewind()
if err != nil { if err != nil {
@@ -65,13 +66,27 @@ func (be *RetryBackend) Save(ctx context.Context, h restic.Handle, rd restic.Rew
err = be.Backend.Save(ctx, h, rd) err = be.Backend.Save(ctx, h, rd)
if err == nil { if err == nil {
if !firstTry {
fi, err := be.Backend.Stat(ctx, h)
if err != nil {
return err
}
if fi.Size != rd.Length() {
return fmt.Errorf("Stat after save found unexpected length %q instead of %q", fi.Size, rd.Length())
}
}
return nil return nil
} }
firstTry = false
debug.Log("Save(%v) failed with error, removing file: %v", h, err) debug.Log("Save(%v) failed with error, removing file: %v", h, err)
rerr := be.Backend.Remove(ctx, h) rerr := be.Backend.Remove(ctx, h)
if rerr != nil { if rerr != nil {
debug.Log("Remove(%v) returned error: %v", h, err) debug.Log("Remove(%v) returned error: %v", h, err)
if be.Report != nil {
be.Report(fmt.Sprintf("Delete-failed-Save(%v)", h), err, time.Duration(0))
}
} }
// return original error // return original error
+6 -1
View File
@@ -16,6 +16,7 @@ import (
func TestBackendSaveRetry(t *testing.T) { func TestBackendSaveRetry(t *testing.T) {
buf := bytes.NewBuffer(nil) buf := bytes.NewBuffer(nil)
errcount := 0 errcount := 0
uploadSize := int64(0)
be := &mock.Backend{ be := &mock.Backend{
SaveFn: func(ctx context.Context, h restic.Handle, rd restic.RewindReader) error { SaveFn: func(ctx context.Context, h restic.Handle, rd restic.RewindReader) error {
if errcount == 0 { if errcount == 0 {
@@ -28,9 +29,13 @@ func TestBackendSaveRetry(t *testing.T) {
return errors.New("injected error") return errors.New("injected error")
} }
_, err := io.Copy(buf, rd) var err error
uploadSize, err = io.Copy(buf, rd)
return err return err
}, },
StatFn: func(ctx context.Context, h restic.Handle) (restic.FileInfo, error) {
return restic.FileInfo{Name: h.Name, Size: uploadSize}, nil
},
} }
retryBackend := NewRetryBackend(be, 10, nil) retryBackend := NewRetryBackend(be, 10, nil)
+1 -1
View File
@@ -16,7 +16,7 @@ type Config struct {
Bucket string Bucket string
Prefix string Prefix string
Connections uint `option:"connections" help:"set a limit for the number of concurrent connections (default: 5)"` Connections uint `option:"connections" help:"set a limit for the number of concurrent connections (default: 20)"`
} }
// NewConfig returns a new Config with the default values filled in. // NewConfig returns a new Config with the default values filled in.
+14 -21
View File
@@ -64,7 +64,7 @@ func Create(ctx context.Context, cfg Config) (*Local, error) {
for _, d := range be.Paths() { for _, d := range be.Paths() {
err := fs.MkdirAll(d, backend.Modes.Dir) err := fs.MkdirAll(d, backend.Modes.Dir)
if err != nil { if err != nil {
return nil, errors.WithStack(err) return nil, errors.Wrap(err, "MkdirAll")
} }
} }
@@ -78,7 +78,7 @@ func (b *Local) Location() string {
// IsNotExist returns true if the error is caused by a non existing file. // IsNotExist returns true if the error is caused by a non existing file.
func (b *Local) IsNotExist(err error) bool { func (b *Local) IsNotExist(err error) bool {
return errors.Is(err, os.ErrNotExist) return os.IsNotExist(errors.Cause(err))
} }
// Save stores data in the backend at the handle. // Save stores data in the backend at the handle.
@@ -114,14 +114,14 @@ func (b *Local) Save(ctx context.Context, h restic.Handle, rd restic.RewindReade
} }
if err != nil { if err != nil {
return errors.WithStack(err) return errors.Wrap(err, "OpenFile")
} }
// save data, then sync // save data, then sync
wbytes, err := io.Copy(f, rd) wbytes, err := io.Copy(f, rd)
if err != nil { if err != nil {
_ = f.Close() _ = f.Close()
return errors.WithStack(err) return errors.Wrap(err, "Write")
} }
// sanity check // sanity check
if wbytes != rd.Length() { if wbytes != rd.Length() {
@@ -135,13 +135,13 @@ func (b *Local) Save(ctx context.Context, h restic.Handle, rd restic.RewindReade
// ignore error if filesystem does not support the sync operation // ignore error if filesystem does not support the sync operation
if !isNotSupported { if !isNotSupported {
_ = f.Close() _ = f.Close()
return errors.WithStack(err) return errors.Wrap(err, "Sync")
} }
} }
err = f.Close() err = f.Close()
if err != nil { if err != nil {
return errors.WithStack(err) return errors.Wrap(err, "Close")
} }
// try to mark file as read-only to avoid accidential modifications // try to mark file as read-only to avoid accidential modifications
@@ -149,7 +149,7 @@ func (b *Local) Save(ctx context.Context, h restic.Handle, rd restic.RewindReade
// e.g. exfat and network file systems with certain mount options // e.g. exfat and network file systems with certain mount options
err = setFileReadonly(filename, backend.Modes.File) err = setFileReadonly(filename, backend.Modes.File)
if err != nil && !os.IsPermission(err) { if err != nil && !os.IsPermission(err) {
return errors.WithStack(err) return errors.Wrap(err, "Chmod")
} }
return nil return nil
@@ -202,7 +202,7 @@ func (b *Local) Stat(ctx context.Context, h restic.Handle) (restic.FileInfo, err
fi, err := fs.Stat(b.Filename(h)) fi, err := fs.Stat(b.Filename(h))
if err != nil { if err != nil {
return restic.FileInfo{}, errors.WithStack(err) return restic.FileInfo{}, errors.Wrap(err, "Stat")
} }
return restic.FileInfo{Size: fi.Size(), Name: h.Name}, nil return restic.FileInfo{Size: fi.Size(), Name: h.Name}, nil
@@ -213,10 +213,10 @@ func (b *Local) Test(ctx context.Context, h restic.Handle) (bool, error) {
debug.Log("Test %v", h) debug.Log("Test %v", h)
_, err := fs.Stat(b.Filename(h)) _, err := fs.Stat(b.Filename(h))
if err != nil { if err != nil {
if b.IsNotExist(err) { if os.IsNotExist(errors.Cause(err)) {
return false, nil return false, nil
} }
return false, errors.WithStack(err) return false, errors.Wrap(err, "Stat")
} }
return true, nil return true, nil
@@ -230,7 +230,7 @@ func (b *Local) Remove(ctx context.Context, h restic.Handle) error {
// reset read-only flag // reset read-only flag
err := fs.Chmod(fn, 0666) err := fs.Chmod(fn, 0666)
if err != nil && !os.IsPermission(err) { if err != nil && !os.IsPermission(err) {
return errors.WithStack(err) return errors.Wrap(err, "Chmod")
} }
return fs.Remove(fn) return fs.Remove(fn)
@@ -245,7 +245,7 @@ func (b *Local) List(ctx context.Context, t restic.FileType, fn func(restic.File
if subdirs { if subdirs {
err = visitDirs(ctx, basedir, fn) err = visitDirs(ctx, basedir, fn)
} else { } else {
err = visitFiles(ctx, basedir, fn, false) err = visitFiles(ctx, basedir, fn)
} }
if b.IsNotExist(err) { if b.IsNotExist(err) {
@@ -279,7 +279,7 @@ func visitDirs(ctx context.Context, dir string, fn func(restic.FileInfo) error)
} }
for _, f := range sub { for _, f := range sub {
err = visitFiles(ctx, filepath.Join(dir, f), fn, true) err = visitFiles(ctx, filepath.Join(dir, f), fn)
if err != nil { if err != nil {
return err return err
} }
@@ -287,19 +287,12 @@ func visitDirs(ctx context.Context, dir string, fn func(restic.FileInfo) error)
return ctx.Err() return ctx.Err()
} }
func visitFiles(ctx context.Context, dir string, fn func(restic.FileInfo) error, ignoreNotADirectory bool) error { func visitFiles(ctx context.Context, dir string, fn func(restic.FileInfo) error) error {
d, err := fs.Open(dir) d, err := fs.Open(dir)
if err != nil { if err != nil {
return err return err
} }
if ignoreNotADirectory {
fi, err := d.Stat()
if err != nil || !fi.IsDir() {
return err
}
}
sub, err := d.Readdir(-1) sub, err := d.Readdir(-1)
if err != nil { if err != nil {
// ignore subsequent errors // ignore subsequent errors
-48
View File
@@ -7,10 +7,8 @@ import (
"io" "io"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"net/textproto"
"net/url" "net/url"
"path" "path"
"strconv"
"strings" "strings"
"golang.org/x/net/context/ctxhttp" "golang.org/x/net/context/ctxhttp"
@@ -199,44 +197,6 @@ func (b *Backend) Load(ctx context.Context, h restic.Handle, length int, offset
return err return err
} }
// checkContentLength returns an error if the server returned a value in the
// Content-Length header in an HTTP2 connection, but closed the connection
// before any data was sent.
//
// This is a workaround for https://github.com/golang/go/issues/46071
//
// See also https://forum.restic.net/t/http2-stream-closed-connection-reset-context-canceled/3743/10
func checkContentLength(resp *http.Response) error {
// the following code is based on
// https://github.com/golang/go/blob/b7a85e0003cedb1b48a1fd3ae5b746ec6330102e/src/net/http/h2_bundle.go#L8646
if resp.ContentLength != 0 {
return nil
}
if resp.ProtoMajor != 2 && resp.ProtoMinor != 0 {
return nil
}
if len(resp.Header[textproto.CanonicalMIMEHeaderKey("Content-Length")]) != 1 {
return nil
}
// make sure that if the server returned a content length and we can
// parse it, it is really zero, otherwise return an error
contentLength := resp.Header.Get("Content-Length")
cl, err := strconv.ParseUint(contentLength, 10, 63)
if err != nil {
return fmt.Errorf("unable to parse Content-Length %q: %w", contentLength, err)
}
if cl != 0 {
return errors.Errorf("unexpected EOF: got 0 instead of %v bytes", cl)
}
return nil
}
func (b *Backend) openReader(ctx context.Context, h restic.Handle, length int, offset int64) (io.ReadCloser, error) { func (b *Backend) openReader(ctx context.Context, h restic.Handle, length int, offset int64) (io.ReadCloser, error) {
debug.Log("Load %v, length %v, offset %v", h, length, offset) debug.Log("Load %v, length %v, offset %v", h, length, offset)
if err := h.Valid(); err != nil { if err := h.Valid(); err != nil {
@@ -286,14 +246,6 @@ func (b *Backend) openReader(ctx context.Context, h restic.Handle, length int, o
return nil, errors.Errorf("unexpected HTTP response (%v): %v", resp.StatusCode, resp.Status) return nil, errors.Errorf("unexpected HTTP response (%v): %v", resp.StatusCode, resp.Status)
} }
// workaround https://github.com/golang/go/issues/46071
// see also https://forum.restic.net/t/http2-stream-closed-connection-reset-context-canceled/3743/10
err = checkContentLength(resp)
if err != nil {
_ = resp.Body.Close()
return nil, err
}
return resp.Body, nil return resp.Body, nil
} }
@@ -1,94 +0,0 @@
// +build go1.14
package rest_test
import (
"context"
"io"
"io/ioutil"
"net/http"
"net/http/httptest"
"net/url"
"testing"
"github.com/restic/restic/internal/backend/rest"
"github.com/restic/restic/internal/restic"
)
func TestZeroLengthRead(t *testing.T) {
// Test workaround for https://github.com/golang/go/issues/46071. Can be removed once this is fixed in Go
// and the minimum golang version supported by restic includes the fix.
numRequests := 0
srv := httptest.NewUnstartedServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
numRequests++
t.Logf("req %v %v", req.Method, req.URL.Path)
if req.Method == "GET" {
res.Header().Set("Content-Length", "42")
// Now the handler fails for some reason and is unable to send data
return
}
t.Errorf("unhandled request %v %v", req.Method, req.URL.Path)
}))
srv.EnableHTTP2 = true
srv.StartTLS()
defer srv.Close()
srvURL, err := url.Parse(srv.URL)
if err != nil {
t.Fatal(err)
}
cfg := rest.Config{
Connections: 5,
URL: srvURL,
}
be, err := rest.Open(cfg, srv.Client().Transport)
if err != nil {
t.Fatal(err)
}
defer func() {
err = be.Close()
if err != nil {
t.Fatal(err)
}
}()
err = be.Load(context.TODO(), restic.Handle{Type: restic.ConfigFile}, 0, 0, func(rd io.Reader) error {
_, err := ioutil.ReadAll(rd)
if err == nil {
t.Fatal("ReadAll should have returned an 'Unexpected EOF' error")
}
return nil
})
if err == nil {
t.Fatal("Got no unexpected EOF error")
}
}
func TestGolangZeroLengthRead(t *testing.T) {
// This test is intended to fail once the underlying issue has been fixed in Go
ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Length", "42")
// Now the handler fails for some reason and is unable to send data
}))
ts.EnableHTTP2 = true
ts.StartTLS()
defer ts.Close()
res, err := ts.Client().Get(ts.URL)
if err != nil {
t.Fatal(err)
}
_, err = ioutil.ReadAll(res.Body)
defer func() {
err = res.Body.Close()
if err != nil {
t.Fatal(err)
}
}()
if err != nil {
// This should fail with an 'Unexpected EOF' error
t.Fatal(err)
}
}

Some files were not shown because too many files have changed in this diff Show More