Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace ServeStream with ServeContent #20903

Merged
merged 7 commits into from
Aug 25, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 1 addition & 17 deletions modules/context/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -358,14 +358,7 @@ func (ctx *Context) SetServeHeaders(filename string) {
}

// ServeContent serves content to http request
func (ctx *Context) ServeContent(name string, r io.ReadSeeker, params ...interface{}) {
modTime := time.Now()
for _, p := range params {
switch v := p.(type) {
case time.Time:
modTime = v
}
}
func (ctx *Context) ServeContent(name string, r io.ReadSeeker, modTime time.Time) {
ctx.SetServeHeaders(name)
http.ServeContent(ctx.Resp, ctx.Req, name, modTime, r)
}
Expand All @@ -382,15 +375,6 @@ func (ctx *Context) ServeFile(file string, names ...string) {
http.ServeFile(ctx.Resp, ctx.Req, file)
}

// ServeStream serves file via io stream
func (ctx *Context) ServeStream(rd io.Reader, name string) {
ctx.SetServeHeaders(name)
_, err := io.Copy(ctx.Resp, rd)
if err != nil {
ctx.ServerError("Download file failed", err)
}
}

// UploadStream returns the request body or the first form file
// Only form files need to get closed.
func (ctx *Context) UploadStream() (rd io.ReadCloser, needToClose bool, err error) {
Expand Down
6 changes: 6 additions & 0 deletions modules/timeutil/timestamp.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@ func (ts TimeStamp) AsTime() (tm time.Time) {
return ts.AsTimeInLocation(setting.DefaultUILocation)
}

// AsLocalTime convert timestamp as time.Time in local location
func (ts TimeStamp) AsLocalTime() (tm time.Time) {
tm = time.Unix(int64(ts), 0)
return tm
KN4CK3R marked this conversation as resolved.
Show resolved Hide resolved
}

// AsTimeInLocation convert timestamp as time.Time in Local locale
func (ts TimeStamp) AsTimeInLocation(loc *time.Location) (tm time.Time) {
tm = time.Unix(int64(ts), 0).In(loc)
Expand Down
2 changes: 1 addition & 1 deletion routers/api/packages/composer/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ func createPackageMetadataResponse(registryURL string, pds []*packages_model.Pac
Name: pd.Package.Name,
Version: pd.Version.Version,
Type: packageType,
Created: time.Unix(int64(pd.Version.CreatedUnix), 0),
Created: pd.Version.CreatedUnix.AsLocalTime(),
Metadata: pd.Metadata.(*composer_module.Metadata),
Dist: Dist{
Type: "zip",
Expand Down
2 changes: 1 addition & 1 deletion routers/api/packages/composer/composer.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ func DownloadPackageFile(ctx *context.Context) {
}
defer s.Close()

ctx.ServeStream(s, pf.Name)
ctx.ServeContent(pf.Name, s, pf.CreatedUnix.AsLocalTime())
}

// UploadPackage creates a new package
Expand Down
8 changes: 4 additions & 4 deletions routers/api/packages/conan/conan.go
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,7 @@ func downloadFile(ctx *context.Context, fileFilter stringSet, fileKey string) {
}
defer s.Close()

ctx.ServeStream(s, pf.Name)
ctx.ServeContent(pf.Name, s, pf.CreatedUnix.AsLocalTime())
}

// DeleteRecipeV1 deletes the requested recipe(s)
Expand Down Expand Up @@ -723,7 +723,7 @@ func listRevisions(ctx *context.Context, revisions []*conan_model.PropertyValue)

revs := make([]*revisionInfo, 0, len(revisions))
for _, rev := range revisions {
revs = append(revs, &revisionInfo{Revision: rev.Value, Time: time.Unix(int64(rev.CreatedUnix), 0)})
revs = append(revs, &revisionInfo{Revision: rev.Value, Time: rev.CreatedUnix.AsLocalTime()})
}

jsonResponse(ctx, http.StatusOK, &RevisionList{revs})
Expand All @@ -743,7 +743,7 @@ func LatestRecipeRevision(ctx *context.Context) {
return
}

jsonResponse(ctx, http.StatusOK, &revisionInfo{Revision: revision.Value, Time: time.Unix(int64(revision.CreatedUnix), 0)})
jsonResponse(ctx, http.StatusOK, &revisionInfo{Revision: revision.Value, Time: revision.CreatedUnix.AsLocalTime()})
}

// LatestPackageRevision gets the latest package revision
Expand All @@ -760,7 +760,7 @@ func LatestPackageRevision(ctx *context.Context) {
return
}

jsonResponse(ctx, http.StatusOK, &revisionInfo{Revision: revision.Value, Time: time.Unix(int64(revision.CreatedUnix), 0)})
jsonResponse(ctx, http.StatusOK, &revisionInfo{Revision: revision.Value, Time: revision.CreatedUnix.AsLocalTime()})
}

// ListRecipeRevisionFiles gets a list of all recipe revision files
Expand Down
2 changes: 1 addition & 1 deletion routers/api/packages/generic/generic.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func DownloadPackageFile(ctx *context.Context) {
}
defer s.Close()

ctx.ServeStream(s, pf.Name)
ctx.ServeContent(pf.Name, s, pf.CreatedUnix.AsLocalTime())
}

