|
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