package models
import (
+ "fmt"
"path"
"strings"
"time"
Message string
}
+var (
+ ErrRepoFileNotLoaded = fmt.Errorf("repo file not loaded")
+)
+
type RepoFile struct {
*git.TreeEntry
Path string
Message string
Created time.Time
Size int64
+ Repo *git.Repository
+}
+
+func (file *RepoFile) LookupBlob() (*git.Blob, error) {
+ if file.Repo == nil {
+ return nil, ErrRepoFileNotLoaded
+ }
+
+ return file.Repo.LookupBlob(file.Id)
}
func GetBranches(userName, reposName string) ([]string, error) {
lastCommit.Message(),
lastCommit.Committer.When,
size,
+ repo,
})
case git.FileModeTree:
repodirs = append(repodirs, &RepoFile{
lastCommit.Message(),
lastCommit.Committer.When,
size,
+ repo,
})
}
}
--- /dev/null
+// Copyright 2014 The Gogs Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package base
+
+import (
+ "github.com/slene/blackfriday"
+)
+
+func RenderMarkdown(rawBytes []byte) []byte {
+ htmlFlags := 0
+ htmlFlags |= blackfriday.HTML_USE_XHTML
+ // htmlFlags |= blackfriday.HTML_USE_SMARTYPANTS
+ // htmlFlags |= blackfriday.HTML_SMARTYPANTS_FRACTIONS
+ // htmlFlags |= blackfriday.HTML_SMARTYPANTS_LATEX_DASHES
+ htmlFlags |= blackfriday.HTML_SKIP_HTML
+ htmlFlags |= blackfriday.HTML_SKIP_STYLE
+ htmlFlags |= blackfriday.HTML_SKIP_SCRIPT
+ htmlFlags |= blackfriday.HTML_GITHUB_BLOCKCODE
+ htmlFlags |= blackfriday.HTML_OMIT_CONTENTS
+ htmlFlags |= blackfriday.HTML_COMPLETE_PAGE
+ renderer := blackfriday.HtmlRenderer(htmlFlags, "", "")
+
+ // set up the parser
+ extensions := 0
+ extensions |= blackfriday.EXTENSION_NO_INTRA_EMPHASIS
+ extensions |= blackfriday.EXTENSION_TABLES
+ extensions |= blackfriday.EXTENSION_FENCED_CODE
+ extensions |= blackfriday.EXTENSION_AUTOLINK
+ extensions |= blackfriday.EXTENSION_STRIKETHROUGH
+ extensions |= blackfriday.EXTENSION_HARD_LINE_BREAK
+ extensions |= blackfriday.EXTENSION_SPACE_HEADERS
+ extensions |= blackfriday.EXTENSION_NO_EMPTY_LINE_BEFORE_BLOCK
+
+ body := blackfriday.Markdown(rawBytes, renderer, extensions)
+
+ return body
+}
"strings"
"github.com/codegangsta/martini"
- // "github.com/slene/blackfriday"
+
+ "github.com/gogits/git"
"github.com/gogits/gogs/models"
+ "github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/middleware"
)
params["branchname"] = "master"
}
- // Directory and file list.
+ // Get tree path
treename := params["_1"]
+
+ // Directory and file list.
files, err := models.GetReposFiles(params["username"], params["reponame"],
params["branchname"], treename)
if err != nil {
- ctx.Handle(200, "repo.Single", err)
+ ctx.Render.Error(404)
return
}
ctx.Data["Username"] = params["username"]
// Branches.
brs, err := models.GetBranches(params["username"], params["reponame"])
if err != nil {
- ctx.Handle(200, "repo.Single", err)
+ ctx.Render.Error(404)
return
}
ctx.Data["Branches"] = brs
}
}
- // Latest commit.
+ // Get latest commit according username and repo name
commit, err := models.GetLastestCommit(params["username"], params["reponame"])
if err != nil {
- ctx.Handle(200, "repo.Single", err)
+ ctx.Render.Error(404)
return
}
ctx.Data["LatestCommit"] = commit
- // README.
- // for _, f := range files {
- // if f.Name == "README.md" {
- // ctx.Data["ReadmeName"] = "README.md"
- // ctx.Data["ReadmeContent"] =
- // break
- // }
- // }
+ var readmeFile *models.RepoFile
+
+ for _, f := range files {
+ if !f.IsFile() {
+ continue
+ }
+
+ if len(f.Name) < 6 {
+ continue
+ }
+
+ if strings.ToLower(f.Name[:6]) == "readme" {
+ readmeFile = f
+ break
+ }
+ }
+
+ if readmeFile != nil {
+ // if file large than 1M not show it
+ if readmeFile.Size > 1024*1024 || readmeFile.Filemode != git.FileModeBlob {
+ ctx.Data["FileIsLarge"] = true
+ } else if blob, err := readmeFile.LookupBlob(); err != nil {
+ ctx.Data["FileIsLarge"] = true
+ } else {
+ ctx.Data["ReadmeContent"] = string(base.RenderMarkdown(blob.Contents()))
+ }
+ }
ctx.Data["Paths"] = Paths
ctx.Data["Treenames"] = treenames
<div class="panel-heading file-head">
<i class="icon fa fa-book"></i> README.md
</div>
- <div class="panel-body file-body markdown">
- markdown content
- </div>
+ {{if .FileIsLarge}}
+ <div class="panel-footer">
+ Large file size 1000kb
+ </div>
+ {{else}}
+ <div class="panel-body file-body markdown">
+ {{.ReadmeContent|str2html}}
+ </div>
+ {{end}}
</div>
</div>
</div>