diff --git a/cmd/restic/cmd_backup.go b/cmd/restic/cmd_backup.go index 43ef29ba2..eaca150d9 100644 --- a/cmd/restic/cmd_backup.go +++ b/cmd/restic/cmd_backup.go @@ -529,21 +529,11 @@ func runBackup(ctx context.Context, opts BackupOptions, gopts GlobalOptions, ter } bar := newIndexTerminalProgress(gopts.Quiet, gopts.JSON, term) - err = repo.LoadIndex(ctx, bar) if err != nil { return err } - selectByNameFilter := func(item string) bool { - for _, reject := range rejectByNameFuncs { - if reject(item) { - return false - } - } - return true - } - var targetFS fs.FS = fs.Local{} if runtime.GOOS == "windows" && opts.UseFsSnapshot { if err = fs.HasSufficientPrivilegesForVSS(); err != nil { @@ -592,14 +582,8 @@ func runBackup(ctx context.Context, opts BackupOptions, gopts GlobalOptions, ter return err } - selectFilter := func(item string, fi os.FileInfo, fs fs.FS) bool { - for _, reject := range rejectFuncs { - if reject(item, fi, fs) { - return false - } - } - return true - } + selectByNameFilter := archiver.CombineRejectByNames(rejectByNameFuncs) + selectFilter := archiver.CombineRejects(rejectFuncs) wg, wgCtx := errgroup.WithContext(ctx) cancelCtx, cancel := context.WithCancel(wgCtx) diff --git a/internal/archiver/exclude.go b/internal/archiver/exclude.go index 62e4ea17e..280322f3c 100644 --- a/internal/archiver/exclude.go +++ b/internal/archiver/exclude.go @@ -24,6 +24,28 @@ type RejectByNameFunc func(path string) bool // should be excluded (rejected) from the backup. type RejectFunc func(path string, fi os.FileInfo, fs fs.FS) bool +func CombineRejectByNames(funcs []RejectByNameFunc) SelectByNameFunc { + return func(item string) bool { + for _, reject := range funcs { + if reject(item) { + return false + } + } + return true + } +} + +func CombineRejects(funcs []RejectFunc) SelectFunc { + return func(item string, fi os.FileInfo, fs fs.FS) bool { + for _, reject := range funcs { + if reject(item, fi, fs) { + return false + } + } + return true + } +} + type rejectionCache struct { m map[string]bool mtx sync.Mutex