forked from TrueCloudLab/restic
parent
e68a7fea8a
commit
a95eb33616
1 changed files with 43 additions and 4 deletions
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -11,6 +12,7 @@ import (
|
||||||
|
|
||||||
"github.com/restic/restic/internal/checker"
|
"github.com/restic/restic/internal/checker"
|
||||||
"github.com/restic/restic/internal/errors"
|
"github.com/restic/restic/internal/errors"
|
||||||
|
"github.com/restic/restic/internal/fs"
|
||||||
"github.com/restic/restic/internal/restic"
|
"github.com/restic/restic/internal/restic"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -117,15 +119,52 @@ func newReadProgress(gopts GlobalOptions, todo restic.Stat) *restic.Progress {
|
||||||
return readProgress
|
return readProgress
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// prepareCheckCache configures a special cache directory for check.
|
||||||
|
//
|
||||||
|
// * if --with-cache is specified, the default cache is used
|
||||||
|
// * if the user explicitely requested --no-cache, we don't use any cache
|
||||||
|
// * by default, we use a cache in a temporary directory that is deleted after the check
|
||||||
|
func prepareCheckCache(opts CheckOptions, gopts *GlobalOptions) (cleanup func()) {
|
||||||
|
cleanup = func() {}
|
||||||
|
if opts.WithCache {
|
||||||
|
// use the default cache, no setup needed
|
||||||
|
return cleanup
|
||||||
|
}
|
||||||
|
|
||||||
|
if gopts.NoCache {
|
||||||
|
// don't use any cache, no setup needed
|
||||||
|
return cleanup
|
||||||
|
}
|
||||||
|
|
||||||
|
// use a cache in a temporary directory
|
||||||
|
tempdir, err := ioutil.TempDir("", "restic-check-cache-")
|
||||||
|
if err != nil {
|
||||||
|
// if an error occurs, don't use any cache
|
||||||
|
Warnf("unable to create temporary directory for cache during check, disabling cache: %v\n", err)
|
||||||
|
gopts.NoCache = true
|
||||||
|
return cleanup
|
||||||
|
}
|
||||||
|
|
||||||
|
gopts.CacheDir = tempdir
|
||||||
|
Verbosef("using temporary cache in %v\n", tempdir)
|
||||||
|
|
||||||
|
cleanup = func() {
|
||||||
|
err := fs.RemoveAll(tempdir)
|
||||||
|
if err != nil {
|
||||||
|
Warnf("error removing temporary cache directory: %v\n", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cleanup
|
||||||
|
}
|
||||||
|
|
||||||
func runCheck(opts CheckOptions, gopts GlobalOptions, args []string) error {
|
func runCheck(opts CheckOptions, gopts GlobalOptions, args []string) error {
|
||||||
if len(args) != 0 {
|
if len(args) != 0 {
|
||||||
return errors.Fatal("check has no arguments")
|
return errors.Fatal("check has no arguments")
|
||||||
}
|
}
|
||||||
|
|
||||||
if !opts.WithCache {
|
cleanup := prepareCheckCache(opts, &gopts)
|
||||||
// do not use a cache for the checker
|
defer cleanup()
|
||||||
gopts.NoCache = true
|
|
||||||
}
|
|
||||||
|
|
||||||
repo, err := OpenRepository(gopts)
|
repo, err := OpenRepository(gopts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Add table
Reference in a new issue