mirror of
https://github.com/restic/restic.git
synced 2024-12-21 23:33:03 +00:00
archiver: deduplicate error filtering
This commit is contained in:
parent
1133498ef8
commit
f8031561f2
1 changed files with 12 additions and 21 deletions
|
@ -435,6 +435,13 @@ func (arch *Archiver) save(ctx context.Context, snPath, target string, previous
|
||||||
return futureNode{}, false, err
|
return futureNode{}, false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filterError := func(err error) (futureNode, bool, error) {
|
||||||
|
err = arch.error(abstarget, err)
|
||||||
|
if err != nil {
|
||||||
|
return futureNode{}, false, errors.WithStack(err)
|
||||||
|
}
|
||||||
|
return futureNode{}, true, nil
|
||||||
|
}
|
||||||
// exclude files by path before running Lstat to reduce number of lstat calls
|
// exclude files by path before running Lstat to reduce number of lstat calls
|
||||||
if !arch.SelectByName(abstarget) {
|
if !arch.SelectByName(abstarget) {
|
||||||
debug.Log("%v is excluded by path", target)
|
debug.Log("%v is excluded by path", target)
|
||||||
|
@ -445,11 +452,7 @@ func (arch *Archiver) save(ctx context.Context, snPath, target string, previous
|
||||||
fi, err := arch.FS.Lstat(target)
|
fi, err := arch.FS.Lstat(target)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
debug.Log("lstat() for %v returned error: %v", target, err)
|
debug.Log("lstat() for %v returned error: %v", target, err)
|
||||||
err = arch.error(abstarget, err)
|
return filterError(err)
|
||||||
if err != nil {
|
|
||||||
return futureNode{}, false, errors.WithStack(err)
|
|
||||||
}
|
|
||||||
return futureNode{}, true, nil
|
|
||||||
}
|
}
|
||||||
if !arch.Select(abstarget, fi, arch.FS) {
|
if !arch.Select(abstarget, fi, arch.FS) {
|
||||||
debug.Log("%v is excluded", target)
|
debug.Log("%v is excluded", target)
|
||||||
|
@ -497,33 +500,21 @@ func (arch *Archiver) save(ctx context.Context, snPath, target string, previous
|
||||||
file, err := arch.FS.OpenFile(target, fs.O_RDONLY|fs.O_NOFOLLOW, 0)
|
file, err := arch.FS.OpenFile(target, fs.O_RDONLY|fs.O_NOFOLLOW, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
debug.Log("Openfile() for %v returned error: %v", target, err)
|
debug.Log("Openfile() for %v returned error: %v", target, err)
|
||||||
err = arch.error(abstarget, err)
|
return filterError(err)
|
||||||
if err != nil {
|
|
||||||
return futureNode{}, false, errors.WithStack(err)
|
|
||||||
}
|
|
||||||
return futureNode{}, true, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fi, err = file.Stat()
|
fi, err = file.Stat()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
debug.Log("stat() on opened file %v returned error: %v", target, err)
|
debug.Log("stat() on opened file %v returned error: %v", target, err)
|
||||||
_ = file.Close()
|
_ = file.Close()
|
||||||
err = arch.error(abstarget, err)
|
return filterError(err)
|
||||||
if err != nil {
|
|
||||||
return futureNode{}, false, errors.WithStack(err)
|
|
||||||
}
|
|
||||||
return futureNode{}, true, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// make sure it's still a file
|
// make sure it's still a file
|
||||||
if !fi.Mode().IsRegular() {
|
if !fi.Mode().IsRegular() {
|
||||||
err = errors.Errorf("file %v changed type, refusing to archive", fi.Name())
|
err = errors.Errorf("file %v changed type, refusing to archive", target)
|
||||||
_ = file.Close()
|
_ = file.Close()
|
||||||
err = arch.error(abstarget, err)
|
return filterError(err)
|
||||||
if err != nil {
|
|
||||||
return futureNode{}, false, err
|
|
||||||
}
|
|
||||||
return futureNode{}, true, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save will close the file, we don't need to do that
|
// Save will close the file, we don't need to do that
|
||||||
|
|
Loading…
Reference in a new issue