summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--models/git.go41
-rw-r--r--modules/base/markdown.go8
-rw-r--r--routers/repo/commit.go33
-rw-r--r--routers/repo/repo.go56
-rw-r--r--templates/repo/commits.tmpl4
-rw-r--r--templates/repo/diff.tmpl6
-rw-r--r--templates/repo/single.tmpl4
-rw-r--r--templates/repo/single_file.tmpl8
8 files changed, 113 insertions, 47 deletions
diff --git a/models/git.go b/models/git.go
index 8e1bc4e32c..e2ee52083d 100644
--- a/models/git.go
+++ b/models/git.go
@@ -38,8 +38,8 @@ func (file *RepoFile) LookupBlob() (*git.Blob, error) {
}
// GetBranches returns all branches of given repository.
-func GetBranches(userName, reposName string) ([]string, error) {
- repo, err := git.OpenRepository(RepoPath(userName, reposName))
+func GetBranches(userName, repoName string) ([]string, error) {
+ repo, err := git.OpenRepository(RepoPath(userName, repoName))
if err != nil {
return nil, err
}
@@ -56,8 +56,16 @@ func GetBranches(userName, reposName string) ([]string, error) {
return brs, nil
}
-func GetTargetFile(userName, reposName, branchName, commitId, rpath string) (*RepoFile, error) {
- repo, err := git.OpenRepository(RepoPath(userName, reposName))
+func IsBranchExist(userName, repoName, branchName string) bool {
+ repo, err := git.OpenRepository(RepoPath(userName, repoName))
+ if err != nil {
+ return false
+ }
+ return repo.IsBranchExist(branchName)
+}
+
+func GetTargetFile(userName, repoName, branchName, commitId, rpath string) (*RepoFile, error) {
+ repo, err := git.OpenRepository(RepoPath(userName, repoName))
if err != nil {
return nil, err
}
@@ -102,8 +110,8 @@ func GetTargetFile(userName, reposName, branchName, commitId, rpath string) (*Re
}
// GetReposFiles returns a list of file object in given directory of repository.
-func GetReposFiles(userName, reposName, branchName, commitId, rpath string) ([]*RepoFile, error) {
- repo, err := git.OpenRepository(RepoPath(userName, reposName))
+func GetReposFiles(userName, repoName, branchName, commitId, rpath string) ([]*RepoFile, error) {
+ repo, err := git.OpenRepository(RepoPath(userName, repoName))
if err != nil {
return nil, err
}
@@ -217,13 +225,26 @@ func GetCommit(userName, repoName, branchname, commitid string) (*git.Commit, er
return repo.GetCommit(branchname, commitid)
}
-// GetCommits returns all commits of given branch of repository.
-func GetCommits(userName, reposName, branchname string) (*list.List, error) {
- repo, err := git.OpenRepository(RepoPath(userName, reposName))
+// GetCommitsByBranch returns all commits of given branch of repository.
+func GetCommitsByBranch(userName, repoName, branchName string) (*list.List, error) {
+ repo, err := git.OpenRepository(RepoPath(userName, repoName))
+ if err != nil {
+ return nil, err
+ }
+ r, err := repo.LookupReference(fmt.Sprintf("refs/heads/%s", branchName))
+ if err != nil {
+ return nil, err
+ }
+ return r.AllCommits()
+}
+
+// GetCommitsByCommitId returns all commits of given commitId of repository.
+func GetCommitsByCommitId(userName, repoName, commitId string) (*list.List, error) {
+ repo, err := git.OpenRepository(RepoPath(userName, repoName))
if err != nil {
return nil, err
}
- r, err := repo.LookupReference(fmt.Sprintf("refs/heads/%s", branchname))
+ r, err := repo.LookupReference(commitId)
if err != nil {
return nil, err
}
diff --git a/modules/base/markdown.go b/modules/base/markdown.go
index c722f04b2e..a98ca8cf00 100644
--- a/modules/base/markdown.go
+++ b/modules/base/markdown.go
@@ -51,6 +51,14 @@ func IsTextFile(data []byte) (string, bool) {
return contentType, false
}
+func IsImageFile(data []byte) (string, bool) {
+ contentType := http.DetectContentType(data)
+ if strings.Index(contentType, "img/") != -1 {
+ return contentType, true
+ }
+ return contentType, false
+}
+
func IsReadmeFile(name string) bool {
name = strings.ToLower(name)
if len(name) < 6 {
diff --git a/routers/repo/commit.go b/routers/repo/commit.go
index 3d00f8d747..4a126d236b 100644
--- a/routers/repo/commit.go
+++ b/routers/repo/commit.go
@@ -5,13 +5,22 @@
package repo
import (
+ "container/list"
+ "fmt"
+ "path"
+
"github.com/codegangsta/martini"
+
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/middleware"
)
func Commits(ctx *middleware.Context, params martini.Params) {
- brs, err := models.GetBranches(params["username"], params["reponame"])
+ userName := params["username"]
+ repoName := params["reponame"]
+ branchName := params["branchname"]
+
+ brs, err := models.GetBranches(userName, repoName)
if err != nil {
ctx.Handle(200, "repo.Commits", err)
return
@@ -20,21 +29,28 @@ func Commits(ctx *middleware.Context, params martini.Params) {
return
}
- ctx.Data["IsRepoToolbarCommits"] = true
- commits, err := models.GetCommits(params["username"],
- params["reponame"], params["branchname"])
+ var commits *list.List
+ if models.IsBranchExist(userName, repoName, branchName) {
+ commits, err = models.GetCommitsByBranch(userName, repoName, branchName)
+ } else {
+ commits, err = models.GetCommitsByCommitId(userName, repoName, branchName)
+ }
+
if err != nil {
- ctx.Handle(404, "repo.Commits", nil)
+ ctx.Handle(404, "repo.Commits", err)
return
}
- ctx.Data["Username"] = params["username"]
- ctx.Data["Reponame"] = params["reponame"]
+
+ ctx.Data["Username"] = userName
+ ctx.Data["Reponame"] = repoName
ctx.Data["CommitCount"] = commits.Len()
ctx.Data["Commits"] = commits
+ ctx.Data["IsRepoToolbarCommits"] = true
ctx.HTML(200, "repo/commits")
}
func Diff(ctx *middleware.Context, params martini.Params) {
+ fmt.Println(params["branchname"])
commit, err := models.GetCommit(params["username"], params["reponame"], params["branchname"], params["commitid"])
if err != nil {
ctx.Handle(404, "repo.Diff", err)
@@ -47,11 +63,12 @@ func Diff(ctx *middleware.Context, params martini.Params) {
return
}
- shortSha := params["commitid"][:7]
+ shortSha := params["commitid"][:10]
ctx.Data["Title"] = commit.Message() + " ยท " + shortSha
ctx.Data["Commit"] = commit
ctx.Data["ShortSha"] = shortSha
ctx.Data["Diff"] = diff
ctx.Data["IsRepoToolbarCommits"] = true
+ ctx.Data["SourcePath"] = "/" + path.Join(params["username"], params["reponame"], "src", params["commitid"])
ctx.HTML(200, "repo/diff")
}
diff --git a/routers/repo/repo.go b/routers/repo/repo.go
index 435587472a..8c686bc3d6 100644
--- a/routers/repo/repo.go
+++ b/routers/repo/repo.go
@@ -57,19 +57,23 @@ func Single(ctx *middleware.Context, params martini.Params) {
return
}
+ branchName := params["branchname"]
+ userName := params["username"]
+ repoName := params["reponame"]
+
// Get tree path
treename := params["_1"]
if len(treename) > 0 && treename[len(treename)-1] == '/' {
ctx.Redirect("/" + ctx.Repo.Owner.LowerName + "/" +
- ctx.Repo.Repository.Name + "/src/" + params["branchname"] + "/" + treename[:len(treename)-1])
+ ctx.Repo.Repository.Name + "/src/" + branchName + "/" + treename[:len(treename)-1])
return
}
ctx.Data["IsRepoToolbarSource"] = true
// Branches.
- brs, err := models.GetBranches(params["username"], params["reponame"])
+ brs, err := models.GetBranches(userName, repoName)
if err != nil {
ctx.Handle(404, "repo.Single(GetBranches)", err)
return
@@ -80,15 +84,20 @@ func Single(ctx *middleware.Context, params martini.Params) {
}
ctx.Data["Branches"] = brs
- repoFile, err := models.GetTargetFile(params["username"], params["reponame"],
- params["branchname"], params["commitid"], treename)
+ var commitId string
+ if !models.IsBranchExist(userName, repoName, branchName) {
+ commitId = branchName
+ }
+
+ repoFile, err := models.GetTargetFile(userName, repoName,
+ branchName, commitId, treename)
if err != nil && err != models.ErrRepoFileNotExist {
ctx.Handle(404, "repo.Single(GetTargetFile)", err)
return
}
- branchLink := "/" + ctx.Repo.Owner.LowerName + "/" + ctx.Repo.Repository.Name + "/src/" + params["branchname"]
- rawLink := "/" + ctx.Repo.Owner.LowerName + "/" + ctx.Repo.Repository.Name + "/raw/" + params["branchname"]
+ branchLink := "/" + ctx.Repo.Owner.LowerName + "/" + ctx.Repo.Repository.Name + "/src/" + branchName
+ rawLink := "/" + ctx.Repo.Owner.LowerName + "/" + ctx.Repo.Repository.Name + "/raw/" + branchName
if len(treename) != 0 && repoFile == nil {
ctx.Handle(404, "repo.Single", nil)
@@ -111,23 +120,28 @@ func Single(ctx *middleware.Context, params martini.Params) {
data := blob.Contents()
_, isTextFile := base.IsTextFile(data)
+ _, isImageFile := base.IsImageFile(data)
ctx.Data["FileIsText"] = isTextFile
- readmeExist := base.IsMarkdownFile(repoFile.Name) || base.IsReadmeFile(repoFile.Name)
- ctx.Data["ReadmeExist"] = readmeExist
- if readmeExist {
- ctx.Data["FileContent"] = string(base.RenderMarkdown(data, ""))
+ if isImageFile {
+ ctx.Data["IsImageFile"] = true
} else {
- if isTextFile {
- ctx.Data["FileContent"] = string(data)
+ readmeExist := base.IsMarkdownFile(repoFile.Name) || base.IsReadmeFile(repoFile.Name)
+ ctx.Data["ReadmeExist"] = readmeExist
+ if readmeExist {
+ ctx.Data["FileContent"] = string(base.RenderMarkdown(data, ""))
+ } else {
+ if isTextFile {
+ ctx.Data["FileContent"] = string(data)
+ }
}
}
}
} else {
// Directory and file list.
- files, err := models.GetReposFiles(params["username"], params["reponame"],
- params["branchname"], params["commitid"], treename)
+ files, err := models.GetReposFiles(userName, repoName,
+ branchName, commitId, treename)
if err != nil {
ctx.Handle(404, "repo.Single(GetReposFiles)", err)
return
@@ -166,8 +180,8 @@ func Single(ctx *middleware.Context, params martini.Params) {
}
}
- ctx.Data["Username"] = params["username"]
- ctx.Data["Reponame"] = params["reponame"]
+ ctx.Data["Username"] = userName
+ ctx.Data["Reponame"] = repoName
var treenames []string
Paths := make([]string, 0)
@@ -185,8 +199,8 @@ func Single(ctx *middleware.Context, params martini.Params) {
}
// Get latest commit according username and repo name.
- commit, err := models.GetCommit(params["username"], params["reponame"],
- params["branchname"], params["commitid"])
+ commit, err := models.GetCommit(userName, repoName,
+ branchName, commitId)
if err != nil {
log.Error("repo.Single(GetCommit): %v", err)
ctx.Handle(404, "repo.Single(GetCommit)", err)
@@ -194,6 +208,8 @@ func Single(ctx *middleware.Context, params martini.Params) {
}
ctx.Data["LastCommit"] = commit
+ ctx.Data["CommitId"] = commitId
+
ctx.Data["Paths"] = Paths
ctx.Data["Treenames"] = treenames
ctx.Data["BranchLink"] = branchLink
@@ -225,9 +241,9 @@ func SingleDownload(ctx *middleware.Context, params martini.Params) {
data := blob.Contents()
contentType, isTextFile := base.IsTextFile(data)
+ _, isImageFile := base.IsImageFile(data)
ctx.Res.Header().Set("Content-Type", contentType)
- if !isTextFile {
- ctx.Res.Header().Set("Content-Type", contentType)
+ if !isTextFile && !isImageFile {
ctx.Res.Header().Set("Content-Disposition", "attachment; filename="+filepath.Base(treename))
ctx.Res.Header().Set("Content-Transfer-Encoding", "binary")
}
diff --git a/templates/repo/commits.tmpl b/templates/repo/commits.tmpl
index 2f308a108d..efe35936c4 100644
--- a/templates/repo/commits.tmpl
+++ b/templates/repo/commits.tmpl
@@ -27,7 +27,7 @@
{{range $r}}
<tr>
<td class="author"><img class="avatar" src="{{AvatarLink .Committer.Email}}" alt=""/><a href="/user/{{.Committer.Name}}">{{.Committer.Name}}</a></td>
- <td class="sha"><a class="label label-success" href="/{{$username}}/{{$reponame}}/commit/{{.Id}} ">{{SubStr .Id.String 0 7}} </a></td>
+ <td class="sha"><a class="label label-success" href="/{{$username}}/{{$reponame}}/commit/{{.Id}} ">{{SubStr .Id.String 0 10}} </a></td>
<td class="message">{{.Message}} </td>
<td class="date">{{TimeSince .Committer.When}}</td>
</tr>
@@ -37,4 +37,4 @@
</div>
</div>
</div>
-{{template "base/footer" .}} \ No newline at end of file
+{{template "base/footer" .}}
diff --git a/templates/repo/diff.tmpl b/templates/repo/diff.tmpl
index 38f19b36f5..809a4873c3 100644
--- a/templates/repo/diff.tmpl
+++ b/templates/repo/diff.tmpl
@@ -6,7 +6,7 @@
<div id="source">
<div class="panel panel-info diff-box diff-head-box">
<div class="panel-heading">
- <a class="pull-right btn btn-primary btn-sm" href="#commit-source">Browse Source</a>
+ <a class="pull-right btn btn-primary btn-sm" href="{{.SourcePath}}">Browse Source</a>
<h4>{{.Commit.Message}}</h4>
</div>
<div class="panel-body">
@@ -57,7 +57,7 @@
</span>
<span class="del" data-line="{{.Deletion}}">- {{.Deletion}}</span>
</div>
- <a class="btn btn-default btn-sm pull-right" href="#">View File</a>
+ <a class="btn btn-default btn-sm pull-right" href="{{$.SourcePath}}/{{.Name}}">View File</a>
<span class="file">{{.Name}}</span>
</div>
<div class="panel-body file-body file-code code-view code-diff">
@@ -411,4 +411,4 @@
</div> -->
</div>
</div>
-{{template "base/footer" .}} \ No newline at end of file
+{{template "base/footer" .}}
diff --git a/templates/repo/single.tmpl b/templates/repo/single.tmpl
index ed04be0779..4c9406762c 100644
--- a/templates/repo/single.tmpl
+++ b/templates/repo/single.tmpl
@@ -11,7 +11,7 @@
{{ $n := len .Treenames}}
{{if not .IsFile}}<button class="btn btn-default pull-right hidden"><i class="fa fa-plus-square"></i>Add File</button>{{end}}
<div class="dropdown branch-switch">
- <a href="#" class="btn btn-success dropdown-toggle" data-toggle="dropdown"><i class="fa fa-chain"></i>{{.Branchname}}&nbsp;&nbsp;
+ <a href="#" class="btn btn-success dropdown-toggle" data-toggle="dropdown"><i class="fa fa-chain"></i>{{if .CommitId}}{{SubStr .CommitId 0 10}}{{else}}{{.Branchname}}{{end}}&nbsp;&nbsp;
<b class="caret"></b></a>
<ul class="dropdown-menu">
{{range .Branches}}
@@ -41,4 +41,4 @@
{{end}}
</div>
</div>
-{{template "base/footer" .}} \ No newline at end of file
+{{template "base/footer" .}}
diff --git a/templates/repo/single_file.tmpl b/templates/repo/single_file.tmpl
index cf398595e5..9199ca91f7 100644
--- a/templates/repo/single_file.tmpl
+++ b/templates/repo/single_file.tmpl
@@ -23,7 +23,11 @@
</div>
{{if not .FileIsText}}
<div class="panel-footer text-center">
- <a href="{{.FileLink}}" class="btn btn-default">View Raw</a>
+ {{if .IsImageFile}}
+ <img src="{{.FileLink}}">
+ {{else}}
+ <a href="{{.FileLink}}" class="btn btn-default">View Raw</a>
+ {{end}}
</div>
{{else}}
{{if .ReadmeExist}}
@@ -43,4 +47,4 @@
</div>
{{end}}
{{end}}
-</div> \ No newline at end of file
+</div>