aboutsummaryrefslogtreecommitdiffstats
path: root/routers/repo/view.go
diff options
context:
space:
mode:
Diffstat (limited to 'routers/repo/view.go')
-rw-r--r--routers/repo/view.go168
1 files changed, 85 insertions, 83 deletions
diff --git a/routers/repo/view.go b/routers/repo/view.go
index bbb5e96a4a..1572bb6150 100644
--- a/routers/repo/view.go
+++ b/routers/repo/view.go
@@ -75,110 +75,112 @@ func Home(ctx *context.Context) {
}
entry, err := ctx.Repo.Commit.GetTreeEntryByPath(treename)
- if err != nil && git.IsErrNotExist(err) {
- ctx.Handle(404, "GetTreeEntryByPath", err)
+ if err != nil {
+ if git.IsErrNotExist(err) {
+ ctx.Handle(404, "GetTreeEntryByPath", err)
+ } else {
+ ctx.Handle(500, "GetTreeEntryByPath", err)
+ }
return
}
- if len(treename) != 0 && entry == nil {
- ctx.Handle(404, "repo.Home", nil)
- return
- }
- if entry != nil && !entry.IsDir() {
+ if !entry.IsDir() {
blob := entry.Blob()
-
- if dataRc, err := blob.Data(); err != nil {
+ dataRc, err := blob.Data()
+ if err != nil {
ctx.Handle(404, "blob.Data", err)
return
- } else {
- ctx.Data["FileSize"] = blob.Size()
- ctx.Data["IsFile"] = true
- ctx.Data["FileName"] = blob.Name()
- ctx.Data["HighlightClass"] = highlight.FileNameToHighlightClass(blob.Name())
- ctx.Data["FileLink"] = rawLink + "/" + treename
-
- buf := make([]byte, 1024)
- n, _ := dataRc.Read(buf)
- if n > 0 {
- buf = buf[:n]
- }
+ }
- _, isTextFile := base.IsTextFile(buf)
- _, isImageFile := base.IsImageFile(buf)
- _, isPDFFile := base.IsPDFFile(buf)
- ctx.Data["IsFileText"] = isTextFile
-
- switch {
- case isPDFFile:
- ctx.Data["IsPDFFile"] = true
- ctx.Data["FileEditLinkTooltip"] = ctx.Tr("repo.cannot_edit_binary_files")
- case isImageFile:
- ctx.Data["IsImageFile"] = true
- ctx.Data["FileEditLinkTooltip"] = ctx.Tr("repo.cannot_edit_binary_files")
- case isTextFile:
- if blob.Size() >= setting.UI.MaxDisplayFileSize {
- ctx.Data["IsFileTooLarge"] = true
- } else {
- ctx.Data["IsFileTooLarge"] = false
- d, _ := ioutil.ReadAll(dataRc)
- buf = append(buf, d...)
- readmeExist := markdown.IsMarkdownFile(blob.Name()) || markdown.IsReadmeFile(blob.Name())
- isMarkdown := readmeExist || markdown.IsMarkdownFile(blob.Name())
- ctx.Data["ReadmeExist"] = readmeExist
- ctx.Data["IsMarkdown"] = isMarkdown
- if isMarkdown {
- ctx.Data["FileContent"] = string(markdown.Render(buf, path.Dir(treeLink), ctx.Repo.Repository.ComposeMetas()))
- } else {
- // Building code view blocks with line number on server side.
- var filecontent string
- if err, content := template.ToUTF8WithErr(buf); err != nil {
- if err != nil {
- log.Error(4, "ToUTF8WithErr: %s", err)
- }
- filecontent = string(buf)
- } else {
- filecontent = content
- }
+ ctx.Data["FileSize"] = blob.Size()
+ ctx.Data["IsFile"] = true
+ ctx.Data["FileName"] = blob.Name()
+ ctx.Data["HighlightClass"] = highlight.FileNameToHighlightClass(blob.Name())
+ ctx.Data["FileLink"] = rawLink + "/" + treename
- var output bytes.Buffer
- lines := strings.Split(filecontent, "\n")
- for index, line := range lines {
- output.WriteString(fmt.Sprintf(`<li class="L%d" rel="L%d">%s</li>`, index+1, index+1, gotemplate.HTMLEscapeString(line)) + "\n")
- }
- ctx.Data["FileContent"] = gotemplate.HTML(output.String())
+ buf := make([]byte, 1024)
+ n, _ := dataRc.Read(buf)
+ if n > 0 {
+ buf = buf[:n]
+ }
- output.Reset()
- for i := 0; i < len(lines); i++ {
- output.WriteString(fmt.Sprintf(`<span id="L%d">%d</span>`, i+1, i+1))
+ _, isTextFile := base.IsTextFile(buf)
+ _, isImageFile := base.IsImageFile(buf)
+ _, isPDFFile := base.IsPDFFile(buf)
+ ctx.Data["IsFileText"] = isTextFile
+
+ switch {
+ case isPDFFile:
+ ctx.Data["IsPDFFile"] = true
+ ctx.Data["FileEditLinkTooltip"] = ctx.Tr("repo.cannot_edit_binary_files")
+ case isImageFile:
+ ctx.Data["IsImageFile"] = true
+ ctx.Data["FileEditLinkTooltip"] = ctx.Tr("repo.cannot_edit_binary_files")
+ case isTextFile:
+ if blob.Size() >= setting.UI.MaxDisplayFileSize {
+ ctx.Data["IsFileTooLarge"] = true
+ } else {
+ ctx.Data["IsFileTooLarge"] = false
+ d, _ := ioutil.ReadAll(dataRc)
+ buf = append(buf, d...)
+ readmeExist := markdown.IsMarkdownFile(blob.Name()) || markdown.IsReadmeFile(blob.Name())
+ isMarkdown := readmeExist || markdown.IsMarkdownFile(blob.Name())
+ ctx.Data["ReadmeExist"] = readmeExist
+ ctx.Data["IsMarkdown"] = isMarkdown
+ if isMarkdown {
+ ctx.Data["FileContent"] = string(markdown.Render(buf, path.Dir(treeLink), ctx.Repo.Repository.ComposeMetas()))
+ } else {
+ // Building code view blocks with line number on server side.
+ var filecontent string
+ if err, content := template.ToUTF8WithErr(buf); err != nil {
+ if err != nil {
+ log.Error(4, "ToUTF8WithErr: %s", err)
}
- ctx.Data["LineNums"] = gotemplate.HTML(output.String())
+ filecontent = string(buf)
+ } else {
+ filecontent = content
}
- }
- if ctx.Repo.IsWriter() && ctx.Repo.IsViewBranch {
- ctx.Data["FileEditLink"] = editLink + "/" + treename
- ctx.Data["FileEditLinkTooltip"] = ctx.Tr("repo.edit_this_file")
- } else {
- if !ctx.Repo.IsViewBranch {
- ctx.Data["FileEditLinkTooltip"] = ctx.Tr("repo.must_be_on_branch")
- } else if !ctx.Repo.IsWriter() {
- ctx.Data["FileEditLink"] = forkLink
- ctx.Data["FileEditLinkTooltip"] = ctx.Tr("repo.fork_before_edit")
+
+ var output bytes.Buffer
+ lines := strings.Split(filecontent, "\n")
+ for index, line := range lines {
+ output.WriteString(fmt.Sprintf(`<li class="L%d" rel="L%d">%s</li>`, index+1, index+1, gotemplate.HTMLEscapeString(line)) + "\n")
}
+ ctx.Data["FileContent"] = gotemplate.HTML(output.String())
+
+ output.Reset()
+ for i := 0; i < len(lines); i++ {
+ output.WriteString(fmt.Sprintf(`<span id="L%d">%d</span>`, i+1, i+1))
+ }
+ ctx.Data["LineNums"] = gotemplate.HTML(output.String())
}
- default:
- ctx.Data["FileEditLinkTooltip"] = ctx.Tr("repo.cannot_edit_binary_files")
}
if ctx.Repo.IsWriter() && ctx.Repo.IsViewBranch {
- ctx.Data["FileDeleteLink"] = deleteLink + "/" + treename
- ctx.Data["FileDeleteLinkTooltip"] = ctx.Tr("repo.delete_this_file")
+ ctx.Data["FileEditLink"] = editLink + "/" + treename
+ ctx.Data["FileEditLinkTooltip"] = ctx.Tr("repo.edit_this_file")
} else {
if !ctx.Repo.IsViewBranch {
- ctx.Data["FileDeleteLinkTooltip"] = ctx.Tr("repo.must_be_on_branch")
+ ctx.Data["FileEditLinkTooltip"] = ctx.Tr("repo.must_be_on_branch")
} else if !ctx.Repo.IsWriter() {
- ctx.Data["FileDeleteLinkTooltip"] = ctx.Tr("repo.must_be_writer")
+ ctx.Data["FileEditLink"] = forkLink
+ ctx.Data["FileEditLinkTooltip"] = ctx.Tr("repo.fork_before_edit")
}
}
+ default:
+ ctx.Data["FileEditLinkTooltip"] = ctx.Tr("repo.cannot_edit_binary_files")
}
+
+ if ctx.Repo.IsWriter() && ctx.Repo.IsViewBranch {
+ ctx.Data["FileDeleteLink"] = deleteLink + "/" + treename
+ ctx.Data["FileDeleteLinkTooltip"] = ctx.Tr("repo.delete_this_file")
+ } else {
+ if !ctx.Repo.IsViewBranch {
+ ctx.Data["FileDeleteLinkTooltip"] = ctx.Tr("repo.must_be_on_branch")
+ } else if !ctx.Repo.IsWriter() {
+ ctx.Data["FileDeleteLinkTooltip"] = ctx.Tr("repo.must_be_writer")
+ }
+ }
+
} else {
// Directory and file list.
tree, err := ctx.Repo.Commit.SubTree(treename)