diff --git a/modules/context/repo.go b/modules/context/repo.go index 841dcd960e..5ebed0eb7e 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -547,23 +547,27 @@ func RepoAssignment() macaron.Handler { ctx.Data["CommitID"] = ctx.Repo.CommitID // People who have push access or have forked repository can propose a new pull request. - if ctx.Repo.CanWrite(models.UnitTypeCode) || (ctx.IsSigned && ctx.User.HasForkedRepo(ctx.Repo.Repository.ID)) { - // Pull request is allowed if this is a fork repository - // and base repository accepts pull requests. - if repo.BaseRepo != nil && repo.BaseRepo.AllowsPulls() { - ctx.Data["BaseRepo"] = repo.BaseRepo - ctx.Repo.PullRequest.BaseRepo = repo.BaseRepo - ctx.Repo.PullRequest.Allowed = true - ctx.Repo.PullRequest.HeadInfo = ctx.Repo.Owner.Name + ":" + ctx.Repo.BranchName - } else if repo.AllowsPulls() { - // Or, this is repository accepts pull requests between branches. - ctx.Data["BaseRepo"] = repo - ctx.Repo.PullRequest.BaseRepo = repo - ctx.Repo.PullRequest.Allowed = true - ctx.Repo.PullRequest.SameRepo = true - ctx.Repo.PullRequest.HeadInfo = ctx.Repo.BranchName - } + canPush := ctx.Repo.CanWrite(models.UnitTypeCode) || (ctx.IsSigned && ctx.User.HasForkedRepo(ctx.Repo.Repository.ID)) + canCompare := false + + // Pull request is allowed if this is a fork repository + // and base repository accepts pull requests. + if repo.BaseRepo != nil && repo.BaseRepo.AllowsPulls() { + canCompare = true + ctx.Data["BaseRepo"] = repo.BaseRepo + ctx.Repo.PullRequest.BaseRepo = repo.BaseRepo + ctx.Repo.PullRequest.Allowed = canPush + ctx.Repo.PullRequest.HeadInfo = ctx.Repo.Owner.Name + ":" + ctx.Repo.BranchName + } else if repo.AllowsPulls() { + // Or, this is repository accepts pull requests between branches. + canCompare = true + ctx.Data["BaseRepo"] = repo + ctx.Repo.PullRequest.BaseRepo = repo + ctx.Repo.PullRequest.Allowed = canPush + ctx.Repo.PullRequest.SameRepo = true + ctx.Repo.PullRequest.HeadInfo = ctx.Repo.BranchName } + ctx.Data["CanCompareOrPull"] = canCompare ctx.Data["PullRequestCtx"] = ctx.Repo.PullRequest if ctx.Query("go-get") == "1" { diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index fe68573529..37efecbff5 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -2270,6 +2270,7 @@ transfer_repo = transferred repository %s to %s push_tag = pushed tag %[2]s to %[3]s delete_tag = deleted tag %[2]s from %[3]s delete_branch = deleted branch %[2]s from %[3]s +compare_branch = Compare compare_commits = Compare %d commits compare_commits_general = Compare commits mirror_sync_push = synced commits to %[3]s at %[4]s from mirror diff --git a/routers/repo/branch.go b/routers/repo/branch.go index 615450b368..1664f68ec1 100644 --- a/routers/repo/branch.go +++ b/routers/repo/branch.go @@ -46,6 +46,7 @@ func Branches(ctx *context.Context) { ctx.Data["AllowsPulls"] = ctx.Repo.Repository.AllowsPulls() ctx.Data["IsWriter"] = ctx.Repo.CanWrite(models.UnitTypeCode) ctx.Data["IsMirror"] = ctx.Repo.Repository.IsMirror + ctx.Data["CanPull"] = ctx.Repo.CanWrite(models.UnitTypeCode) || (ctx.IsSigned && ctx.User.HasForkedRepo(ctx.Repo.Repository.ID)) ctx.Data["PageIsViewCode"] = true ctx.Data["PageIsBranches"] = true diff --git a/routers/routes/routes.go b/routers/routes/routes.go index f3bd42f02a..ac0f3f4f14 100644 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -709,6 +709,9 @@ func RegisterRoutes(m *macaron.Macaron) { m.Group("/milestone", func() { m.Get("/:id", repo.MilestoneIssuesAndPulls) }, reqRepoIssuesOrPullsReader, context.RepoRef()) + m.Combo("/compare/*", repo.MustBeNotEmpty, reqRepoCodeReader, repo.SetEditorconfigIfExists). + Get(repo.SetDiffViewStyle, repo.CompareDiff). + Post(reqSignIn, context.RepoMustNotBeArchived(), reqRepoPullsReader, repo.MustAllowPulls, bindIgnErr(auth.CreateIssueForm{}), repo.CompareAndPullRequestPost) }, context.RepoAssignment(), context.UnitTypes()) // Grouping for those endpoints that do require authentication @@ -769,9 +772,6 @@ func RegisterRoutes(m *macaron.Macaron) { m.Post("/:id/:action", repo.ChangeMilestonStatus) m.Post("/delete", repo.DeleteMilestone) }, context.RepoMustNotBeArchived(), reqRepoIssuesOrPullsWriter, context.RepoRef()) - m.Combo("/compare/*", repo.MustBeNotEmpty, reqRepoCodeReader, repo.SetEditorconfigIfExists). - Get(repo.SetDiffViewStyle, repo.CompareDiff). - Post(context.RepoMustNotBeArchived(), reqRepoPullsReader, repo.MustAllowPulls, bindIgnErr(auth.CreateIssueForm{}), repo.CompareAndPullRequestPost) m.Group("/pull", func() { m.Post("/:index/target_branch", repo.UpdatePullRequestTarget) }, context.RepoMustNotBeArchived()) diff --git a/templates/repo/branch/list.tmpl b/templates/repo/branch/list.tmpl index b310edfbd3..d2eedef49c 100644 --- a/templates/repo/branch/list.tmpl +++ b/templates/repo/branch/list.tmpl @@ -81,13 +81,13 @@ {{else if and (not .IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}} - + {{end}} {{else if and .LatestPullRequest.HasMerged .MergeMovedOn}} {{if and (not .IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}} - + {{end}} {{else}} diff --git a/templates/repo/diff/compare.tmpl b/templates/repo/diff/compare.tmpl index b088636434..35a37ab761 100644 --- a/templates/repo/diff/compare.tmpl +++ b/templates/repo/diff/compare.tmpl @@ -5,7 +5,7 @@ {{if .PageIsComparePull}}

- {{if not .Repository.IsArchived}} + {{if and $.IsSigned (not .Repository.IsArchived)}} {{.i18n.Tr "repo.pulls.compare_changes"}}
{{.i18n.Tr "repo.pulls.compare_changes_desc"}}
{{ else }} @@ -64,22 +64,24 @@
{{.i18n.Tr "repo.pulls.has_pull_request" $.RepoLink $.RepoRelPath .PullRequest.Index | Safe}}
- {{else}} - {{if not .Repository.IsArchived}} -
- -
- {{ else }} -
- {{.i18n.Tr "repo.archive.title"}} -
- {{ end }} - - {{template "repo/commits_table" .}} - {{template "repo/diff/box" .}} - {{end}} + {{else}} + {{if and $.IsSigned (not .Repository.IsArchived)}} +
+ +
+ {{else if .Repository.IsArchived}} +
+ {{.i18n.Tr "repo.archive.title"}} +
+ {{end}} + {{if $.IsSigned}} + + {{end}} + {{template "repo/commits_table" .}} + {{template "repo/diff/box" .}} + {{end}} {{else}} {{template "repo/commits_table" .}} {{template "repo/diff/box" .}} diff --git a/templates/repo/home.tmpl b/templates/repo/home.tmpl index 51e924747c..3a0d364f34 100644 --- a/templates/repo/home.tmpl +++ b/templates/repo/home.tmpl @@ -62,10 +62,10 @@ {{ $l := Subtract $n 1}} {{if eq $n 0}} - {{if and .PullRequestCtx.Allowed .IsViewBranch (not .Repository.IsArchived)}} + {{if and .CanCompareOrPull .IsViewBranch (not .Repository.IsArchived)}}
- +
{{end}}