diff options
author | Duncan Ogilvie <mr.exodia.tpodt@gmail.com> | 2017-11-29 02:50:39 +0100 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2017-11-29 09:50:39 +0800 |
commit | 551f3cbe420dcb72bcb784205451d5b01b811041 (patch) | |
tree | 612c505d8f46972a598e1ca118cba45c775f329d /routers/repo | |
parent | 4035ab05fa2d2c8ec95d346fea91cab8211dab17 (diff) | |
download | gitea-551f3cbe420dcb72bcb784205451d5b01b811041.tar.gz gitea-551f3cbe420dcb72bcb784205451d5b01b811041.zip |
Memory usage improvements (#3013)
* govendor update code.gitea.io/git
Signed-off-by: Duncan Ogilvie <mr.exodia.tpodt@gmail.com>
* Greatly improve memory usage
Signed-off-by: Duncan Ogilvie <mr.exodia.tpodt@gmail.com>
Diffstat (limited to 'routers/repo')
-rw-r--r-- | routers/repo/download.go | 3 | ||||
-rw-r--r-- | routers/repo/editor.go | 9 | ||||
-rw-r--r-- | routers/repo/issue.go | 3 | ||||
-rw-r--r-- | routers/repo/view.go | 29 |
4 files changed, 31 insertions, 13 deletions
diff --git a/routers/repo/download.go b/routers/repo/download.go index 78c6088607..78c4b519be 100644 --- a/routers/repo/download.go +++ b/routers/repo/download.go @@ -45,10 +45,11 @@ func ServeData(ctx *context.Context, name string, reader io.Reader) error { // ServeBlob download a git.Blob func ServeBlob(ctx *context.Context, blob *git.Blob) error { - dataRc, err := blob.Data() + dataRc, err := blob.DataAsync() if err != nil { return err } + defer dataRc.Close() return ServeData(ctx, ctx.Repo.TreePath, dataRc) } diff --git a/routers/repo/editor.go b/routers/repo/editor.go index a6cc922364..82b04a84d2 100644 --- a/routers/repo/editor.go +++ b/routers/repo/editor.go @@ -73,11 +73,16 @@ func editFile(ctx *context.Context, isNewFile bool) { // No way to edit a directory online. if entry.IsDir() { - ctx.Handle(404, "", nil) + ctx.Handle(404, "entry.IsDir", nil) return } blob := entry.Blob() + if blob.Size() >= setting.UI.MaxDisplayFileSize { + ctx.Handle(404, "blob.Size", err) + return + } + dataRc, err := blob.Data() if err != nil { ctx.Handle(404, "blob.Data", err) @@ -93,7 +98,7 @@ func editFile(ctx *context.Context, isNewFile bool) { // Only text file are editable online. if !base.IsTextFile(buf) { - ctx.Handle(404, "", nil) + ctx.Handle(404, "base.IsTextFile", nil) return } diff --git a/routers/repo/issue.go b/routers/repo/issue.go index c24a4e4360..b45d521e5b 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -319,6 +319,9 @@ func getFileContentFromDefaultBranch(ctx *context.Context, filename string) (str if err != nil { return "", false } + if entry.Blob().Size() >= setting.UI.MaxDisplayFileSize { + return "", false + } r, err = entry.Blob().Data() if err != nil { return "", false diff --git a/routers/repo/view.go b/routers/repo/view.go index d43b4d7f78..a02acb0d6c 100644 --- a/routers/repo/view.go +++ b/routers/repo/view.go @@ -76,11 +76,12 @@ func renderDirectory(ctx *context.Context, treeLink string) { ctx.Data["ReadmeInList"] = true ctx.Data["ReadmeExist"] = true - dataRc, err := readmeFile.Data() + dataRc, err := readmeFile.DataAsync() if err != nil { ctx.Handle(500, "Data", err) return } + defer dataRc.Close() buf := make([]byte, 1024) n, _ := dataRc.Read(buf) @@ -91,14 +92,21 @@ func renderDirectory(ctx *context.Context, treeLink string) { ctx.Data["FileName"] = readmeFile.Name() // FIXME: what happens when README file is an image? if isTextFile { - d, _ := ioutil.ReadAll(dataRc) - buf = append(buf, d...) - if markup.Type(readmeFile.Name()) != "" { - ctx.Data["IsMarkup"] = true - ctx.Data["FileContent"] = string(markup.Render(readmeFile.Name(), buf, treeLink, ctx.Repo.Repository.ComposeMetas())) + if readmeFile.Size() >= setting.UI.MaxDisplayFileSize { + // Pretend that this is a normal text file to display 'This file is too large to be shown' + ctx.Data["IsFileTooLarge"] = true + ctx.Data["IsTextFile"] = true + ctx.Data["FileSize"] = readmeFile.Size() } else { - ctx.Data["IsRenderedHTML"] = true - ctx.Data["FileContent"] = string(bytes.Replace(buf, []byte("\n"), []byte(`<br>`), -1)) + d, _ := ioutil.ReadAll(dataRc) + buf = append(buf, d...) + if markup.Type(readmeFile.Name()) != "" { + ctx.Data["IsMarkup"] = true + ctx.Data["FileContent"] = string(markup.Render(readmeFile.Name(), buf, treeLink, ctx.Repo.Repository.ComposeMetas())) + } else { + ctx.Data["IsRenderedHTML"] = true + ctx.Data["FileContent"] = string(bytes.Replace(buf, []byte("\n"), []byte(`<br>`), -1)) + } } } } @@ -135,11 +143,12 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st ctx.Data["IsViewFile"] = true blob := entry.Blob() - dataRc, err := blob.Data() + dataRc, err := blob.DataAsync() if err != nil { - ctx.Handle(500, "Data", err) + ctx.Handle(500, "DataAsync", err) return } + defer dataRc.Close() ctx.Data["FileSize"] = blob.Size() ctx.Data["FileName"] = blob.Name() |