summaryrefslogtreecommitdiffstats
path: root/routers/repo
diff options
context:
space:
mode:
authorDuncan Ogilvie <mr.exodia.tpodt@gmail.com>2017-11-29 02:50:39 +0100
committerLunny Xiao <xiaolunwen@gmail.com>2017-11-29 09:50:39 +0800
commit551f3cbe420dcb72bcb784205451d5b01b811041 (patch)
tree612c505d8f46972a598e1ca118cba45c775f329d /routers/repo
parent4035ab05fa2d2c8ec95d346fea91cab8211dab17 (diff)
downloadgitea-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.go3
-rw-r--r--routers/repo/editor.go9
-rw-r--r--routers/repo/issue.go3
-rw-r--r--routers/repo/view.go29
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()