mirror of
https://github.com/restic/restic.git
synced 2025-12-14 02:57:04 +00:00
backup: only pass error log function to helpers
This commit is contained in:
@@ -28,7 +28,6 @@ import (
|
|||||||
"github.com/restic/restic/internal/textfile"
|
"github.com/restic/restic/internal/textfile"
|
||||||
"github.com/restic/restic/internal/ui"
|
"github.com/restic/restic/internal/ui"
|
||||||
"github.com/restic/restic/internal/ui/backup"
|
"github.com/restic/restic/internal/ui/backup"
|
||||||
"github.com/restic/restic/internal/ui/progress"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func newBackupCommand() *cobra.Command {
|
func newBackupCommand() *cobra.Command {
|
||||||
@@ -161,11 +160,11 @@ var ErrInvalidSourceData = errors.New("at least one source file could not be rea
|
|||||||
|
|
||||||
// filterExisting returns a slice of all existing items, or an error if no
|
// filterExisting returns a slice of all existing items, or an error if no
|
||||||
// items exist at all.
|
// items exist at all.
|
||||||
func filterExisting(items []string, printer progress.Printer) (result []string, err error) {
|
func filterExisting(items []string, warnf func(msg string, args ...interface{})) (result []string, err error) {
|
||||||
for _, item := range items {
|
for _, item := range items {
|
||||||
_, err := fs.Lstat(item)
|
_, err := fs.Lstat(item)
|
||||||
if errors.Is(err, os.ErrNotExist) {
|
if errors.Is(err, os.ErrNotExist) {
|
||||||
printer.E("%v does not exist, skipping\n", item)
|
warnf("%v does not exist, skipping\n", item)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,7 +305,7 @@ func (opts BackupOptions) Check(gopts GlobalOptions, args []string) error {
|
|||||||
|
|
||||||
// collectRejectByNameFuncs returns a list of all functions which may reject data
|
// collectRejectByNameFuncs returns a list of all functions which may reject data
|
||||||
// from being saved in a snapshot based on path only
|
// from being saved in a snapshot based on path only
|
||||||
func collectRejectByNameFuncs(opts BackupOptions, repo *repository.Repository, printer progress.Printer) (fs []archiver.RejectByNameFunc, err error) {
|
func collectRejectByNameFuncs(opts BackupOptions, repo *repository.Repository, warnf func(msg string, args ...interface{})) (fs []archiver.RejectByNameFunc, err error) {
|
||||||
// exclude restic cache
|
// exclude restic cache
|
||||||
if repo.Cache() != nil {
|
if repo.Cache() != nil {
|
||||||
f, err := rejectResticCache(repo)
|
f, err := rejectResticCache(repo)
|
||||||
@@ -317,7 +316,7 @@ func collectRejectByNameFuncs(opts BackupOptions, repo *repository.Repository, p
|
|||||||
fs = append(fs, f)
|
fs = append(fs, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
fsPatterns, err := opts.ExcludePatternOptions.CollectPatterns(printer.E)
|
fsPatterns, err := opts.ExcludePatternOptions.CollectPatterns(warnf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -330,7 +329,7 @@ func collectRejectByNameFuncs(opts BackupOptions, repo *repository.Repository, p
|
|||||||
|
|
||||||
// collectRejectFuncs returns a list of all functions which may reject data
|
// collectRejectFuncs returns a list of all functions which may reject data
|
||||||
// from being saved in a snapshot based on path and file info
|
// from being saved in a snapshot based on path and file info
|
||||||
func collectRejectFuncs(opts BackupOptions, targets []string, fs fs.FS, printer progress.Printer) (funcs []archiver.RejectFunc, err error) {
|
func collectRejectFuncs(opts BackupOptions, targets []string, fs fs.FS, warnf func(msg string, args ...interface{})) (funcs []archiver.RejectFunc, err error) {
|
||||||
// allowed devices
|
// allowed devices
|
||||||
if opts.ExcludeOtherFS && !opts.Stdin && !opts.StdinCommand {
|
if opts.ExcludeOtherFS && !opts.Stdin && !opts.StdinCommand {
|
||||||
f, err := archiver.RejectByDevice(targets, fs)
|
f, err := archiver.RejectByDevice(targets, fs)
|
||||||
@@ -357,7 +356,7 @@ func collectRejectFuncs(opts BackupOptions, targets []string, fs fs.FS, printer
|
|||||||
if runtime.GOOS != "windows" {
|
if runtime.GOOS != "windows" {
|
||||||
return nil, errors.Fatalf("exclude-cloud-files is only supported on Windows")
|
return nil, errors.Fatalf("exclude-cloud-files is only supported on Windows")
|
||||||
}
|
}
|
||||||
f, err := archiver.RejectCloudFiles(printer.E)
|
f, err := archiver.RejectCloudFiles(warnf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -369,7 +368,7 @@ func collectRejectFuncs(opts BackupOptions, targets []string, fs fs.FS, printer
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, spec := range opts.ExcludeIfPresent {
|
for _, spec := range opts.ExcludeIfPresent {
|
||||||
f, err := archiver.RejectIfPresent(spec, printer.E)
|
f, err := archiver.RejectIfPresent(spec, warnf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -381,7 +380,7 @@ func collectRejectFuncs(opts BackupOptions, targets []string, fs fs.FS, printer
|
|||||||
}
|
}
|
||||||
|
|
||||||
// collectTargets returns a list of target files/dirs from several sources.
|
// collectTargets returns a list of target files/dirs from several sources.
|
||||||
func collectTargets(opts BackupOptions, args []string, printer progress.Printer) (targets []string, err error) {
|
func collectTargets(opts BackupOptions, args []string, warnf func(msg string, args ...interface{})) (targets []string, err error) {
|
||||||
if opts.Stdin || opts.StdinCommand {
|
if opts.Stdin || opts.StdinCommand {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
@@ -405,7 +404,7 @@ func collectTargets(opts BackupOptions, args []string, printer progress.Printer)
|
|||||||
return nil, fmt.Errorf("pattern: %s: %w", line, err)
|
return nil, fmt.Errorf("pattern: %s: %w", line, err)
|
||||||
}
|
}
|
||||||
if len(expanded) == 0 {
|
if len(expanded) == 0 {
|
||||||
printer.E("pattern %q does not match any files, skipping\n", line)
|
warnf("pattern %q does not match any files, skipping\n", line)
|
||||||
}
|
}
|
||||||
targets = append(targets, expanded...)
|
targets = append(targets, expanded...)
|
||||||
}
|
}
|
||||||
@@ -439,7 +438,7 @@ func collectTargets(opts BackupOptions, args []string, printer progress.Printer)
|
|||||||
return nil, errors.Fatal("nothing to backup, please specify source files/dirs")
|
return nil, errors.Fatal("nothing to backup, please specify source files/dirs")
|
||||||
}
|
}
|
||||||
|
|
||||||
targets, err = filterExisting(targets, printer)
|
targets, err = filterExisting(targets, warnf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -493,7 +492,7 @@ func runBackup(ctx context.Context, opts BackupOptions, gopts GlobalOptions, ter
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
targets, err := collectTargets(opts, args, msg)
|
targets, err := collectTargets(opts, args, msg.E)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -528,7 +527,7 @@ func runBackup(ctx context.Context, opts BackupOptions, gopts GlobalOptions, ter
|
|||||||
defer progressReporter.Done()
|
defer progressReporter.Done()
|
||||||
|
|
||||||
// rejectByNameFuncs collect functions that can reject items from the backup based on path only
|
// rejectByNameFuncs collect functions that can reject items from the backup based on path only
|
||||||
rejectByNameFuncs, err := collectRejectByNameFuncs(opts, repo, msg)
|
rejectByNameFuncs, err := collectRejectByNameFuncs(opts, repo, msg.E)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -607,7 +606,7 @@ func runBackup(ctx context.Context, opts BackupOptions, gopts GlobalOptions, ter
|
|||||||
}
|
}
|
||||||
|
|
||||||
// rejectFuncs collect functions that can reject items from the backup based on path and file info
|
// rejectFuncs collect functions that can reject items from the backup based on path and file info
|
||||||
rejectFuncs, err := collectRejectFuncs(opts, targets, targetFS, msg)
|
rejectFuncs, err := collectRejectFuncs(opts, targets, targetFS, msg.E)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
rtest "github.com/restic/restic/internal/test"
|
rtest "github.com/restic/restic/internal/test"
|
||||||
"github.com/restic/restic/internal/ui/progress"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCollectTargets(t *testing.T) {
|
func TestCollectTargets(t *testing.T) {
|
||||||
@@ -68,7 +67,7 @@ func TestCollectTargets(t *testing.T) {
|
|||||||
FilesFromRaw: []string{f3.Name()},
|
FilesFromRaw: []string{f3.Name()},
|
||||||
}
|
}
|
||||||
|
|
||||||
targets, err := collectTargets(opts, []string{filepath.Join(dir, "cmdline arg")}, &progress.NoopPrinter{})
|
targets, err := collectTargets(opts, []string{filepath.Join(dir, "cmdline arg")}, t.Logf)
|
||||||
rtest.OK(t, err)
|
rtest.OK(t, err)
|
||||||
sort.Strings(targets)
|
sort.Strings(targets)
|
||||||
rtest.Equals(t, expect, targets)
|
rtest.Equals(t, expect, targets)
|
||||||
|
|||||||
Reference in New Issue
Block a user