// UploadPackage uploads the specific generic package.
Expand Down
2 changes: 1 addition & 1 deletion routers/api/packages/helm/helm.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ func DownloadPackageFile(ctx *context.Context) {
}
defer s.Close()

ctx.ServeStream(s, pf.Name)
ctx.ServeContent(pf.Name, s, pf.CreatedUnix.AsLocalTime())
}

// UploadPackage creates a new package
Expand Down
2 changes: 1 addition & 1 deletion routers/api/packages/maven/maven.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ func servePackageFile(ctx *context.Context, params parameters) {
}
}

ctx.ServeStream(s, pf.Name)
ctx.ServeContent(pf.Name, s, pf.CreatedUnix.AsLocalTime())
}

// UploadPackageFile adds a file to the package. If the package does not exist, it gets created.
Expand Down
2 changes: 1 addition & 1 deletion routers/api/packages/npm/npm.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ func DownloadPackageFile(ctx *context.Context) {
}
defer s.Close()

ctx.ServeStream(s, pf.Name)
ctx.ServeContent(pf.Name, s, pf.CreatedUnix.AsLocalTime())
}

// UploadPackage creates a new package
Expand Down
2 changes: 1 addition & 1 deletion routers/api/packages/nuget/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ func createRegistrationLeafResponse(l *linkBuilder, pd *packages_model.PackageDe
return &RegistrationLeafResponse{
Type: []string{"Package", "http://schema.nuget.org/catalog#Permalink"},
Listed: true,
Published: time.Unix(int64(pd.Version.CreatedUnix), 0),
Published: pd.Version.CreatedUnix.AsLocalTime(),
RegistrationLeafURL: l.GetRegistrationLeafURL(pd.Package.Name, pd.Version.Version),
PackageContentURL: l.GetPackageDownloadURL(pd.Package.Name, pd.Version.Version),
RegistrationIndexURL: l.GetRegistrationIndexURL(pd.Package.Name),
Expand Down
6 changes: 3 additions & 3 deletions routers/api/packages/nuget/nuget.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ func DownloadPackageFile(ctx *context.Context) {
}
defer s.Close()

ctx.ServeStream(s, pf.Name)
ctx.ServeContent(pf.Name, s, pf.CreatedUnix.AsLocalTime())
}

// UploadPackage creates a new package with the metadata contained in the uploaded nupgk file
Expand Down Expand Up @@ -378,7 +378,7 @@ func DownloadSymbolFile(ctx *context.Context) {
return
}

s, _, err := packages_service.GetPackageFileStream(ctx, pfs[0])
s, pf, err := packages_service.GetPackageFileStream(ctx, pfs[0])
if err != nil {
if err == packages_model.ErrPackageNotExist || err == packages_model.ErrPackageFileNotExist {
apiError(ctx, http.StatusNotFound, err)
Expand All @@ -389,7 +389,7 @@ func DownloadSymbolFile(ctx *context.Context) {
}
defer s.Close()

ctx.ServeStream(s, pfs[0].Name)
ctx.ServeContent(pf.Name, s, pf.CreatedUnix.AsLocalTime())
}

// DeletePackage hard deletes the package
Expand Down
4 changes: 2 additions & 2 deletions routers/api/packages/pub/pub.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func packageDescriptorToMetadata(baseURL string, pd *packages_model.PackageDescr
return &versionMetadata{
Version: pd.Version.Version,
ArchiveURL: fmt.Sprintf("%s/files/%s.tar.gz", baseURL, url.PathEscape(pd.Version.Version)),
Published: time.Unix(int64(pd.Version.CreatedUnix), 0),
Published: pd.Version.CreatedUnix.AsLocalTime(),
Pubspec: pd.Metadata.(*pub_module.Metadata).Pubspec,
}
}
Expand Down Expand Up @@ -271,5 +271,5 @@ func DownloadPackageFile(ctx *context.Context) {
}
defer s.Close()

ctx.ServeStream(s, pf.Name)
ctx.ServeContent(pf.Name, s, pf.CreatedUnix.AsLocalTime())
}
2 changes: 1 addition & 1 deletion routers/api/packages/pypi/pypi.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ func DownloadPackageFile(ctx *context.Context) {
}
defer s.Close()

ctx.ServeStream(s, pf.Name)
ctx.ServeContent(pf.Name, s, pf.CreatedUnix.AsLocalTime())
}

