node: report error on xattr retrieval using standard error logging

This commit is contained in:
Michael Eischer
2025-09-21 19:24:48 +02:00
parent f2b9ea6455
commit df7924f4df
17 changed files with 30 additions and 29 deletions

View File

@@ -68,7 +68,7 @@ func (s *ItemStats) Add(other ItemStats) {
// ToNoder returns a restic.Node for a File.
type ToNoder interface {
ToNode(ignoreXattrListError bool) (*restic.Node, error)
ToNode(ignoreXattrListError bool, warnf func(format string, args ...any)) (*restic.Node, error)
}
type archiverRepo interface {
@@ -263,7 +263,9 @@ func (arch *Archiver) trackItem(item string, previous, current *restic.Node, s I
// nodeFromFileInfo returns the restic node from an os.FileInfo.
func (arch *Archiver) nodeFromFileInfo(snPath, filename string, meta ToNoder, ignoreXattrListError bool) (*restic.Node, error) {
node, err := meta.ToNode(ignoreXattrListError)
node, err := meta.ToNode(ignoreXattrListError, func(format string, args ...any) {
_ = arch.error(filename, fmt.Errorf(format, args...))
})
// node does not exist. This prevents all further processing for this file.
// If an error and a node are returned, then preserve as much data as possible (see below).
if err != nil && node == nil {

View File

@@ -551,7 +551,7 @@ func rename(t testing.TB, oldname, newname string) {
func nodeFromFile(t testing.TB, localFs fs.FS, filename string) *restic.Node {
meta, err := localFs.OpenFile(filename, fs.O_NOFOLLOW, true)
rtest.OK(t, err)
node, err := meta.ToNode(false)
node, err := meta.ToNode(false, t.Logf)
rtest.OK(t, err)
rtest.OK(t, meta.Close())
@@ -2287,9 +2287,9 @@ func (f overrideFile) MakeReadable() error {
return f.File.MakeReadable()
}
func (f overrideFile) ToNode(ignoreXattrListError bool) (*restic.Node, error) {
func (f overrideFile) ToNode(ignoreXattrListError bool, warnf func(format string, args ...any)) (*restic.Node, error) {
if f.ofs.overrideNode == nil {
return f.File.ToNode(ignoreXattrListError)
return f.File.ToNode(ignoreXattrListError, warnf)
}
return f.ofs.overrideNode, f.ofs.overrideErr
}
@@ -2321,7 +2321,7 @@ func TestMetadataChanged(t *testing.T) {
localFS := &fs.Local{}
meta, err := localFS.OpenFile("testfile", fs.O_NOFOLLOW, true)
rtest.OK(t, err)
want, err := meta.ToNode(false)
want, err := meta.ToNode(false, t.Logf)
rtest.OK(t, err)
rtest.OK(t, meta.Close())
@@ -2455,7 +2455,7 @@ type mockToNoder struct {
err error
}
func (m *mockToNoder) ToNode(_ bool) (*restic.Node, error) {
func (m *mockToNoder) ToNode(_ bool, _ func(format string, args ...any)) (*restic.Node, error) {
return m.node, m.err
}

View File

@@ -50,7 +50,7 @@ func startFileSaver(ctx context.Context, t testing.TB, _ fs.FS) (*fileSaver, con
s := newFileSaver(ctx, wg, saveBlob, pol, workers, workers)
s.NodeFromFileInfo = func(snPath, filename string, meta ToNoder, ignoreXattrListError bool) (*restic.Node, error) {
return meta.ToNode(ignoreXattrListError)
return meta.ToNode(ignoreXattrListError, t.Logf)
}
return s, ctx, wg