diff --git a/cmd/web.go b/cmd/web.go index b8cfc5a4f5e..c343566d70b 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -210,6 +210,7 @@ func runWeb(*cli.Context) { r.Get("/raw/:branchname/**", repo.SingleDownload) r.Get("/commits/:branchname", repo.Commits) r.Get("/commits/:branchname/search", repo.SearchCommits) + r.Get("/commits/:branchname/**", repo.FileHistory) r.Get("/commit/:branchname", repo.Diff) r.Get("/commit/:branchname/**", repo.Diff) r.Get("/releases", repo.Releases) diff --git a/routers/repo/commit.go b/routers/repo/commit.go index bc33fe44739..88b6593e76f 100644 --- a/routers/repo/commit.go +++ b/routers/repo/commit.go @@ -47,10 +47,10 @@ func Commits(ctx *middleware.Context, params martini.Params) { nextPage = 0 } - //both `git log branchName` and `git log commitId` work + //both `git log branchName` and `git log commitId` work commits, err := ctx.Repo.Commit.CommitsByRange(page) if err != nil { - ctx.Handle(500, "repo.Commits(get commits)", err) + ctx.Handle(500, "repo.Commits(CommitsByRange)", err) return } @@ -149,3 +149,65 @@ func SearchCommits(ctx *middleware.Context, params martini.Params) { ctx.Data["IsRepoToolbarCommits"] = true ctx.HTML(200, "repo/commits") } + +func FileHistory(ctx *middleware.Context, params martini.Params) { + 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 + } + 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 + } + + //both `git log branchName` and `git log commitId` work + 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["Commits"] = commits + ctx.Data["LastPageNum"] = lastPage + ctx.Data["NextPageNum"] = nextPage + ctx.Data["IsRepoToolbarCommits"] = true + ctx.HTML(200, "repo/commits") +} diff --git a/routers/repo/repo.go b/routers/repo/repo.go index 19c9dddc6ee..7769d22774e 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -254,6 +254,7 @@ func Single(ctx *middleware.Context, params martini.Params) { ctx.Data["LastCommit"] = ctx.Repo.Commit ctx.Data["Paths"] = Paths + ctx.Data["TreeName"] = treename ctx.Data["Treenames"] = treenames ctx.Data["TreePath"] = treePath ctx.Data["BranchLink"] = branchLink diff --git a/templates/repo/commits.tmpl b/templates/repo/commits.tmpl index 74b03074bc8..385f9d5bae9 100644 --- a/templates/repo/commits.tmpl +++ b/templates/repo/commits.tmpl @@ -41,8 +41,8 @@ {{if not .IsSearchPage}}
{{end}} diff --git a/templates/repo/single_file.tmpl b/templates/repo/single_file.tmpl index 95c41b70179..8c09f3ec1c6 100644 --- a/templates/repo/single_file.tmpl +++ b/templates/repo/single_file.tmpl @@ -16,7 +16,7 @@ Edit Raw Blame - History + History Delete {{end}}