// UploadPackageFile adds a file to the package. If the package does not exist, it gets created.
Expand Down
2 changes: 1 addition & 1 deletion routers/api/packages/rubygems/rubygems.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ func DownloadPackageFile(ctx *context.Context) {
}
defer s.Close()

ctx.ServeStream(s, pf.Name)
ctx.ServeContent(pf.Name, s, pf.CreatedUnix.AsLocalTime())
}

// UploadPackageFile adds a file to the package. If the package does not exist, it gets created.
Expand Down
3 changes: 2 additions & 1 deletion routers/web/repo/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -467,7 +467,8 @@ func download(ctx *context.Context, archiveName string, archiver *repo_model.Rep
return
}
defer fr.Close()
ctx.ServeStream(fr, downloadName)

ctx.ServeContent(downloadName, fr, archiver.CreatedUnix.AsLocalTime())
}

// InitiateDownload will enqueue an archival request, as needed. It may submit
Expand Down
2 changes: 1 addition & 1 deletion routers/web/user/package.go
Original file line number Diff line number Diff line change
Expand Up @@ -393,5 +393,5 @@ func DownloadPackageFile(ctx *context.Context) {
}
defer s.Close()

ctx.ServeStream(s, pf.Name)
ctx.ServeContent(pf.Name, s, pf.CreatedUnix.AsLocalTime())
}
8 changes: 4 additions & 4 deletions services/packages/packages.go
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,7 @@ func Cleanup(unused context.Context, olderThan time.Duration) error {
}

// GetFileStreamByPackageNameAndVersion returns the content of the specific package file
func GetFileStreamByPackageNameAndVersion(ctx context.Context, pvi *PackageInfo, pfi *PackageFileInfo) (io.ReadCloser, *packages_model.PackageFile, error) {
func GetFileStreamByPackageNameAndVersion(ctx context.Context, pvi *PackageInfo, pfi *PackageFileInfo) (io.ReadSeekCloser, *packages_model.PackageFile, error) {
log.Trace("Getting package file stream: %v, %v, %s, %s, %s, %s", pvi.Owner.ID, pvi.PackageType, pvi.Name, pvi.Version, pfi.Filename, pfi.CompositeKey)

pv, err := packages_model.GetVersionByNameAndVersion(ctx, pvi.Owner.ID, pvi.PackageType, pvi.Name, pvi.Version)
Expand All @@ -418,7 +418,7 @@ func GetFileStreamByPackageNameAndVersion(ctx context.Context, pvi *PackageInfo,
}

// GetFileStreamByPackageVersionAndFileID returns the content of the specific package file
func GetFileStreamByPackageVersionAndFileID(ctx context.Context, owner *user_model.User, versionID, fileID int64) (io.ReadCloser, *packages_model.PackageFile, error) {
func GetFileStreamByPackageVersionAndFileID(ctx context.Context, owner *user_model.User, versionID, fileID int64) (io.ReadSeekCloser, *packages_model.PackageFile, error) {
log.Trace("Getting package file stream: %v, %v, %v", owner.ID, versionID, fileID)

pv, err := packages_model.GetVersionByID(ctx, versionID)
Expand Down Expand Up @@ -449,7 +449,7 @@ func GetFileStreamByPackageVersionAndFileID(ctx context.Context, owner *user_mod
}

// GetFileStreamByPackageVersion returns the content of the specific package file
func GetFileStreamByPackageVersion(ctx context.Context, pv *packages_model.PackageVersion, pfi *PackageFileInfo) (io.ReadCloser, *packages_model.PackageFile, error) {
func GetFileStreamByPackageVersion(ctx context.Context, pv *packages_model.PackageVersion, pfi *PackageFileInfo) (io.ReadSeekCloser, *packages_model.PackageFile, error) {
pf, err := packages_model.GetFileForVersionByName(ctx, pv.ID, pfi.Filename, pfi.CompositeKey)
if err != nil {
return nil, nil, err
Expand All @@ -459,7 +459,7 @@ func GetFileStreamByPackageVersion(ctx context.Context, pv *packages_model.Packa
}

// GetPackageFileStream returns the content of the specific package file
func GetPackageFileStream(ctx context.Context, pf *packages_model.PackageFile) (io.ReadCloser, *packages_model.PackageFile, error) {
func GetPackageFileStream(ctx context.Context, pf *packages_model.PackageFile) (io.ReadSeekCloser, *packages_model.PackageFile, error) {
pb, err := packages_model.GetBlobByID(ctx, pf.BlobID)
if err != nil {
return nil, nil, err
Expand Down