Merge pull request #4400 from MichaelEischer/rest-handle-missing-dirs

rest: Ignore missing directories
This commit is contained in:
Michael Eischer 2023-07-14 23:29:37 +02:00 committed by GitHub
commit 594689db32
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 5 deletions

View file

@ -0,0 +1,8 @@
Bugfix: Ignore missing folders in REST backend
If a repository accessed via the REST backend was missing folders, then restic
would fail with an error while trying to list the data in the repository. This
has been fixed.
https://github.com/restic/restic/pull/4400
https://github.com/restic/rest-server/issues/235

View file

@ -147,7 +147,7 @@ func (b *Backend) Save(ctx context.Context, h restic.Handle, rd restic.RewindRea
return errors.WithStack(err)
}
if resp.StatusCode != 200 {
if resp.StatusCode != http.StatusOK {
return errors.Errorf("server response unexpected: %v (%v)", resp.Status, resp.StatusCode)
}
@ -229,7 +229,7 @@ func (b *Backend) openReader(ctx context.Context, h restic.Handle, length int, o
return nil, &notExistError{h}
}
if resp.StatusCode != 200 && resp.StatusCode != 206 {
if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusPartialContent {
_ = resp.Body.Close()
return nil, errors.Errorf("unexpected HTTP response (%v): %v", resp.StatusCode, resp.Status)
}
@ -260,7 +260,7 @@ func (b *Backend) Stat(ctx context.Context, h restic.Handle) (restic.FileInfo, e
return restic.FileInfo{}, &notExistError{h}
}
if resp.StatusCode != 200 {
if resp.StatusCode != http.StatusOK {
return restic.FileInfo{}, errors.Errorf("unexpected HTTP response (%v): %v", resp.StatusCode, resp.Status)
}
@ -295,7 +295,7 @@ func (b *Backend) Remove(ctx context.Context, h restic.Handle) error {
return &notExistError{h}
}
if resp.StatusCode != 200 {
if resp.StatusCode != http.StatusOK {
return errors.Errorf("blob not removed, server response: %v (%v)", resp.Status, resp.StatusCode)
}
@ -327,7 +327,12 @@ func (b *Backend) List(ctx context.Context, t restic.FileType, fn func(restic.Fi
return errors.Wrap(err, "List")
}
if resp.StatusCode != 200 {
if resp.StatusCode == http.StatusNotFound {
// ignore missing directories
return nil
}
if resp.StatusCode != http.StatusOK {
return errors.Errorf("List failed, server response: %v (%v)", resp.Status, resp.StatusCode)
}