diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go index 18f975b4a6b..e7ad02c0c25 100644 --- a/routers/web/repo/issue.go +++ b/routers/web/repo/issue.go @@ -1794,6 +1794,7 @@ func ViewIssue(ctx *context.Context) { pull.Issue = issue canDelete := false allowMerge := false + canWriteToHeadRepo := false if ctx.IsSigned { if err := pull.LoadHeadRepo(ctx); err != nil { @@ -1814,7 +1815,7 @@ func ViewIssue(ctx *context.Context) { ctx.Data["DeleteBranchLink"] = issue.Link() + "/cleanup" } } - ctx.Data["CanWriteToHeadRepo"] = true + canWriteToHeadRepo = true } } @@ -1826,6 +1827,9 @@ func ViewIssue(ctx *context.Context) { ctx.ServerError("GetUserRepoPermission", err) return } + if !canWriteToHeadRepo { // maintainers maybe allowed to push to head repo even if they can't write to it + canWriteToHeadRepo = pull.AllowMaintainerEdit && perm.CanWrite(unit.TypeCode) + } allowMerge, err = pull_service.IsUserAllowedToMerge(ctx, pull, perm, ctx.Doer) if err != nil { ctx.ServerError("IsUserAllowedToMerge", err) @@ -1838,6 +1842,8 @@ func ViewIssue(ctx *context.Context) { } } + ctx.Data["CanWriteToHeadRepo"] = canWriteToHeadRepo + ctx.Data["ShowMergeInstructions"] = canWriteToHeadRepo ctx.Data["AllowMerge"] = allowMerge prUnit, err := repo.GetUnit(ctx, unit.TypePullRequests) @@ -1892,13 +1898,9 @@ func ViewIssue(ctx *context.Context) { ctx.ServerError("LoadProtectedBranch", err) return } - ctx.Data["ShowMergeInstructions"] = true + if pb != nil { pb.Repo = pull.BaseRepo - var showMergeInstructions bool - if ctx.Doer != nil { - showMergeInstructions = pb.CanUserPush(ctx, ctx.Doer) - } ctx.Data["ProtectedBranch"] = pb ctx.Data["IsBlockedByApprovals"] = !issues_model.HasEnoughApprovals(ctx, pb, pull) ctx.Data["IsBlockedByRejection"] = issues_model.MergeBlockedByRejectedReview(ctx, pb, pull) @@ -1909,7 +1911,6 @@ func ViewIssue(ctx *context.Context) { ctx.Data["ChangedProtectedFiles"] = pull.ChangedProtectedFiles ctx.Data["IsBlockedByChangedProtectedFiles"] = len(pull.ChangedProtectedFiles) != 0 ctx.Data["ChangedProtectedFilesNum"] = len(pull.ChangedProtectedFiles) - ctx.Data["ShowMergeInstructions"] = showMergeInstructions } ctx.Data["WillSign"] = false if ctx.Doer != nil { diff --git a/templates/repo/issue/view_content/pull_merge_instruction.tmpl b/templates/repo/issue/view_content/pull_merge_instruction.tmpl index d585d36574d..bb59b497190 100644 --- a/templates/repo/issue/view_content/pull_merge_instruction.tmpl +++ b/templates/repo/issue/view_content/pull_merge_instruction.tmpl @@ -9,10 +9,10 @@
{{if eq .PullRequest.Flow 0}}
git fetch -u {{if ne .PullRequest.HeadRepo.ID .PullRequest.BaseRepo.ID}}{{else}}origin{{end}} {{.PullRequest.HeadBranch}}:{{$localBranch}}
-
git checkout {{$localBranch}}
{{else}} -
git fetch -u origin {{.GetGitRefName}}:{{$localBranch}}
+
git fetch -u origin {{.PullRequest.GetGitRefName}}:{{$localBranch}}
{{end}} +
git checkout {{$localBranch}}
{{if .ShowMergeInstructions}}

{{ctx.Locale.Tr "repo.pulls.cmd_instruction_merge_title"}}

{{ctx.Locale.Tr "repo.pulls.cmd_instruction_merge_desc"}}