forked from TrueCloudLab/restic
Report errors, ignore files and continue. Closes #108
This commit is contained in:
parent
1bb82afcf6
commit
71a57537ef
2 changed files with 23 additions and 4 deletions
25
archiver.go
25
archiver.go
|
@ -395,7 +395,12 @@ func (arch *Archiver) fileWorker(wg *sync.WaitGroup, p *Progress, done <-chan st
|
||||||
// check for errors
|
// check for errors
|
||||||
if e.Error() != nil {
|
if e.Error() != nil {
|
||||||
debug.Log("Archiver.fileWorker", "job %v has errors: %v", e.Path(), e.Error())
|
debug.Log("Archiver.fileWorker", "job %v has errors: %v", e.Path(), e.Error())
|
||||||
panic(e.Error())
|
// TODO: integrate error reporting
|
||||||
|
fmt.Fprintf(os.Stderr, "error for %v: %v\n", e.Path(), e.Error())
|
||||||
|
// ignore this file
|
||||||
|
e.Result() <- nil
|
||||||
|
p.Report(Stat{Files: 1})
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
node, err := NodeFromFileInfo(e.Fullpath(), e.Info())
|
node, err := NodeFromFileInfo(e.Fullpath(), e.Info())
|
||||||
|
@ -432,7 +437,12 @@ func (arch *Archiver) fileWorker(wg *sync.WaitGroup, p *Progress, done <-chan st
|
||||||
debug.Log("Archiver.fileWorker", " read and save %v, content: %v", e.Path(), node.Content)
|
debug.Log("Archiver.fileWorker", " read and save %v, content: %v", e.Path(), node.Content)
|
||||||
node.blobs, err = arch.SaveFile(p, node)
|
node.blobs, err = arch.SaveFile(p, node)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
// TODO: integrate error reporting
|
||||||
|
fmt.Fprintf(os.Stderr, "error for %v: %v\n", node.path, err)
|
||||||
|
// ignore this file
|
||||||
|
e.Result() <- nil
|
||||||
|
p.Report(Stat{Files: 1})
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// report old data size
|
// report old data size
|
||||||
|
@ -467,7 +477,16 @@ func (arch *Archiver) dirWorker(wg *sync.WaitGroup, p *Progress, done <-chan str
|
||||||
|
|
||||||
// wait for all content
|
// wait for all content
|
||||||
for _, ch := range dir.Entries {
|
for _, ch := range dir.Entries {
|
||||||
node := (<-ch).(*Node)
|
res := <-ch
|
||||||
|
|
||||||
|
// if we get a nil pointer here, an error has happened while
|
||||||
|
// processing this entry. Ignore it for now.
|
||||||
|
if res == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// else insert node
|
||||||
|
node := res.(*Node)
|
||||||
tree.Insert(node)
|
tree.Insert(node)
|
||||||
|
|
||||||
if node.Type == "dir" {
|
if node.Type == "dir" {
|
||||||
|
|
|
@ -130,7 +130,7 @@ func walk(basedir, dir string, done chan struct{}, jobs chan<- Job, res chan<- R
|
||||||
fi, err := os.Lstat(subpath)
|
fi, err := os.Lstat(subpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
select {
|
select {
|
||||||
case jobs <- Entry{info: fi, error: err, result: ch}:
|
case jobs <- Entry{info: fi, error: err, basedir: basedir, path: filepath.Join(relpath, name), result: ch}:
|
||||||
case <-done:
|
case <-done:
|
||||||
return errCancelled
|
return errCancelled
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue