diff --git a/lib/get_file.go b/lib/get_file.go index 404b93a..2d45bc4 100644 --- a/lib/get_file.go +++ b/lib/get_file.go @@ -25,7 +25,7 @@ type Info struct { var ErrNotFound = errors.New("404 not found") -func (f *Forgejo) getFile(ctx context.Context, user, repo, branch, file string) (info Info, content io.Reader, err error) { +func (f *Forgejo) getFile(ctx context.Context, user, repo, branch, file string) (info Info, content io.ReadCloser, err error) { u := f.Server u.Path = "/api/v1/repos/" + user + "/" + repo + "/raw/" + file p := u.Query() @@ -55,7 +55,7 @@ func (f *Forgejo) getFile(ctx context.Context, user, repo, branch, file string) return } -func (f *Forgejo) GetFile(ctx context.Context, user, repo, branch, file string) (info Info, content io.Reader, err error) { +func (f *Forgejo) GetFile(ctx context.Context, user, repo, branch, file string) (info Info, content io.ReadCloser, err error) { info, content, err = f.getFile(ctx, user, repo, branch, file) if err != nil { return @@ -67,6 +67,7 @@ func (f *Forgejo) GetFile(ctx context.Context, user, repo, branch, file string) if err != nil { return } + content.Close() if bytes.HasPrefix(data, []byte("/")) { err = ErrNotFound return diff --git a/lib/web.go b/lib/web.go index a4a3129..d2d225b 100644 --- a/lib/web.go +++ b/lib/web.go @@ -49,6 +49,7 @@ func (f *Forgejo) handle(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNotFound) return } + defer content.Close() trySet(w.Header(), "Etag", info.ETag) trySet(w.Header(), "Last-Modified", info.LastModified)