diff --git a/pkg/storage/fs/owncloudsql/owncloudsql.go b/pkg/storage/fs/owncloudsql/owncloudsql.go index 4307f6044b1..27ca42436bf 100644 --- a/pkg/storage/fs/owncloudsql/owncloudsql.go +++ b/pkg/storage/fs/owncloudsql/owncloudsql.go @@ -1433,40 +1433,35 @@ func (fs *ocfs) ListRevisions(ctx context.Context, ref *provider.Reference) ([]* vp := fs.getVersionsPath(ctx, ip) bn := filepath.Base(ip) - - revisions := []*provider.FileVersion{} - mds, err := ioutil.ReadDir(filepath.Dir(vp)) + storageID, err := fs.getStorage(ip) if err != nil { - return nil, errors.Wrap(err, "owncloudsql: error reading"+filepath.Dir(vp)) + return nil, err } - for i := range mds { - rev := fs.filterAsRevision(ctx, bn, mds[i]) - if rev != nil { - revisions = append(revisions, rev) - } + entries, err := fs.filecache.List(storageID, filepath.Dir(fs.toDatabasePath(vp))+"/") + if err != nil { + return nil, err } - return revisions, nil -} - -func (fs *ocfs) filterAsRevision(ctx context.Context, bn string, md os.FileInfo) *provider.FileVersion { - if strings.HasPrefix(md.Name(), bn) { - // versions have filename.ext.v12345678 - version := md.Name()[len(bn)+2:] // truncate ".v" to get version mtime - mtime, err := strconv.Atoi(version) - if err != nil { - log := appctx.GetLogger(ctx) - log.Error().Err(err).Str("path", md.Name()).Msg("invalid version mtime") - return nil - } - // TODO(jfd) trashed versions are in the files_trashbin/versions folder ... not relevant here - return &provider.FileVersion{ - Key: version, - Size: uint64(md.Size()), - Mtime: uint64(mtime), - Etag: calcEtag(ctx, md), + revisions := []*provider.FileVersion{} + for _, entry := range entries { + if strings.HasPrefix(entry.Name, bn) { + // versions have filename.ext.v12345678 + version := entry.Name[len(bn)+2:] // truncate ".v" to get version mtime + mtime, err := strconv.Atoi(version) + if err != nil { + log := appctx.GetLogger(ctx) + log.Error().Err(err).Str("path", entry.Name).Msg("invalid version mtime") + return nil, err + } + revisions = append(revisions, &provider.FileVersion{ + Key: version, + Size: uint64(entry.Size), + Mtime: uint64(mtime), + Etag: entry.Etag, + }) } } - return nil + + return revisions, nil } func (fs *ocfs) DownloadRevision(ctx context.Context, ref *provider.Reference, revisionKey string) (io.ReadCloser, error) {