|
251 | 251 | {{$.i18n.Tr (printf "repo.signing.wont_sign.%s" .WontSignReason) }} |
252 | 252 | </div> |
253 | 253 | {{end}} |
| 254 | + |
254 | 255 | {{$notAllOverridableChecksOk := or .IsBlockedByApprovals .IsBlockedByRejection .IsBlockedByOfficialReviewRequests .IsBlockedByOutdatedBranch .IsBlockedByChangedProtectedFiles (and .EnableStatusCheck (not .RequiredStatusCheckState.IsSuccess))}} |
255 | | - {{if and (or $.IsRepoAdmin (not $notAllOverridableChecksOk)) (or (not .AllowMerge) (not .RequireSigned) .WillSign)}} |
| 256 | + |
| 257 | + {{/* admin can merge without checks, writer can merge when checkes succeed */}} |
| 258 | + {{$canMergeNow := and (or $.IsRepoAdmin (not $notAllOverridableChecksOk)) (or (not .AllowMerge) (not .RequireSigned) .WillSign)}} |
| 259 | + {{/* admin and writer both can make an auto merge schedule */}} |
| 260 | + |
| 261 | + {{if $canMergeNow}} |
256 | 262 | {{if $notAllOverridableChecksOk}} |
257 | 263 | <div class="item"> |
258 | 264 | <i class="icon icon-octicon">{{svg "octicon-dot-fill"}}</i> |
|
277 | 283 | {{end}} |
278 | 284 | {{end}} |
279 | 285 |
|
280 | | - {{$canAutoMerge = true}} |
281 | 286 | {{if (gt .Issue.PullRequest.CommitsBehind 0)}} |
282 | 287 | <div class="ui divider"></div> |
283 | 288 | <div class="item item-section"> |
|
317 | 322 | </div> |
318 | 323 | {{end}} |
319 | 324 |
|
320 | | - {{if and (or $.IsRepoAdmin (not $notAllOverridableChecksOk)) (or (not .AllowMerge) (not .RequireSigned) .WillSign)}} |
321 | | - {{if .AllowMerge}} |
322 | | - {{$prUnit := .Repository.MustGetUnit $.UnitTypePullRequests}} |
323 | | - {{$approvers := .Issue.PullRequest.GetApprovers}} |
324 | | - {{if or $prUnit.PullRequestsConfig.AllowMerge $prUnit.PullRequestsConfig.AllowRebase $prUnit.PullRequestsConfig.AllowRebaseMerge $prUnit.PullRequestsConfig.AllowSquash}} |
| 325 | + {{if .AllowMerge}} {{/* user is allowed to merge */}} |
| 326 | + {{$prUnit := .Repository.MustGetUnit $.UnitTypePullRequests}} |
| 327 | + {{$approvers := .Issue.PullRequest.GetApprovers}} |
| 328 | + {{if or $prUnit.PullRequestsConfig.AllowMerge $prUnit.PullRequestsConfig.AllowRebase $prUnit.PullRequestsConfig.AllowRebaseMerge $prUnit.PullRequestsConfig.AllowSquash}} |
| 329 | + {{$hasPendingPullRequestMergeTip := ""}} |
| 330 | + {{if .HasPendingPullRequestMerge}} |
| 331 | + {{$createdPRMergeStr := TimeSinceUnix .PendingPullRequestMerge.CreatedUnix $.i18n.Lang}} |
| 332 | + {{$hasPendingPullRequestMergeTip = $.i18n.Tr "repo.pulls.auto_merge_has_pending_schedule" .PendingPullRequestMerge.Doer.Name $createdPRMergeStr}} |
| 333 | + {{end}} |
| 334 | + <div class="ui divider"></div> |
| 335 | + <script> |
| 336 | + <!-- /* eslint-disable */ --> |
| 337 | + (() => { |
| 338 | + const defaultMergeTitle = {{.DefaultMergeMessage}}; |
| 339 | + const defaultSquashMergeTitle = {{.DefaultSquashMergeMessage}}; |
| 340 | + const defaultMergeMessage = 'Reviewed-on: ' + {{$.Issue.HTMLURL}} + '\n' + {{$approvers}}; |
| 341 | + const mergeForm = { |
| 342 | + 'baseLink': {{.Link}}, |
| 343 | + 'textCancel': {{$.i18n.Tr "cancel"}}, |
| 344 | + 'textDeleteBranch': {{$.i18n.Tr "repo.branch.delete" .HeadTarget}}, |
| 345 | + 'textAutoMergeButtonWhenSucceed': {{$.i18n.Tr "repo.pulls.auto_merge_button_when_succeed"}}, |
| 346 | + 'textAutoMergeWhenSucceed': {{$.i18n.Tr "repo.pulls.auto_merge_when_succeed"}}, |
| 347 | + 'textAutoMergeCancelSchedule': {{$.i18n.Tr "repo.pulls.auto_merge_cancel_schedule"}}, |
325 | 348 |
|
326 | | - <div class="ui divider"></div> |
| 349 | + 'canMergeNow': {{$canMergeNow}}, |
| 350 | + 'allOverridableChecksOk': {{not $notAllOverridableChecksOk}}, |
| 351 | + 'pullHeadCommitID': {{.PullHeadCommitID}}, |
| 352 | + 'isPullBranchDeletable': {{.IsPullBranchDeletable}}, |
| 353 | + 'defaultDeleteBranchAfterMerge': {{$prUnit.PullRequestsConfig.DefaultDeleteBranchAfterMerge}}, |
| 354 | + 'mergeMessageFieldPlaceHolder': {{$.i18n.Tr "repo.editor.commit_message_desc"}}, |
327 | 355 |
|
328 | | - <script> |
329 | | - <!-- /* eslint-disable */ --> |
330 | | - (() => { |
331 | | - const defaultMergeTitle = {{.DefaultMergeMessage}}; |
332 | | - const defaultSquashMergeTitle = {{.DefaultSquashMergeMessage}}; |
333 | | - const defaultMergeMessage = 'Reviewed-on: ' + {{$.Issue.HTMLURL}} + '\n' + {{$approvers}}; |
334 | | - const mergeForm = { |
335 | | - 'baseLink': {{.Link}}, |
336 | | - 'textCancel': {{$.i18n.Tr "cancel"}}, |
337 | | - 'textDeleteBranch': {{$.i18n.Tr "repo.branch.delete" .HeadTarget}}, |
| 356 | + 'hasPendingPullRequestMerge': {{.HasPendingPullRequestMerge}}, |
| 357 | + 'hasPendingPullRequestMergeTip': {{$hasPendingPullRequestMergeTip}}, |
| 358 | + }; |
338 | 359 |
|
339 | | - 'allOverridableChecksOk': {{not $notAllOverridableChecksOk}}, |
340 | | - 'pullHeadCommitID': {{.PullHeadCommitID}}, |
341 | | - 'isPullBranchDeletable': {{.IsPullBranchDeletable}}, |
342 | | - 'defaultDeleteBranchAfterMerge': {{$prUnit.PullRequestsConfig.DefaultDeleteBranchAfterMerge}}, |
343 | | - 'mergeMessageFieldPlaceHolder': {{$.i18n.Tr "repo.editor.commit_message_desc"}}, |
344 | | - }; |
345 | | - mergeForm['mergeStyles'] = [ |
346 | | - { |
347 | | - 'name': 'merge', |
348 | | - 'allowed': {{$prUnit.PullRequestsConfig.AllowMerge}}, |
349 | | - 'textDoMerge': {{$.i18n.Tr "repo.pulls.merge_pull_request"}}, |
350 | | - 'mergeTitleFieldText': defaultMergeTitle, |
351 | | - 'mergeMessageFieldText': defaultMergeMessage, |
352 | | - }, |
353 | | - { |
354 | | - 'name': 'rebase', |
355 | | - 'allowed': {{$prUnit.PullRequestsConfig.AllowRebase}}, |
356 | | - 'textDoMerge': {{$.i18n.Tr "repo.pulls.rebase_merge_pull_request"}}, |
357 | | - 'hideMergeMessageTexts': true, |
358 | | - }, |
359 | | - { |
360 | | - 'name': 'rebase-merge', |
361 | | - 'allowed': {{$prUnit.PullRequestsConfig.AllowRebaseMerge}}, |
362 | | - 'textDoMerge': {{$.i18n.Tr "repo.pulls.rebase_merge_commit_pull_request"}}, |
363 | | - 'mergeTitleFieldText': defaultMergeTitle, |
364 | | - 'mergeMessageFieldText': defaultMergeMessage, |
365 | | - }, |
366 | | - { |
367 | | - 'name': 'squash', |
368 | | - 'allowed': {{$prUnit.PullRequestsConfig.AllowSquash}}, |
369 | | - 'textDoMerge': {{$.i18n.Tr "repo.pulls.squash_merge_pull_request"}}, |
370 | | - 'mergeTitleFieldText': defaultSquashMergeTitle, |
371 | | - 'mergeMessageFieldText': defaultMergeMessage, |
372 | | - }, |
373 | | - { |
374 | | - 'name': 'manually-merged', |
375 | | - 'allowed': {{and $prUnit.PullRequestsConfig.AllowManualMerge $.IsRepoAdmin}}, |
376 | | - 'textDoMerge': {{$.i18n.Tr "repo.pulls.merge_manually"}}, |
377 | | - 'hideMergeMessageTexts': true, |
378 | | - } |
379 | | - ]; |
380 | | - window.config.pageData.pullRequestMergeForm = mergeForm; |
381 | | - })(); |
382 | | - </script> |
| 360 | + const generalHideAutoMerge = mergeForm.canMergeNow && mergeForm.allOverridableChecksOk; // if this PR can be merged now, then hide the auto merge |
| 361 | + mergeForm['mergeStyles'] = [ |
| 362 | + { |
| 363 | + 'name': 'merge', |
| 364 | + 'allowed': {{$prUnit.PullRequestsConfig.AllowMerge}}, |
| 365 | + 'textDoMerge': {{$.i18n.Tr "repo.pulls.merge_pull_request"}}, |
| 366 | + 'mergeTitleFieldText': defaultMergeTitle, |
| 367 | + 'mergeMessageFieldText': defaultMergeMessage, |
| 368 | + 'hideAutoMerge': generalHideAutoMerge, |
| 369 | + }, |
| 370 | + { |
| 371 | + 'name': 'rebase', |
| 372 | + 'allowed': {{$prUnit.PullRequestsConfig.AllowRebase}}, |
| 373 | + 'textDoMerge': {{$.i18n.Tr "repo.pulls.rebase_merge_pull_request"}}, |
| 374 | + 'hideMergeMessageTexts': true, |
| 375 | + 'hideAutoMerge': generalHideAutoMerge, |
| 376 | + }, |
| 377 | + { |
| 378 | + 'name': 'rebase-merge', |
| 379 | + 'allowed': {{$prUnit.PullRequestsConfig.AllowRebaseMerge}}, |
| 380 | + 'textDoMerge': {{$.i18n.Tr "repo.pulls.rebase_merge_commit_pull_request"}}, |
| 381 | + 'mergeTitleFieldText': defaultMergeTitle, |
| 382 | + 'mergeMessageFieldText': defaultMergeMessage, |
| 383 | + 'hideAutoMerge': generalHideAutoMerge, |
| 384 | + }, |
| 385 | + { |
| 386 | + 'name': 'squash', |
| 387 | + 'allowed': {{$prUnit.PullRequestsConfig.AllowSquash}}, |
| 388 | + 'textDoMerge': {{$.i18n.Tr "repo.pulls.squash_merge_pull_request"}}, |
| 389 | + 'mergeTitleFieldText': defaultSquashMergeTitle, |
| 390 | + 'mergeMessageFieldText': defaultMergeMessage, |
| 391 | + 'hideAutoMerge': generalHideAutoMerge, |
| 392 | + }, |
| 393 | + { |
| 394 | + 'name': 'manually-merged', |
| 395 | + 'allowed': {{and $prUnit.PullRequestsConfig.AllowManualMerge $.IsRepoAdmin}}, |
| 396 | + 'textDoMerge': {{$.i18n.Tr "repo.pulls.merge_manually"}}, |
| 397 | + 'hideMergeMessageTexts': true, |
| 398 | + 'hideAutoMerge': true, |
| 399 | + } |
| 400 | + ]; |
| 401 | + window.config.pageData.pullRequestMergeForm = mergeForm; |
| 402 | + })(); |
| 403 | + </script> |
383 | 404 |
|
384 | | - <div id="pull-request-merge-form"></div> |
| 405 | + <div id="pull-request-merge-form"></div> |
385 | 406 |
|
386 | | - {{if .ShowMergeInstructions}} |
387 | | - <div class="instruct-toggle mt-3"> {{$.i18n.Tr "repo.pulls.merge_instruction_hint" | Safe}} </div> |
388 | | - <div class="instruct-content" style="display:none"> |
389 | | - <div class="ui divider"></div> |
390 | | - <div><h3 class="di">{{$.i18n.Tr "step1"}} </h3>{{$.i18n.Tr "repo.pulls.merge_instruction_step1_desc"}}</div> |
391 | | - <div class="ui secondary segment"> |
392 | | - {{if eq .Issue.PullRequest.Flow 0}} |
393 | | - <div>git checkout -b {{if ne .Issue.PullRequest.HeadRepo.ID .Issue.PullRequest.BaseRepo.ID}}{{.Issue.PullRequest.HeadRepo.OwnerName}}-{{end}}{{.Issue.PullRequest.HeadBranch}} {{.Issue.PullRequest.BaseBranch}}</div> |
394 | | - <div>git pull {{if ne .Issue.PullRequest.HeadRepo.ID .Issue.PullRequest.BaseRepo.ID}}{{.Issue.PullRequest.HeadRepo.HTMLURL}}{{else}}origin{{end}} {{.Issue.PullRequest.HeadBranch}}</div> |
395 | | - {{else}} |
396 | | - <div>git fetch origin {{.Issue.PullRequest.GetGitRefName}}:{{.Issue.PullRequest.HeadBranch}}</div> |
397 | | - {{end}} |
398 | | - </div> |
399 | | - <div><h3 class="di">{{$.i18n.Tr "step2"}} </h3>{{$.i18n.Tr "repo.pulls.merge_instruction_step2_desc"}}</div> |
400 | | - <div class="ui secondary segment"> |
401 | | - <div>git checkout {{.Issue.PullRequest.BaseBranch}}</div> |
402 | | - <div>git merge --no-ff {{if ne .Issue.PullRequest.HeadRepo.ID .Issue.PullRequest.BaseRepo.ID}}{{.Issue.PullRequest.HeadRepo.OwnerName}}-{{end}}{{.Issue.PullRequest.HeadBranch}}</div> |
403 | | - <div>git push origin {{.Issue.PullRequest.BaseBranch}}</div> |
404 | | - </div> |
405 | | - </div> |
406 | | - {{end}} |
407 | | - {{else}} |
408 | | - <div class="ui divider"></div> |
409 | | - <div class="item text red"> |
410 | | - {{svg "octicon-x"}} |
411 | | - {{$.i18n.Tr "repo.pulls.no_merge_desc"}} |
412 | | - </div> |
413 | | - <div class="item"> |
414 | | - {{svg "octicon-info"}} |
415 | | - {{$.i18n.Tr "repo.pulls.no_merge_helper"}} |
416 | | - </div> |
| 407 | + {{if .ShowMergeInstructions}} |
| 408 | + {{template "repo/issue/view_content/pull_merge_instruction" (dict "i18n" .i18n "Issue" .Issue)}} |
417 | 409 | {{end}} |
418 | 410 | {{else}} |
| 411 | + {{/* no merge style was set in repo setting: not or ($prUnit.PullRequestsConfig.AllowMerge ...) */}} |
419 | 412 | <div class="ui divider"></div> |
| 413 | + <div class="item text red"> |
| 414 | + {{svg "octicon-x"}} |
| 415 | + {{$.i18n.Tr "repo.pulls.no_merge_desc"}} |
| 416 | + </div> |
420 | 417 | <div class="item"> |
421 | 418 | {{svg "octicon-info"}} |
422 | | - {{$.i18n.Tr "repo.pulls.no_merge_access"}} |
| 419 | + {{$.i18n.Tr "repo.pulls.no_merge_helper"}} |
423 | 420 | </div> |
424 | | - {{end}} |
425 | | - {{end}} |
| 421 | + {{end}} {{/* end if the repo was set to use any merge style */}} |
| 422 | + {{else}} |
| 423 | + {{/* user is not allowed to merge */}} |
| 424 | + <div class="ui divider"></div> |
| 425 | + <div class="item"> |
| 426 | + {{svg "octicon-info"}} |
| 427 | + {{$.i18n.Tr "repo.pulls.no_merge_access"}} |
| 428 | + </div> |
| 429 | + {{end}} {{/* end if user is allowed to merge or not */}} |
426 | 430 | {{else}} |
427 | 431 | {{/* Merge conflict without specific file. Suggest manual merge, only if all reviews and status checks OK. */}} |
428 | 432 | {{if .IsBlockedByApprovals}} |
|
0 commit comments