diff options
Diffstat (limited to 'routers/repo/commit.go')
-rw-r--r-- | routers/repo/commit.go | 440 |
1 files changed, 221 insertions, 219 deletions
diff --git a/routers/repo/commit.go b/routers/repo/commit.go index aa5c22e4..71b48382 100644 --- a/routers/repo/commit.go +++ b/routers/repo/commit.go @@ -4,222 +4,224 @@ package repo -import ( - "path" - - "github.com/go-martini/martini" - - "github.com/gogits/gogs/models" - "github.com/gogits/gogs/modules/base" - "github.com/gogits/gogs/modules/middleware" -) - -const ( - COMMITS base.TplName = "repo/commits" - DIFF base.TplName = "repo/diff" -) - -func Commits(ctx *middleware.Context, params martini.Params) { - ctx.Data["IsRepoToolbarCommits"] = true - - userName := ctx.Repo.Owner.Name - repoName := ctx.Repo.Repository.Name - - brs, err := ctx.Repo.GitRepo.GetBranches() - if err != nil { - ctx.Handle(500, "repo.Commits(GetBranches)", err) - return - } else if len(brs) == 0 { - ctx.Handle(404, "repo.Commits(GetBranches)", nil) - return - } - - commitsCount, err := ctx.Repo.Commit.CommitsCount() - if err != nil { - ctx.Handle(500, "repo.Commits(GetCommitsCount)", err) - return - } - - // Calculate and validate page number. - page, _ := base.StrTo(ctx.Query("p")).Int() - if page < 1 { - page = 1 - } - lastPage := page - 1 - if lastPage < 0 { - lastPage = 0 - } - nextPage := page + 1 - if nextPage*50 > commitsCount { - nextPage = 0 - } - - // Both `git log branchName` and `git log commitId` work. - ctx.Data["Commits"], err = ctx.Repo.Commit.CommitsByRange(page) - if err != nil { - ctx.Handle(500, "repo.Commits(CommitsByRange)", err) - return - } - - ctx.Data["Username"] = userName - ctx.Data["Reponame"] = repoName - ctx.Data["CommitCount"] = commitsCount - ctx.Data["LastPageNum"] = lastPage - ctx.Data["NextPageNum"] = nextPage - ctx.HTML(200, COMMITS) -} - -func SearchCommits(ctx *middleware.Context, params martini.Params) { - ctx.Data["IsSearchPage"] = true - ctx.Data["IsRepoToolbarCommits"] = true - - keyword := ctx.Query("q") - if len(keyword) == 0 { - ctx.Redirect(ctx.Repo.RepoLink + "/commits/" + ctx.Repo.BranchName) - return - } - - userName := params["username"] - repoName := params["reponame"] - - brs, err := ctx.Repo.GitRepo.GetBranches() - if err != nil { - ctx.Handle(500, "repo.SearchCommits(GetBranches)", err) - return - } else if len(brs) == 0 { - ctx.Handle(404, "repo.SearchCommits(GetBranches)", nil) - return - } - - commits, err := ctx.Repo.Commit.SearchCommits(keyword) - if err != nil { - ctx.Handle(500, "repo.SearchCommits(SearchCommits)", err) - return - } - - ctx.Data["Keyword"] = keyword - ctx.Data["Username"] = userName - ctx.Data["Reponame"] = repoName - ctx.Data["CommitCount"] = commits.Len() - ctx.Data["Commits"] = commits - ctx.HTML(200, COMMITS) -} - -func Diff(ctx *middleware.Context, params martini.Params) { - ctx.Data["IsRepoToolbarCommits"] = true - - userName := ctx.Repo.Owner.Name - repoName := ctx.Repo.Repository.Name - commitId := ctx.Repo.CommitId - - commit := ctx.Repo.Commit - - diff, err := models.GetDiff(models.RepoPath(userName, repoName), commitId) - if err != nil { - ctx.Handle(404, "repo.Diff(GetDiff)", err) - return - } - - isImageFile := func(name string) bool { - blob, err := ctx.Repo.Commit.GetBlobByPath(name) - if err != nil { - return false - } - - dataRc, err := blob.Data() - if err != nil { - return false - } - buf := make([]byte, 1024) - n, _ := dataRc.Read(buf) - if n > 0 { - buf = buf[:n] - } - dataRc.Close() - _, isImage := base.IsImageFile(buf) - return isImage - } - - parents := make([]string, commit.ParentCount()) - for i := 0; i < commit.ParentCount(); i++ { - sha, err := commit.ParentId(i) - parents[i] = sha.String() - if err != nil { - ctx.Handle(404, "repo.Diff", err) - return - } - } - - ctx.Data["Username"] = userName - ctx.Data["Reponame"] = repoName - ctx.Data["IsImageFile"] = isImageFile - ctx.Data["Title"] = commit.Summary() + " · " + base.ShortSha(commitId) - ctx.Data["Commit"] = commit - ctx.Data["Diff"] = diff - ctx.Data["Parents"] = parents - ctx.Data["DiffNotAvailable"] = diff.NumFiles() == 0 - ctx.Data["SourcePath"] = "/" + path.Join(userName, repoName, "src", commitId) - ctx.Data["RawPath"] = "/" + path.Join(userName, repoName, "raw", commitId) - ctx.HTML(200, DIFF) -} - -func FileHistory(ctx *middleware.Context, params martini.Params) { - ctx.Data["IsRepoToolbarCommits"] = true - - fileName := params["_1"] - if len(fileName) == 0 { - Commits(ctx, params) - return - } - - userName := ctx.Repo.Owner.Name - repoName := ctx.Repo.Repository.Name - branchName := params["branchname"] - - brs, err := ctx.Repo.GitRepo.GetBranches() - if err != nil { - ctx.Handle(500, "repo.FileHistory", err) - return - } else if len(brs) == 0 { - ctx.Handle(404, "repo.FileHistory", 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, _ := base.StrTo(ctx.Query("p")).Int() - if page < 1 { - page = 1 - } - lastPage := page - 1 - if lastPage < 0 { - lastPage = 0 - } - nextPage := page + 1 - if nextPage*50 > commitsCount { - nextPage = 0 - } - - ctx.Data["Commits"], err = ctx.Repo.GitRepo.CommitsByFileAndRange( - branchName, fileName, page) - if err != nil { - ctx.Handle(500, "repo.FileHistory(CommitsByRange)", err) - return - } - - 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) -} +// import ( +// "path" + +// "github.com/Unknwon/com" +// "github.com/go-martini/martini" + +// "github.com/gogits/gogs/models" +// "github.com/gogits/gogs/modules/base" +// "github.com/gogits/gogs/modules/middleware" +// ) + +// const ( +// COMMITS base.TplName = "repo/commits" +// DIFF base.TplName = "repo/diff" +// ) + +// func Commits(ctx *middleware.Context, params martini.Params) { +// ctx.Data["IsRepoToolbarCommits"] = true + +// userName := ctx.Repo.Owner.Name +// repoName := ctx.Repo.Repository.Name + +// brs, err := ctx.Repo.GitRepo.GetBranches() +// if err != nil { +// ctx.Handle(500, "repo.Commits(GetBranches)", err) +// return +// } else if len(brs) == 0 { +// ctx.Handle(404, "repo.Commits(GetBranches)", nil) +// return +// } + +// commitsCount, err := ctx.Repo.Commit.CommitsCount() +// if err != nil { +// ctx.Handle(500, "repo.Commits(GetCommitsCount)", err) +// return +// } + +// // Calculate and validate page number. +// page, _ := com.StrTo(ctx.Query("p")).Int() +// if page < 1 { +// page = 1 +// } +// lastPage := page - 1 +// if lastPage < 0 { +// lastPage = 0 +// } +// nextPage := page + 1 +// if nextPage*50 > commitsCount { +// nextPage = 0 +// } + +// // Both `git log branchName` and `git log commitId` work. +// // ctx.Data["Commits"], err = ctx.Repo.Commit.CommitsByRange(page) +// // if err != nil { +// // ctx.Handle(500, "repo.Commits(CommitsByRange)", err) +// // return +// // } + +// ctx.Data["Username"] = userName +// ctx.Data["Reponame"] = repoName +// ctx.Data["CommitCount"] = commitsCount +// ctx.Data["LastPageNum"] = lastPage +// ctx.Data["NextPageNum"] = nextPage +// ctx.HTML(200, COMMITS) +// } + +// func SearchCommits(ctx *middleware.Context, params martini.Params) { +// ctx.Data["IsSearchPage"] = true +// ctx.Data["IsRepoToolbarCommits"] = true + +// keyword := ctx.Query("q") +// if len(keyword) == 0 { +// ctx.Redirect(ctx.Repo.RepoLink + "/commits/" + ctx.Repo.BranchName) +// return +// } + +// userName := params["username"] +// repoName := params["reponame"] + +// brs, err := ctx.Repo.GitRepo.GetBranches() +// if err != nil { +// ctx.Handle(500, "repo.SearchCommits(GetBranches)", err) +// return +// } else if len(brs) == 0 { +// ctx.Handle(404, "repo.SearchCommits(GetBranches)", nil) +// return +// } + +// // commits, err := ctx.Repo.Commit.SearchCommits(keyword) +// // if err != nil { +// // ctx.Handle(500, "repo.SearchCommits(SearchCommits)", err) +// // return +// // } + +// ctx.Data["Keyword"] = keyword +// ctx.Data["Username"] = userName +// ctx.Data["Reponame"] = repoName +// // ctx.Data["CommitCount"] = commits.Len() +// // ctx.Data["Commits"] = commits +// ctx.HTML(200, COMMITS) +// } + +// func Diff(ctx *middleware.Context, params martini.Params) { +// ctx.Data["IsRepoToolbarCommits"] = true + +// userName := ctx.Repo.Owner.Name +// repoName := ctx.Repo.Repository.Name +// commitId := ctx.Repo.CommitId + +// commit := ctx.Repo.Commit + +// diff, err := models.GetDiff(models.RepoPath(userName, repoName), commitId) +// if err != nil { +// ctx.Handle(404, "repo.Diff(GetDiff)", err) +// return +// } + +// isImageFile := func(name string) bool { +// // blob, err := ctx.Repo.Commit.GetBlobByPath(name) +// // if err != nil { +// // return false +// // } + +// // dataRc, err := blob.Data() +// // if err != nil { +// // return false +// // } +// // buf := make([]byte, 1024) +// // n, _ := dataRc.Read(buf) +// // if n > 0 { +// // buf = buf[:n] +// // } +// // dataRc.Close() +// // _, isImage := base.IsImageFile(buf) +// // return isImage +// return false +// } + +// parents := make([]string, commit.ParentCount()) +// for i := 0; i < commit.ParentCount(); i++ { +// sha, err := commit.ParentId(i) +// parents[i] = sha.String() +// if err != nil { +// ctx.Handle(404, "repo.Diff", err) +// return +// } +// } + +// ctx.Data["Username"] = userName +// ctx.Data["Reponame"] = repoName +// ctx.Data["IsImageFile"] = isImageFile +// ctx.Data["Title"] = commit.Summary() + " · " + base.ShortSha(commitId) +// ctx.Data["Commit"] = commit +// ctx.Data["Diff"] = diff +// ctx.Data["Parents"] = parents +// ctx.Data["DiffNotAvailable"] = diff.NumFiles() == 0 +// ctx.Data["SourcePath"] = "/" + path.Join(userName, repoName, "src", commitId) +// ctx.Data["RawPath"] = "/" + path.Join(userName, repoName, "raw", commitId) +// ctx.HTML(200, DIFF) +// } + +// func FileHistory(ctx *middleware.Context, params martini.Params) { +// ctx.Data["IsRepoToolbarCommits"] = true + +// fileName := params["_1"] +// if len(fileName) == 0 { +// Commits(ctx, params) +// return +// } + +// userName := ctx.Repo.Owner.Name +// repoName := ctx.Repo.Repository.Name +// branchName := params["branchname"] + +// brs, err := ctx.Repo.GitRepo.GetBranches() +// if err != nil { +// ctx.Handle(500, "repo.FileHistory", err) +// return +// } else if len(brs) == 0 { +// ctx.Handle(404, "repo.FileHistory", 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, _ := base.StrTo(ctx.Query("p")).Int() +// // if page < 1 { +// // page = 1 +// // } +// // lastPage := page - 1 +// // if lastPage < 0 { +// // lastPage = 0 +// // } +// // nextPage := page + 1 +// // if nextPage*50 > commitsCount { +// // nextPage = 0 +// // } + +// // ctx.Data["Commits"], err = ctx.Repo.GitRepo.CommitsByFileAndRange( +// // branchName, fileName, page) +// // if err != nil { +// // ctx.Handle(500, "repo.FileHistory(CommitsByRange)", err) +// // return +// // } + +// 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) +// } |