Skip to content

Commit 1e68927

Browse files
committed
Adapt to changed Download signature
1 parent 0dc603b commit 1e68927

File tree

1 file changed

+44
-13
lines changed

1 file changed

+44
-13
lines changed

pkg/storage/utils/localfs/localfs.go

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,25 +1045,42 @@ func (fs *localfs) listShareFolderRoot(ctx context.Context, home string, mdKeys
10451045
return finfos, nil
10461046
}
10471047

1048-
func (fs *localfs) Download(ctx context.Context, ref *provider.Reference) (io.ReadCloser, error) {
1048+
func (fs *localfs) Download(ctx context.Context, ref *provider.Reference, openReaderfunc func(*provider.ResourceInfo) bool) (*provider.ResourceInfo, io.ReadCloser, error) {
10491049
fn, err := fs.resolve(ctx, ref)
10501050
if err != nil {
1051-
return nil, errors.Wrap(err, "localfs: error resolving ref")
1051+
return nil, nil, errors.Wrap(err, "localfs: error resolving ref")
10521052
}
10531053

10541054
if fs.isShareFolder(ctx, fn) {
1055-
return nil, errtypes.PermissionDenied("localfs: cannot download under the virtual share folder")
1055+
return nil, nil, errtypes.PermissionDenied("localfs: cannot download under the virtual share folder")
10561056
}
10571057

10581058
fn = fs.wrap(ctx, fn)
1059+
md, err := os.Stat(fn)
1060+
if err != nil {
1061+
if os.IsNotExist(err) {
1062+
return nil, nil, errtypes.NotFound(fn)
1063+
}
1064+
return nil, nil, errors.Wrap(err, "localfs: error stating "+fn)
1065+
}
1066+
1067+
ri, err := fs.normalize(ctx, md, fn, []string{"size", "mimetype", "etag"})
1068+
if err != nil {
1069+
return nil, nil, err
1070+
}
1071+
1072+
if !openReaderfunc(ri) {
1073+
return ri, nil, nil
1074+
}
1075+
10591076
r, err := os.Open(fn)
10601077
if err != nil {
10611078
if os.IsNotExist(err) {
1062-
return nil, errtypes.NotFound(fn)
1079+
return nil, nil, errtypes.NotFound(fn)
10631080
}
1064-
return nil, errors.Wrap(err, "localfs: error reading "+fn)
1081+
return nil, nil, errors.Wrap(err, "localfs: error reading "+fn)
10651082
}
1066-
return r, nil
1083+
return ri, r, nil
10671084
}
10681085

10691086
func (fs *localfs) archiveRevision(ctx context.Context, np string) error {
@@ -1117,28 +1134,42 @@ func (fs *localfs) ListRevisions(ctx context.Context, ref *provider.Reference) (
11171134
return revisions, nil
11181135
}
11191136

1120-
func (fs *localfs) DownloadRevision(ctx context.Context, ref *provider.Reference, revisionKey string) (io.ReadCloser, error) {
1137+
func (fs *localfs) DownloadRevision(ctx context.Context, ref *provider.Reference, revisionKey string, openReaderfunc func(*provider.ResourceInfo) bool) (*provider.ResourceInfo, io.ReadCloser, error) {
11211138
np, err := fs.resolve(ctx, ref)
11221139
if err != nil {
1123-
return nil, errors.Wrap(err, "localfs: error resolving ref")
1140+
return nil, nil, errors.Wrap(err, "localfs: error resolving ref")
11241141
}
11251142

11261143
if fs.isShareFolder(ctx, np) {
1127-
return nil, errtypes.PermissionDenied("localfs: cannot download revisions under the virtual share folder")
1144+
return nil, nil, errtypes.PermissionDenied("localfs: cannot download revisions under the virtual share folder")
11281145
}
11291146

11301147
versionsDir := fs.wrapVersions(ctx, np)
11311148
vp := path.Join(versionsDir, revisionKey)
11321149

1133-
r, err := os.Open(vp)
1150+
md, err := os.Stat(vp)
11341151
if err != nil {
11351152
if os.IsNotExist(err) {
1136-
return nil, errtypes.NotFound(vp)
1153+
return nil, nil, errtypes.NotFound(vp)
11371154
}
1138-
return nil, errors.Wrap(err, "localfs: error reading "+vp)
1155+
return nil, nil, errors.Wrap(err, "localfs: error stating "+vp)
1156+
}
1157+
1158+
ri, err := fs.normalize(ctx, md, vp, []string{"size", "mimetype", "etag"})
1159+
if err != nil {
1160+
return nil, nil, err
1161+
}
1162+
1163+
if !openReaderfunc(ri) {
1164+
return ri, nil, nil
1165+
}
1166+
1167+
r, err := os.Open(vp)
1168+
if err != nil {
1169+
return nil, nil, errors.Wrap(err, "localfs: error reading "+vp)
11391170
}
11401171

1141-
return r, nil
1172+
return ri, r, nil
11421173
}
11431174

11441175
func (fs *localfs) RestoreRevision(ctx context.Context, ref *provider.Reference, revisionKey string) error {

0 commit comments

Comments
 (0)