m.Group("/:username/:reponame", func() { | m.Group("/:username/:reponame", func() { | ||||
m.Post("/releases/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost) | m.Post("/releases/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost) | ||||
m.Post("/releases/edit/:tagname", bindIgnErr(auth.EditReleaseForm{}), repo.EditReleasePost) | m.Post("/releases/edit/:tagname", bindIgnErr(auth.EditReleaseForm{}), repo.EditReleasePost) | ||||
}, reqSignIn, middleware.RepoAssignment(true, true)) | |||||
}, reqSignIn, middleware.RepoAssignment(true)) | |||||
m.Group("/:username/:reponame", func() { | m.Group("/:username/:reponame", func() { | ||||
m.Get("/issues", repo.Issues) | m.Get("/issues", repo.Issues) | ||||
}, ignSignIn, middleware.RepoAssignment(true)) | }, ignSignIn, middleware.RepoAssignment(true)) | ||||
m.Group("/:username/:reponame", func() { | m.Group("/:username/:reponame", func() { | ||||
m.Get("/src/:branchname", repo.Home) | |||||
m.Get("/src/:branchname/*", repo.Home) | |||||
m.Get("/raw/:branchname/*", repo.SingleDownload) | |||||
m.Get("/commits/:branchname", repo.Commits) | |||||
m.Get("/commits/:branchname/search", repo.SearchCommits) | |||||
m.Get("/commits/:branchname/*", repo.FileHistory) | |||||
m.Get("/commit/:branchname", repo.Diff) | |||||
m.Get("/commit/:branchname/*", repo.Diff) | |||||
m.Group("", func() { | |||||
m.Get("/src/*", repo.Home) | |||||
m.Get("/raw/*", repo.SingleDownload) | |||||
m.Get("/commits/*", repo.RefCommits) | |||||
m.Get("/commit/*", repo.Diff) | |||||
}, middleware.RepoRef()) | |||||
m.Get("/releases", repo.Releases) | m.Get("/releases", repo.Releases) | ||||
m.Get("/compare/:before([a-z0-9]+)...:after([a-z0-9]+)", repo.CompareDiff) | m.Get("/compare/:before([a-z0-9]+)...:after([a-z0-9]+)", repo.CompareDiff) | ||||
}, ignSignIn, middleware.RepoAssignment(true, true)) | |||||
}, ignSignIn, middleware.RepoAssignment(true)) | |||||
m.Group("/:username", func() { | m.Group("/:username", func() { | ||||
m.Get("/:reponame", ignSignIn, middleware.RepoAssignment(true, true, true), repo.Home) | |||||
m.Get("/:reponame", ignSignIn, middleware.RepoAssignment(true, true), middleware.RepoRef(), repo.Home) | |||||
m.Any("/:reponame/*", ignSignInAndCsrf, repo.Http) | m.Any("/:reponame/*", ignSignInAndCsrf, repo.Http) | ||||
}) | }) | ||||
still_own_user = This authentication still has used by some users, you should move them and then delete again. | still_own_user = This authentication still has used by some users, you should move them and then delete again. | ||||
target_branch_not_exist = Target branch does not exist | |||||
[user] | [user] | ||||
change_avatar = Change your avatar at gravatar.com | change_avatar = Change your avatar at gravatar.com | ||||
join_on = Joined on | join_on = Joined on |
"github.com/gogits/gogs/modules/setting" | "github.com/gogits/gogs/modules/setting" | ||||
) | ) | ||||
const APP_VER = "0.5.7.1105 Beta" | |||||
const APP_VER = "0.5.7.1106 Beta" | |||||
func init() { | func init() { | ||||
runtime.GOMAXPROCS(runtime.NumCPU()) | runtime.GOMAXPROCS(runtime.NumCPU()) |
GitRepo *git.Repository | GitRepo *git.Repository | ||||
BranchName string | BranchName string | ||||
TagName string | TagName string | ||||
TreeName string | |||||
CommitId string | CommitId string | ||||
RepoLink string | RepoLink string | ||||
CloneLink struct { | CloneLink struct { | ||||
ctx.IsSigned = true | ctx.IsSigned = true | ||||
ctx.Data["IsSigned"] = ctx.IsSigned | ctx.Data["IsSigned"] = ctx.IsSigned | ||||
ctx.Data["SignedUser"] = ctx.User | ctx.Data["SignedUser"] = ctx.User | ||||
ctx.Data["SignedUserName"] = ctx.User.Name | |||||
ctx.Data["IsAdmin"] = ctx.User.IsAdmin | ctx.Data["IsAdmin"] = ctx.User.IsAdmin | ||||
} else { | |||||
ctx.Data["SignedUserName"] = "" | |||||
} | } | ||||
// If request sends files, parse them here otherwise the Query() can't be parsed and the CsrfToken will be invalid. | // If request sends files, parse them here otherwise the Query() can't be parsed and the CsrfToken will be invalid. |
"github.com/gogits/gogs/modules/setting" | "github.com/gogits/gogs/modules/setting" | ||||
) | ) | ||||
// RepoRef handles repository reference name including those contain `/`. | |||||
func RepoRef() macaron.Handler { | |||||
return func(ctx *Context) { | |||||
var ( | |||||
refName string | |||||
err error | |||||
) | |||||
// Get default branch. | |||||
if len(ctx.Params("*")) == 0 { | |||||
refName = ctx.Repo.Repository.DefaultBranch | |||||
if !ctx.Repo.GitRepo.IsBranchExist(refName) { | |||||
brs, err := ctx.Repo.GitRepo.GetBranches() | |||||
if err != nil { | |||||
ctx.Handle(500, "GetBranches", err) | |||||
return | |||||
} | |||||
refName = brs[0] | |||||
} | |||||
ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetCommitOfBranch(refName) | |||||
if err != nil { | |||||
ctx.Handle(500, "GetCommitOfBranch", err) | |||||
return | |||||
} | |||||
ctx.Repo.CommitId = ctx.Repo.Commit.Id.String() | |||||
ctx.Repo.IsBranch = true | |||||
ctx.Repo.BranchName = refName | |||||
} else { | |||||
hasMatched := false | |||||
parts := strings.Split(ctx.Params("*"), "/") | |||||
for i, part := range parts { | |||||
refName = strings.TrimPrefix(refName+"/"+part, "/") | |||||
if ctx.Repo.GitRepo.IsBranchExist(refName) || | |||||
ctx.Repo.GitRepo.IsTagExist(refName) { | |||||
if i < len(parts)-1 { | |||||
ctx.Repo.TreeName = strings.Join(parts[i+1:], "/") | |||||
} | |||||
hasMatched = true | |||||
break | |||||
} | |||||
} | |||||
if !hasMatched && len(parts[0]) == 40 { | |||||
refName = parts[0] | |||||
ctx.Repo.TreeName = strings.Join(parts[1:], "/") | |||||
} | |||||
if ctx.Repo.GitRepo.IsBranchExist(refName) { | |||||
ctx.Repo.IsBranch = true | |||||
ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetCommitOfBranch(refName) | |||||
if err != nil { | |||||
ctx.Handle(500, "GetCommitOfBranch", err) | |||||
return | |||||
} | |||||
ctx.Repo.CommitId = ctx.Repo.Commit.Id.String() | |||||
} else if ctx.Repo.GitRepo.IsTagExist(refName) { | |||||
ctx.Repo.IsTag = true | |||||
ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetCommitOfTag(refName) | |||||
if err != nil { | |||||
ctx.Handle(500, "GetCommitOfTag", err) | |||||
return | |||||
} | |||||
ctx.Repo.CommitId = ctx.Repo.Commit.Id.String() | |||||
} else if len(refName) == 40 { | |||||
ctx.Repo.IsCommit = true | |||||
ctx.Repo.CommitId = refName | |||||
ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetCommit(refName) | |||||
if err != nil { | |||||
ctx.Handle(404, "GetCommit", nil) | |||||
return | |||||
} | |||||
} else { | |||||
ctx.Handle(404, "RepoRef invalid repo", fmt.Errorf("branch or tag not exist: %s", refName)) | |||||
return | |||||
} | |||||
} | |||||
ctx.Repo.BranchName = refName | |||||
ctx.Data["BranchName"] = ctx.Repo.BranchName | |||||
ctx.Data["CommitId"] = ctx.Repo.CommitId | |||||
ctx.Data["IsBranch"] = ctx.Repo.IsBranch | |||||
ctx.Data["IsTag"] = ctx.Repo.IsTag | |||||
ctx.Data["IsCommit"] = ctx.Repo.IsCommit | |||||
ctx.Repo.CommitsCount, err = ctx.Repo.Commit.CommitsCount() | |||||
if err != nil { | |||||
ctx.Handle(500, "CommitsCount", err) | |||||
return | |||||
} | |||||
ctx.Data["CommitsCount"] = ctx.Repo.CommitsCount | |||||
} | |||||
} | |||||
func RepoAssignment(redirect bool, args ...bool) macaron.Handler { | func RepoAssignment(redirect bool, args ...bool) macaron.Handler { | ||||
return func(ctx *Context) { | return func(ctx *Context) { | ||||
var ( | var ( | ||||
validBranch bool // To valid brach name. | |||||
displayBare bool // To display bare page if it is a bare repo. | displayBare bool // To display bare page if it is a bare repo. | ||||
) | ) | ||||
if len(args) >= 1 { | if len(args) >= 1 { | ||||
validBranch = args[0] | |||||
} | |||||
if len(args) >= 2 { | |||||
displayBare = args[1] | |||||
displayBare = args[0] | |||||
} | } | ||||
var ( | var ( | ||||
} | } | ||||
// when repo is bare, not valid branch | // when repo is bare, not valid branch | ||||
if !ctx.Repo.Repository.IsBare && validBranch { | |||||
detect: | |||||
if len(refName) > 0 { | |||||
if gitRepo.IsBranchExist(refName) { | |||||
ctx.Repo.IsBranch = true | |||||
ctx.Repo.BranchName = refName | |||||
ctx.Repo.Commit, err = gitRepo.GetCommitOfBranch(refName) | |||||
if err != nil { | |||||
ctx.Handle(500, "RepoAssignment invalid branch", err) | |||||
return | |||||
} | |||||
ctx.Repo.CommitId = ctx.Repo.Commit.Id.String() | |||||
} else if gitRepo.IsTagExist(refName) { | |||||
ctx.Repo.IsTag = true | |||||
ctx.Repo.BranchName = refName | |||||
ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetCommitOfTag(refName) | |||||
if err != nil { | |||||
ctx.Handle(500, "Fail to get tag commit", err) | |||||
return | |||||
} | |||||
ctx.Repo.CommitId = ctx.Repo.Commit.Id.String() | |||||
} else if len(refName) == 40 { | |||||
ctx.Repo.IsCommit = true | |||||
ctx.Repo.CommitId = refName | |||||
ctx.Repo.BranchName = refName | |||||
ctx.Repo.Commit, err = gitRepo.GetCommit(refName) | |||||
if err != nil { | |||||
ctx.Handle(404, "RepoAssignment invalid commit", nil) | |||||
return | |||||
} | |||||
} else { | |||||
ctx.Handle(404, "RepoAssignment invalid repo", fmt.Errorf("branch or tag not exist: %s", refName)) | |||||
return | |||||
} | |||||
} else { | |||||
if len(refName) == 0 { | |||||
if gitRepo.IsBranchExist(ctx.Repo.Repository.DefaultBranch) { | |||||
refName = ctx.Repo.Repository.DefaultBranch | |||||
} else { | |||||
brs, err := gitRepo.GetBranches() | |||||
if err != nil { | |||||
ctx.Handle(500, "GetBranches", err) | |||||
return | |||||
} | |||||
refName = brs[0] | |||||
} | |||||
} | |||||
goto detect | |||||
} | |||||
ctx.Data["IsBranch"] = ctx.Repo.IsBranch | |||||
ctx.Data["IsTag"] = ctx.Repo.IsTag | |||||
ctx.Data["IsCommit"] = ctx.Repo.IsCommit | |||||
ctx.Repo.CommitsCount, err = ctx.Repo.Commit.CommitsCount() | |||||
if err != nil { | |||||
ctx.Handle(500, "CommitsCount", err) | |||||
return | |||||
} | |||||
ctx.Data["CommitsCount"] = ctx.Repo.CommitsCount | |||||
} | |||||
// if !ctx.Repo.Repository.IsBare && validBranch { | |||||
// detect: | |||||
// if len(refName) > 0 { | |||||
// if gitRepo.IsBranchExist(refName) { | |||||
// ctx.Repo.IsBranch = true | |||||
// ctx.Repo.BranchName = refName | |||||
// ctx.Repo.Commit, err = gitRepo.GetCommitOfBranch(refName) | |||||
// if err != nil { | |||||
// ctx.Handle(500, "RepoAssignment invalid branch", err) | |||||
// return | |||||
// } | |||||
// ctx.Repo.CommitId = ctx.Repo.Commit.Id.String() | |||||
// } else if gitRepo.IsTagExist(refName) { | |||||
// ctx.Repo.IsTag = true | |||||
// ctx.Repo.BranchName = refName | |||||
// ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetCommitOfTag(refName) | |||||
// if err != nil { | |||||
// ctx.Handle(500, "Fail to get tag commit", err) | |||||
// return | |||||
// } | |||||
// ctx.Repo.CommitId = ctx.Repo.Commit.Id.String() | |||||
// } else if len(refName) == 40 { | |||||
// ctx.Repo.IsCommit = true | |||||
// ctx.Repo.CommitId = refName | |||||
// ctx.Repo.BranchName = refName | |||||
// ctx.Repo.Commit, err = gitRepo.GetCommit(refName) | |||||
// if err != nil { | |||||
// ctx.Handle(404, "RepoAssignment invalid commit", nil) | |||||
// return | |||||
// } | |||||
// } else { | |||||
// ctx.Handle(404, "RepoAssignment invalid repo", fmt.Errorf("branch or tag not exist: %s", refName)) | |||||
// return | |||||
// } | |||||
// } else { | |||||
// if len(refName) == 0 { | |||||
// if gitRepo.IsBranchExist(ctx.Repo.Repository.DefaultBranch) { | |||||
// refName = ctx.Repo.Repository.DefaultBranch | |||||
// } else { | |||||
// brs, err := gitRepo.GetBranches() | |||||
// if err != nil { | |||||
// ctx.Handle(500, "GetBranches", err) | |||||
// return | |||||
// } | |||||
// refName = brs[0] | |||||
// } | |||||
// } | |||||
// goto detect | |||||
// } | |||||
// ctx.Data["IsBranch"] = ctx.Repo.IsBranch | |||||
// ctx.Data["IsTag"] = ctx.Repo.IsTag | |||||
// ctx.Data["IsCommit"] = ctx.Repo.IsCommit | |||||
// ctx.Repo.CommitsCount, err = ctx.Repo.Commit.CommitsCount() | |||||
// if err != nil { | |||||
// ctx.Handle(500, "CommitsCount", err) | |||||
// return | |||||
// } | |||||
// ctx.Data["CommitsCount"] = ctx.Repo.CommitsCount | |||||
// } | |||||
// repo is bare and display enable | // repo is bare and display enable | ||||
if ctx.Repo.Repository.IsBare { | if ctx.Repo.Repository.IsBare { |
.text-black { | .text-black { | ||||
color: #444444; | color: #444444; | ||||
} | } | ||||
.text-gold { | |||||
color: #a1882b; | |||||
} | |||||
.table { | .table { | ||||
width: 100%; | width: 100%; | ||||
max-width: 100%; | max-width: 100%; |
.text-black { | .text-black { | ||||
color: #444444; | color: #444444; | ||||
} | } | ||||
.text-gold { | |||||
color: #a1882b; | |||||
} | |||||
.table { | .table { | ||||
width: 100%; | width: 100%; | ||||
max-width: 100%; | max-width: 100%; |
DIFF base.TplName = "repo/diff" | DIFF base.TplName = "repo/diff" | ||||
) | ) | ||||
func RefCommits(ctx *middleware.Context) { | |||||
switch { | |||||
case len(ctx.Repo.TreeName) == 0: | |||||
Commits(ctx) | |||||
case ctx.Repo.TreeName == "search": | |||||
SearchCommits(ctx) | |||||
default: | |||||
FileHistory(ctx) | |||||
} | |||||
} | |||||
func Commits(ctx *middleware.Context) { | func Commits(ctx *middleware.Context) { | ||||
ctx.Data["IsRepoToolbarCommits"] = true | ctx.Data["IsRepoToolbarCommits"] = true | ||||
ctx.HTML(200, COMMITS) | ctx.HTML(200, COMMITS) | ||||
} | } | ||||
func FileHistory(ctx *middleware.Context) { | |||||
ctx.Data["IsRepoToolbarCommits"] = true | |||||
fileName := ctx.Repo.TreeName | |||||
if len(fileName) == 0 { | |||||
Commits(ctx) | |||||
return | |||||
} | |||||
userName := ctx.Repo.Owner.Name | |||||
repoName := ctx.Repo.Repository.Name | |||||
branchName := ctx.Repo.BranchName | |||||
brs, err := ctx.Repo.GitRepo.GetBranches() | |||||
if err != nil { | |||||
ctx.Handle(500, "GetBranches", err) | |||||
return | |||||
} else if len(brs) == 0 { | |||||
ctx.Handle(404, "GetBranches", nil) | |||||
return | |||||
} | |||||
commitsCount, err := ctx.Repo.GitRepo.FileCommitsCount(branchName, fileName) | |||||
if err != nil { | |||||
ctx.Handle(500, "repo.FileHistory(GetCommitsCount)", err) | |||||
return | |||||
} else if commitsCount == 0 { | |||||
ctx.Handle(404, "repo.FileHistory", nil) | |||||
return | |||||
} | |||||
// Calculate and validate page number. | |||||
page := com.StrTo(ctx.Query("p")).MustInt() | |||||
if page < 1 { | |||||
page = 1 | |||||
} | |||||
lastPage := page - 1 | |||||
if lastPage < 0 { | |||||
lastPage = 0 | |||||
} | |||||
nextPage := page + 1 | |||||
if nextPage*50 > commitsCount { | |||||
nextPage = 0 | |||||
} | |||||
commits, err := ctx.Repo.GitRepo.CommitsByFileAndRange( | |||||
branchName, fileName, page) | |||||
if err != nil { | |||||
ctx.Handle(500, "repo.FileHistory(CommitsByRange)", err) | |||||
return | |||||
} | |||||
commits = models.ValidateCommitsWithEmails(commits) | |||||
ctx.Data["Commits"] = commits | |||||
ctx.Data["Username"] = userName | |||||
ctx.Data["Reponame"] = repoName | |||||
ctx.Data["FileName"] = fileName | |||||
ctx.Data["CommitCount"] = commitsCount | |||||
ctx.Data["LastPageNum"] = lastPage | |||||
ctx.Data["NextPageNum"] = nextPage | |||||
ctx.HTML(200, COMMITS) | |||||
} | |||||
func Diff(ctx *middleware.Context) { | func Diff(ctx *middleware.Context) { | ||||
ctx.Data["IsRepoToolbarCommits"] = true | ctx.Data["IsRepoToolbarCommits"] = true | ||||
ctx.Data["RawPath"] = "/" + path.Join(userName, repoName, "raw", afterCommitId) | ctx.Data["RawPath"] = "/" + path.Join(userName, repoName, "raw", afterCommitId) | ||||
ctx.HTML(200, DIFF) | ctx.HTML(200, DIFF) | ||||
} | } | ||||
func FileHistory(ctx *middleware.Context) { | |||||
ctx.Data["IsRepoToolbarCommits"] = true | |||||
fileName := ctx.Params("*") | |||||
if len(fileName) == 0 { | |||||
Commits(ctx) | |||||
return | |||||
} | |||||
userName := ctx.Repo.Owner.Name | |||||
repoName := ctx.Repo.Repository.Name | |||||
branchName := ctx.Params(":branchname") | |||||
brs, err := ctx.Repo.GitRepo.GetBranches() | |||||
if err != nil { | |||||
ctx.Handle(500, "GetBranches", err) | |||||
return | |||||
} else if len(brs) == 0 { | |||||
ctx.Handle(404, "GetBranches", nil) | |||||
return | |||||
} | |||||
commitsCount, err := ctx.Repo.GitRepo.FileCommitsCount(branchName, fileName) | |||||
if err != nil { | |||||
ctx.Handle(500, "repo.FileHistory(GetCommitsCount)", err) | |||||
return | |||||
} else if commitsCount == 0 { | |||||
ctx.Handle(404, "repo.FileHistory", nil) | |||||
return | |||||
} | |||||
// Calculate and validate page number. | |||||
page := com.StrTo(ctx.Query("p")).MustInt() | |||||
if page < 1 { | |||||
page = 1 | |||||
} | |||||
lastPage := page - 1 | |||||
if lastPage < 0 { | |||||
lastPage = 0 | |||||
} | |||||
nextPage := page + 1 | |||||
if nextPage*50 > commitsCount { | |||||
nextPage = 0 | |||||
} | |||||
commits, err := ctx.Repo.GitRepo.CommitsByFileAndRange( | |||||
branchName, fileName, page) | |||||
if err != nil { | |||||
ctx.Handle(500, "repo.FileHistory(CommitsByRange)", err) | |||||
return | |||||
} | |||||
commits = models.ValidateCommitsWithEmails(commits) | |||||
ctx.Data["Commits"] = commits | |||||
ctx.Data["Username"] = userName | |||||
ctx.Data["Reponame"] = repoName | |||||
ctx.Data["FileName"] = fileName | |||||
ctx.Data["CommitCount"] = commitsCount | |||||
ctx.Data["LastPageNum"] = lastPage | |||||
ctx.Data["NextPageNum"] = nextPage | |||||
ctx.HTML(200, COMMITS) | |||||
} |
) | ) | ||||
func SingleDownload(ctx *middleware.Context) { | func SingleDownload(ctx *middleware.Context) { | ||||
treename := ctx.Params("*") | |||||
blob, err := ctx.Repo.Commit.GetBlobByPath(treename) | |||||
blob, err := ctx.Repo.Commit.GetBlobByPath(ctx.Repo.TreeName) | |||||
if err != nil { | if err != nil { | ||||
ctx.Handle(500, "GetBlobByPath", err) | ctx.Handle(500, "GetBlobByPath", err) | ||||
return | return | ||||
dataRc, err := blob.Data() | dataRc, err := blob.Data() | ||||
if err != nil { | if err != nil { | ||||
ctx.Handle(500, "repo.SingleDownload(Data)", err) | |||||
ctx.Handle(500, "Data", err) | |||||
return | return | ||||
} | } | ||||
_, isImageFile := base.IsImageFile(buf) | _, isImageFile := base.IsImageFile(buf) | ||||
ctx.Resp.Header().Set("Content-Type", contentType) | ctx.Resp.Header().Set("Content-Type", contentType) | ||||
if !isTextFile && !isImageFile { | if !isTextFile && !isImageFile { | ||||
ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+path.Base(treename)) | |||||
ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+path.Base(ctx.Repo.TreeName)) | |||||
ctx.Resp.Header().Set("Content-Transfer-Encoding", "binary") | ctx.Resp.Header().Set("Content-Transfer-Encoding", "binary") | ||||
} | } | ||||
ctx.Resp.Write(buf) | ctx.Resp.Write(buf) |
ctx.Data["Title"] = "Releases" | ctx.Data["Title"] = "Releases" | ||||
ctx.Data["IsRepoToolbarReleases"] = true | ctx.Data["IsRepoToolbarReleases"] = true | ||||
ctx.Data["IsRepoReleaseNew"] = false | ctx.Data["IsRepoReleaseNew"] = false | ||||
rawTags, err := ctx.Repo.GitRepo.GetTags() | rawTags, err := ctx.Repo.GitRepo.GetTags() | ||||
if err != nil { | if err != nil { | ||||
ctx.Handle(500, "release.Releases(GetTags)", err) | |||||
ctx.Handle(500, "GetTags", err) | |||||
return | return | ||||
} | } | ||||
rels, err := models.GetReleasesByRepoId(ctx.Repo.Repository.Id) | rels, err := models.GetReleasesByRepoId(ctx.Repo.Repository.Id) | ||||
if err != nil { | if err != nil { | ||||
ctx.Handle(500, "release.Releases(GetReleasesByRepoId)", err) | |||||
ctx.Handle(500, "GetReleasesByRepoId", err) | |||||
return | |||||
} | |||||
// Get default branch. | |||||
refName := ctx.Repo.Repository.DefaultBranch | |||||
if !ctx.Repo.GitRepo.IsBranchExist(refName) { | |||||
brs, err := ctx.Repo.GitRepo.GetBranches() | |||||
if err != nil { | |||||
ctx.Handle(500, "GetBranches", err) | |||||
return | |||||
} | |||||
refName = brs[0] | |||||
} | |||||
commit, err := ctx.Repo.GitRepo.GetCommitOfBranch(refName) | |||||
if err != nil { | |||||
ctx.Handle(500, "GetCommitOfBranch", err) | |||||
return | return | ||||
} | } | ||||
commitsCount, err := ctx.Repo.Commit.CommitsCount() | |||||
commitsCount, err := commit.CommitsCount() | |||||
if err != nil { | if err != nil { | ||||
ctx.Handle(500, "release.Releases(CommitsCount)", err) | |||||
ctx.Handle(500, "CommitsCount", err) | |||||
return | return | ||||
} | } | ||||
if ctx.Repo.BranchName != rel.Target { | if ctx.Repo.BranchName != rel.Target { | ||||
// Get count if not exists. | // Get count if not exists. | ||||
if _, ok := countCache[rel.Target]; !ok { | if _, ok := countCache[rel.Target]; !ok { | ||||
commit, err := ctx.Repo.GitRepo.GetCommitOfTag(rel.TagName) | |||||
commit, err := ctx.Repo.GitRepo.GetCommitOfBranch(ctx.Repo.BranchName) | |||||
if err != nil { | if err != nil { | ||||
ctx.Handle(500, "GetCommitOfTag", err) | |||||
ctx.Handle(500, "GetCommitOfBranch", err) | |||||
return | return | ||||
} | } | ||||
countCache[rel.Target], err = commit.CommitsCount() | |||||
countCache[ctx.Repo.BranchName], err = commit.CommitsCount() | |||||
if err != nil { | if err != nil { | ||||
ctx.Handle(500, "CommitsCount2", err) | ctx.Handle(500, "CommitsCount2", err) | ||||
return | return | ||||
} | } | ||||
} | } | ||||
rel.NumCommitsBehind = countCache[rel.Target] - rel.NumCommits | |||||
rel.NumCommitsBehind = countCache[ctx.Repo.BranchName] - rel.NumCommits | |||||
} else { | } else { | ||||
rel.NumCommitsBehind = commitsCount - rel.NumCommits | rel.NumCommitsBehind = commitsCount - rel.NumCommits | ||||
} | } | ||||
return | return | ||||
} | } | ||||
commitsCount, err := ctx.Repo.Commit.CommitsCount() | |||||
if !ctx.Repo.GitRepo.IsBranchExist(form.Target) { | |||||
ctx.RenderWithErr(ctx.Tr("form.target_branch_not_exist"), RELEASE_NEW, &form) | |||||
return | |||||
} | |||||
commit, err := ctx.Repo.GitRepo.GetCommitOfBranch(form.Target) | |||||
if err != nil { | if err != nil { | ||||
ctx.Handle(500, "release.ReleasesNewPost(CommitsCount)", err) | |||||
ctx.Handle(500, "GetCommitOfBranch", err) | |||||
return | return | ||||
} | } | ||||
if !ctx.Repo.GitRepo.IsBranchExist(form.Target) { | |||||
ctx.RenderWithErr("Target branch does not exist", "release/new", &form) | |||||
commitsCount, err := commit.CommitsCount() | |||||
if err != nil { | |||||
ctx.Handle(500, "CommitsCount", err) | |||||
return | return | ||||
} | } | ||||
Title: form.Title, | Title: form.Title, | ||||
TagName: form.TagName, | TagName: form.TagName, | ||||
Target: form.Target, | Target: form.Target, | ||||
Sha1: ctx.Repo.Commit.Id.String(), | |||||
Sha1: commit.Id.String(), | |||||
NumCommits: commitsCount, | NumCommits: commitsCount, | ||||
Note: form.Content, | Note: form.Content, | ||||
IsDraft: len(form.Draft) > 0, | IsDraft: len(form.Draft) > 0, |
rawLink := ctx.Repo.RepoLink + "/raw/" + branchName | rawLink := ctx.Repo.RepoLink + "/raw/" + branchName | ||||
// Get tree path | // Get tree path | ||||
treename := ctx.Params("*") | |||||
treename := ctx.Repo.TreeName | |||||
if len(treename) > 0 && treename[len(treename)-1] == '/' { | if len(treename) > 0 && treename[len(treename)-1] == '/' { | ||||
ctx.Redirect(repoLink + "/src/" + branchName + "/" + treename[:len(treename)-1]) | ctx.Redirect(repoLink + "/src/" + branchName + "/" + treename[:len(treename)-1]) |
0.5.7.1105 Beta | |||||
0.5.7.1106 Beta |
{{end}} | {{end}} | ||||
{{end}} | {{end}} | ||||
</li> | </li> | ||||
<li id="repo-commits-jump" class="repo-jump right"> | |||||
<!-- <li id="repo-commits-jump" class="repo-jump right"> | |||||
<a href="#"> | <a href="#"> | ||||
<button class="btn btn-small btn-gray btn-right-radius"><i class="octicon octicon-git-commit"></i></button> | <button class="btn btn-small btn-gray btn-right-radius"><i class="octicon octicon-git-commit"></i></button> | ||||
</a> | </a> | ||||
<a href="#"> | <a href="#"> | ||||
<button class="btn btn-small btn btn-small btn-gray btn-left-radius"><i class="octicon octicon-list-unordered"></i></button> | <button class="btn btn-small btn btn-small btn-gray btn-left-radius"><i class="octicon octicon-list-unordered"></i></button> | ||||
</a> | </a> | ||||
</li> | |||||
</li> --> | |||||
</ul> | </ul> | ||||
{{if .IsFile}} | {{if .IsFile}} | ||||
{{template "repo/view_file" .}} | {{template "repo/view_file" .}} |
<div class="tab-pane active"> | <div class="tab-pane active"> | ||||
<div id="org-repo-list"> | <div id="org-repo-list"> | ||||
{{range .Repos}} | {{range .Repos}} | ||||
{{if not .IsPrivate}} | |||||
{{if or (not .IsPrivate) (.HasAccess $.SignedUserName)}} | |||||
<div class="org-repo-item"> | <div class="org-repo-item"> | ||||
<ul class="org-repo-status right"> | <ul class="org-repo-status right"> | ||||
<li><i class="octicon octicon-star"></i> {{.NumStars}}</li> | <li><i class="octicon octicon-star"></i> {{.NumStars}}</li> | ||||
<li><i class="octicon octicon-git-branch"></i> {{.NumForks}}</li> | <li><i class="octicon octicon-git-branch"></i> {{.NumForks}}</li> | ||||
</ul> | </ul> | ||||
<h2><a href="{{AppSubUrl}}/{{$.Owner.Name}}/{{.Name}}">{{.Name}}</a></h2> | |||||
<h2> | |||||
<a href="{{AppSubUrl}}/{{$.Owner.Name}}/{{.Name}}">{{.Name}}</a> | |||||
{{if .IsPrivate}} | |||||
<span class="text-gold"><i class="octicon octicon-lock"></i></span> | |||||
{{end}} | |||||
</h2> | |||||
<p class="org-repo-description">{{.Description}}</p> | <p class="org-repo-description">{{.Description}}</p> | ||||
<p class="org-repo-updated">{{$.i18n.Tr "org.repo_updated"}} {{TimeSince .Updated $.i18n.Lang}}</p> | <p class="org-repo-updated">{{$.i18n.Tr "org.repo_updated"}} {{TimeSince .Updated $.i18n.Lang}}</p> | ||||
</div> | </div> |