mirror of
https://github.com/restic/restic.git
synced 2025-08-26 09:28:01 +00:00
backup: convert reject funcs to use FS interface
Depending on parameters the paths in a snapshot do not directly correspond to real paths on the filesystem. Therefore, reject funcs must use the FS interface to work correctly.
This commit is contained in:
@@ -25,7 +25,7 @@ type SelectByNameFunc func(item string) bool
|
||||
|
||||
// SelectFunc returns true for all items that should be included (files and
|
||||
// dirs). If false is returned, files are ignored and dirs are not even walked.
|
||||
type SelectFunc func(item string, fi os.FileInfo) bool
|
||||
type SelectFunc func(item string, fi os.FileInfo, fs fs.FS) bool
|
||||
|
||||
// ErrorFunc is called when an error during archiving occurs. When nil is
|
||||
// returned, the archiver continues, otherwise it aborts and passes the error
|
||||
@@ -178,12 +178,12 @@ func (o Options) ApplyDefaults() Options {
|
||||
}
|
||||
|
||||
// New initializes a new archiver.
|
||||
func New(repo archiverRepo, fs fs.FS, opts Options) *Archiver {
|
||||
func New(repo archiverRepo, filesystem fs.FS, opts Options) *Archiver {
|
||||
arch := &Archiver{
|
||||
Repo: repo,
|
||||
SelectByName: func(_ string) bool { return true },
|
||||
Select: func(_ string, _ os.FileInfo) bool { return true },
|
||||
FS: fs,
|
||||
Select: func(_ string, _ os.FileInfo, _ fs.FS) bool { return true },
|
||||
FS: filesystem,
|
||||
Options: opts.ApplyDefaults(),
|
||||
|
||||
CompleteItem: func(string, *restic.Node, *restic.Node, ItemStats, time.Duration) {},
|
||||
@@ -448,7 +448,7 @@ func (arch *Archiver) save(ctx context.Context, snPath, target string, previous
|
||||
}
|
||||
return futureNode{}, true, nil
|
||||
}
|
||||
if !arch.Select(abstarget, fi) {
|
||||
if !arch.Select(abstarget, fi, arch.FS) {
|
||||
debug.Log("%v is excluded", target)
|
||||
return futureNode{}, true, nil
|
||||
}
|
||||
|
@@ -1529,7 +1529,7 @@ func TestArchiverSnapshotSelect(t *testing.T) {
|
||||
},
|
||||
"other": TestFile{Content: "another file"},
|
||||
},
|
||||
selFn: func(item string, fi os.FileInfo) bool {
|
||||
selFn: func(item string, fi os.FileInfo, _ fs.FS) bool {
|
||||
return true
|
||||
},
|
||||
},
|
||||
@@ -1546,7 +1546,7 @@ func TestArchiverSnapshotSelect(t *testing.T) {
|
||||
},
|
||||
"other": TestFile{Content: "another file"},
|
||||
},
|
||||
selFn: func(item string, fi os.FileInfo) bool {
|
||||
selFn: func(item string, fi os.FileInfo, _ fs.FS) bool {
|
||||
return false
|
||||
},
|
||||
err: "snapshot is empty",
|
||||
@@ -1573,7 +1573,7 @@ func TestArchiverSnapshotSelect(t *testing.T) {
|
||||
},
|
||||
"other": TestFile{Content: "another file"},
|
||||
},
|
||||
selFn: func(item string, fi os.FileInfo) bool {
|
||||
selFn: func(item string, fi os.FileInfo, _ fs.FS) bool {
|
||||
return filepath.Ext(item) != ".txt"
|
||||
},
|
||||
},
|
||||
@@ -1597,8 +1597,8 @@ func TestArchiverSnapshotSelect(t *testing.T) {
|
||||
},
|
||||
"other": TestFile{Content: "another file"},
|
||||
},
|
||||
selFn: func(item string, fi os.FileInfo) bool {
|
||||
return filepath.Base(item) != "subdir"
|
||||
selFn: func(item string, fi os.FileInfo, fs fs.FS) bool {
|
||||
return fs.Base(item) != "subdir"
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -1606,8 +1606,8 @@ func TestArchiverSnapshotSelect(t *testing.T) {
|
||||
src: TestDir{
|
||||
"foo": TestFile{Content: "foo"},
|
||||
},
|
||||
selFn: func(item string, fi os.FileInfo) bool {
|
||||
return filepath.IsAbs(item)
|
||||
selFn: func(item string, fi os.FileInfo, fs fs.FS) bool {
|
||||
return fs.IsAbs(item)
|
||||
},
|
||||
},
|
||||
}
|
||||
|
@@ -22,11 +22,11 @@ type Scanner struct {
|
||||
}
|
||||
|
||||
// NewScanner initializes a new Scanner.
|
||||
func NewScanner(fs fs.FS) *Scanner {
|
||||
func NewScanner(filesystem fs.FS) *Scanner {
|
||||
return &Scanner{
|
||||
FS: fs,
|
||||
FS: filesystem,
|
||||
SelectByName: func(_ string) bool { return true },
|
||||
Select: func(_ string, _ os.FileInfo) bool { return true },
|
||||
Select: func(_ string, _ os.FileInfo, _ fs.FS) bool { return true },
|
||||
Error: func(_ string, err error) error { return err },
|
||||
Result: func(_ string, _ ScanStats) {},
|
||||
}
|
||||
@@ -115,7 +115,7 @@ func (s *Scanner) scan(ctx context.Context, stats ScanStats, target string) (Sca
|
||||
}
|
||||
|
||||
// run remaining select functions that require file information
|
||||
if !s.Select(target, fi) {
|
||||
if !s.Select(target, fi, s.FS) {
|
||||
return stats, nil
|
||||
}
|
||||
|
||||
|
@@ -56,7 +56,7 @@ func TestScanner(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
selFn: func(item string, fi os.FileInfo) bool {
|
||||
selFn: func(item string, fi os.FileInfo, fs fs.FS) bool {
|
||||
if fi.IsDir() {
|
||||
return true
|
||||
}
|
||||
|
Reference in New Issue
Block a user