You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

pull.tmpl 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486
  1. {{if or .PullReviewers .OriginalReviews}}
  2. <div class="comment box">
  3. <div class="content">
  4. <div class="ui segment">
  5. <h4>{{$.locale.Tr "repo.issues.review.reviewers"}}</h4>
  6. {{range .PullReviewers}}
  7. {{$createdStr:= TimeSinceUnix .Review.UpdatedUnix $.locale}}
  8. <div class="ui divider"></div>
  9. <div class="review-item">
  10. <div class="review-item-left">
  11. {{if .User}}
  12. <a href="{{.User.HomeLink}}">
  13. {{avatar $.Context .User}}
  14. </a>
  15. {{end}}
  16. <span>
  17. {{if .User}}
  18. <a href="{{.User.HomeLink}}">{{.User.GetDisplayName}}</a>
  19. {{else if .Team}}
  20. <span class="ui text">{{$.Issue.Repo.OwnerName}}/{{.Team.Name}}</span>
  21. {{end}}
  22. {{if eq .Review.Type 1}}
  23. {{$.locale.Tr "repo.issues.review.approve" $createdStr | Safe}}
  24. {{else if eq .Review.Type 2}}
  25. {{$.locale.Tr "repo.issues.review.comment" $createdStr | Safe}}
  26. {{else if eq .Review.Type 3}}
  27. {{$.locale.Tr "repo.issues.review.reject" $createdStr | Safe}}
  28. {{else if eq .Review.Type 4}}
  29. {{$.locale.Tr "repo.issues.review.wait" $createdStr | Safe}}
  30. {{else}}
  31. {{$.locale.Tr "repo.issues.review.comment" $createdStr | Safe}}
  32. {{end}}
  33. </span>
  34. </div>
  35. <div class="review-item-right">
  36. {{if .Review.Stale}}
  37. <span class="ui tooltip type-icon text grey" data-content="{{$.locale.Tr "repo.issues.is_stale"}}">
  38. {{svg "octicon-hourglass" 16 "icon"}}
  39. </span>
  40. {{end}}
  41. {{if (and $.Permission.IsAdmin (or (eq .Review.Type 1) (eq .Review.Type 3)) (not $.Issue.IsClosed))}}
  42. <a href="#" class="ui muted tooltip icon dismiss-review-btn" data-review-id="dismiss-review-{{.Review.ID}}" data-content="{{$.locale.Tr "repo.issues.dismiss_review"}}">
  43. {{svg "octicon-x" 16}}
  44. </a>
  45. <div class="ui small modal" id="dismiss-review-modal">
  46. <div class="header">
  47. {{$.locale.Tr "repo.issues.dismiss_review"}}
  48. </div>
  49. <div class="content">
  50. <div class="ui warning message text left">
  51. {{$.locale.Tr "repo.issues.dismiss_review_warning"}}
  52. </div>
  53. <form class="ui form dismiss-review-form" id="dismiss-review-{{.Review.ID}}" action="{{$.RepoLink}}/issues/dismiss_review" method="post">
  54. {{$.CsrfTokenHtml}}
  55. <input type="hidden" name="review_id" value="{{.Review.ID}}">
  56. <div class="field">
  57. <label for="message">{{$.locale.Tr "action.review_dismissed_reason"}}</label>
  58. <input id="message" name="message">
  59. </div>
  60. <div class="text right actions">
  61. <div class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</div>
  62. <button class="ui red button" type="submit">{{$.locale.Tr "ok"}}</button>
  63. </div>
  64. </form>
  65. </div>
  66. </div>
  67. {{end}}
  68. <span class="type-icon text {{if eq .Review.Type 1}}green
  69. {{- else if eq .Review.Type 2}}grey
  70. {{- else if eq .Review.Type 3}}red
  71. {{- else if eq .Review.Type 4}}yellow
  72. {{else}}grey{{end}}">
  73. {{if .CanChange}}
  74. <a href="#" class="ui tooltip icon re-request-review {{if .Checked}}checked{{end}}" data-issue-id="{{$.Issue.ID}}" data-content="{{if .Checked}} {{$.locale.Tr "repo.issues.remove_request_review"}} {{else}} {{$.locale.Tr "repo.issues.re_request_review"}} {{end}}" data-id="{{.ItemID}}" data-update-url="{{$.RepoLink}}/issues/request_review">
  75. {{if .Checked}} {{svg "octicon-trash"}} {{else}} {{svg "octicon-sync"}} {{end}}
  76. </a>
  77. {{end}}
  78. {{svg (printf "octicon-%s" .Review.Type.Icon)}}
  79. </span>
  80. </div>
  81. </div>
  82. {{end}}
  83. {{range .OriginalReviews}}
  84. {{$createdStr:= TimeSinceUnix .UpdatedUnix $.locale}}
  85. <div class="ui divider"></div>
  86. <div class="review-item">
  87. <div class="review-item-left">
  88. <a href="{{$.Repository.OriginalURL}}" class="ui tooltip" data-content="{{$.locale.Tr "repo.migrated_from_fake" ($.Repository.GetOriginalURLHostname|Escape) | Safe}}">
  89. <span class="text black ">
  90. {{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}}
  91. {{.OriginalAuthor}}
  92. </span>
  93. </a>
  94. </div>
  95. <div class="review-item-right">
  96. <span class="type-icon text {{if eq .Type 1}}green
  97. {{- else if eq .Type 2}}grey
  98. {{- else if eq .Type 3}}red
  99. {{- else if eq .Type 4}}yellow
  100. {{else}}grey{{end}}">
  101. {{svg (printf "octicon-%s" .Type.Icon)}}
  102. </span>
  103. </div>
  104. </div>
  105. {{end}}
  106. </div>
  107. </div>
  108. </div>
  109. {{end}}
  110. <div class="timeline-item comment merge box">
  111. <a class="timeline-avatar text {{if .Issue.PullRequest.HasMerged}}purple
  112. {{- else if .Issue.IsClosed}}grey
  113. {{- else if .IsPullWorkInProgress}}grey
  114. {{- else if .IsFilesConflicted}}grey
  115. {{- else if .IsPullRequestBroken}}red
  116. {{- else if .IsBlockedByApprovals}}red
  117. {{- else if .IsBlockedByRejection}}red
  118. {{- else if .IsBlockedByOfficialReviewRequests}}red
  119. {{- else if .IsBlockedByOutdatedBranch}}red
  120. {{- else if .IsBlockedByChangedProtectedFiles}}red
  121. {{- else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsFailure .RequiredStatusCheckState.IsError)}}red
  122. {{- else if and .EnableStatusCheck (or (not $.LatestCommitStatus) .RequiredStatusCheckState.IsPending .RequiredStatusCheckState.IsWarning)}}yellow
  123. {{- else if and .AllowMerge .RequireSigned (not .WillSign)}}red
  124. {{- else if .Issue.PullRequest.IsChecking}}yellow
  125. {{- else if .Issue.PullRequest.IsEmpty}}grey
  126. {{- else if .Issue.PullRequest.CanAutoMerge}}green
  127. {{- else}}red{{end}}">{{svg "octicon-git-merge" 32}}</a>
  128. <div class="content">
  129. {{template "repo/pulls/status" .}}
  130. {{$canAutoMerge := false}}
  131. <div class="ui attached merge-section segment {{if not $.LatestCommitStatus}}no-header{{end}}">
  132. {{if .Issue.PullRequest.HasMerged}}
  133. <div class="item text">
  134. {{if .Issue.PullRequest.MergedCommitID}}
  135. {{$link := printf "%s/commit/%s" $.Repository.Link (.Issue.PullRequest.MergedCommitID|PathEscape)}}
  136. {{if eq $.Issue.PullRequest.Status 3}}
  137. {{$.locale.Tr "repo.pulls.manually_merged_as" ($link|Escape) (ShortSha .Issue.PullRequest.MergedCommitID) | Safe}}
  138. {{else}}
  139. {{$.locale.Tr "repo.pulls.merged_as" ($link|Escape) (ShortSha .Issue.PullRequest.MergedCommitID) | Safe}}
  140. {{end}}
  141. {{else}}
  142. {{$.locale.Tr "repo.pulls.has_merged"}}
  143. {{end}}
  144. </div>
  145. {{if .IsPullBranchDeletable}}
  146. <div class="ui divider"></div>
  147. <div>
  148. <a class="delete-button ui red button" href="" data-url="{{.DeleteBranchLink}}">{{$.locale.Tr "repo.branch.delete" .HeadTarget}}</a>
  149. </div>
  150. {{end}}
  151. {{else if .Issue.IsClosed}}
  152. <div class="item text">
  153. {{if .IsPullRequestBroken}}
  154. {{$.locale.Tr "repo.pulls.cant_reopen_deleted_branch"}}
  155. {{else}}
  156. {{$.locale.Tr "repo.pulls.reopen_to_merge"}}
  157. {{end}}
  158. </div>
  159. {{if and .IsPullBranchDeletable ( not .IsPullRequestBroken )}}
  160. <div class="ui divider"></div>
  161. <div>
  162. <a class="delete-button ui red button" href="" data-url="{{.DeleteBranchLink}}">{{$.locale.Tr "repo.branch.delete" .HeadTarget}}</a>
  163. </div>
  164. {{end}}
  165. {{else if .IsPullFilesConflicted}}
  166. <div class="item text">
  167. {{svg "octicon-x"}}
  168. {{$.locale.Tr "repo.pulls.files_conflicted"}}
  169. <ul>
  170. {{range .ConflictedFiles}}
  171. <li>{{.}}</li>
  172. {{end}}
  173. </ul>
  174. </div>
  175. {{else if .IsPullRequestBroken}}
  176. <div class="item">
  177. <i class="icon icon-octicon">{{svg "octicon-x"}}</i>
  178. {{$.locale.Tr "repo.pulls.data_broken"}}
  179. </div>
  180. {{else if .IsPullWorkInProgress}}
  181. <div class="item toggle-wip gt-df gt-ac gt-sb" data-title="{{.Issue.Title}}" data-wip-prefix="{{(.WorkInProgressPrefix|Escape)}}" data-update-url="{{.Issue.Link}}/title">
  182. <div>
  183. <i class="icon icon-octicon">{{svg "octicon-x"}}</i>
  184. {{$.locale.Tr "repo.pulls.cannot_merge_work_in_progress"}}
  185. </div>
  186. <div>
  187. {{if or .HasIssuesOrPullsWritePermission .IsIssuePoster}}
  188. <button class="ui compact button">
  189. {{$.locale.Tr "repo.pulls.remove_prefix" (.WorkInProgressPrefix|Escape) | Safe}}
  190. </button>
  191. {{end}}
  192. </div>
  193. </div>
  194. {{template "repo/issue/view_content/update_branch_by_merge" (dict "locale" .locale "Issue" .Issue "UpdateAllowed" .UpdateAllowed "UpdateByRebaseAllowed" .UpdateByRebaseAllowed "Link" .Link)}}
  195. {{else if .Issue.PullRequest.IsChecking}}
  196. <div class="item">
  197. <i class="icon icon-octicon">{{svg "octicon-sync"}}</i>
  198. {{$.locale.Tr "repo.pulls.is_checking"}}
  199. </div>
  200. {{else if .Issue.PullRequest.IsAncestor}}
  201. <div class="item">
  202. <i class="icon icon-octicon">{{svg "octicon-alert" 16}}</i>
  203. {{$.locale.Tr "repo.pulls.is_ancestor"}}
  204. </div>
  205. {{else if or .Issue.PullRequest.CanAutoMerge .Issue.PullRequest.IsEmpty}}
  206. {{if .IsBlockedByApprovals}}
  207. <div class="item">
  208. <i class="icon icon-octicon">{{svg "octicon-x"}}</i>
  209. {{$.locale.Tr "repo.pulls.blocked_by_approvals" .GrantedApprovals .ProtectedBranch.RequiredApprovals}}
  210. </div>
  211. {{else if .IsBlockedByRejection}}
  212. <div class="item">
  213. <i class="icon icon-octicon">{{svg "octicon-x"}}</i>
  214. {{$.locale.Tr "repo.pulls.blocked_by_rejection"}}
  215. </div>
  216. {{else if .IsBlockedByOfficialReviewRequests}}
  217. <div class="item">
  218. <i class="icon icon-octicon">{{svg "octicon-x"}}</i>
  219. {{$.locale.Tr "repo.pulls.blocked_by_official_review_requests"}}
  220. </div>
  221. {{else if .IsBlockedByOutdatedBranch}}
  222. <div class="item">
  223. <i class="icon icon-octicon">{{svg "octicon-x"}}</i>
  224. {{$.locale.Tr "repo.pulls.blocked_by_outdated_branch"}}
  225. </div>
  226. {{else if .IsBlockedByChangedProtectedFiles}}
  227. <div class="item">
  228. <i class="icon icon-octicon">{{svg "octicon-x" 16}}</i>
  229. {{$.locale.TrN $.ChangedProtectedFilesNum "repo.pulls.blocked_by_changed_protected_files_1" "repo.pulls.blocked_by_changed_protected_files_n" | Safe}}
  230. <ul>
  231. {{range .ChangedProtectedFiles}}
  232. <li>{{.}}</li>
  233. {{end}}
  234. </ul>
  235. </div>
  236. {{else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsError .RequiredStatusCheckState.IsFailure)}}
  237. <div class="item">
  238. <i class="icon icon-octicon">{{svg "octicon-x"}}</i>
  239. {{$.locale.Tr "repo.pulls.required_status_check_failed"}}
  240. </div>
  241. {{else if and .EnableStatusCheck (not .RequiredStatusCheckState.IsSuccess)}}
  242. <div class="item">
  243. <i class="icon icon-octicon">{{svg "octicon-x"}}</i>
  244. {{$.locale.Tr "repo.pulls.required_status_check_missing"}}
  245. </div>
  246. {{else if and .AllowMerge .RequireSigned (not .WillSign)}}
  247. <div class="item">
  248. <i class="icon icon-octicon">{{svg "octicon-x"}}</i>
  249. {{$.locale.Tr "repo.pulls.require_signed_wont_sign"}}
  250. </div>
  251. <div class="item">
  252. <i class="icon unlock"></i>
  253. {{$.locale.Tr (printf "repo.signing.wont_sign.%s" .WontSignReason)}}
  254. </div>
  255. {{end}}
  256. {{$notAllOverridableChecksOk := or .IsBlockedByApprovals .IsBlockedByRejection .IsBlockedByOfficialReviewRequests .IsBlockedByOutdatedBranch .IsBlockedByChangedProtectedFiles (and .EnableStatusCheck (not .RequiredStatusCheckState.IsSuccess))}}
  257. {{/* admin can merge without checks, writer can merge when checks 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. {{if $canMergeNow}}
  261. {{if $notAllOverridableChecksOk}}
  262. <div class="item">
  263. <i class="icon icon-octicon">{{svg "octicon-dot-fill"}}</i>
  264. {{$.locale.Tr "repo.pulls.required_status_check_administrator"}}
  265. </div>
  266. {{else}}
  267. <div class="item">
  268. <i class="icon icon-octicon">{{svg "octicon-check"}}</i>
  269. {{$.locale.Tr "repo.pulls.can_auto_merge_desc"}}
  270. </div>
  271. {{end}}
  272. {{if .WillSign}}
  273. <div class="item">
  274. <i class="icon lock green"></i>
  275. {{$.locale.Tr "repo.signing.will_sign" .SigningKey}}
  276. </div>
  277. {{else if .IsSigned}}
  278. <div class="item">
  279. <i class="icon unlock"></i>
  280. {{$.locale.Tr (printf "repo.signing.wont_sign.%s" .WontSignReason)}}
  281. </div>
  282. {{end}}
  283. {{end}}
  284. {{template "repo/issue/view_content/update_branch_by_merge" (dict "locale" .locale "Issue" .Issue "UpdateAllowed" .UpdateAllowed "UpdateByRebaseAllowed" .UpdateByRebaseAllowed "Link" .Link)}}
  285. {{if .Issue.PullRequest.IsEmpty}}
  286. <div class="ui divider"></div>
  287. <div class="item">
  288. <i class="icon icon-octicon">{{svg "octicon-alert" 16}}</i>
  289. {{$.locale.Tr "repo.pulls.is_empty"}}
  290. </div>
  291. {{end}}
  292. {{if .AllowMerge}} {{/* user is allowed to merge */}}
  293. {{$prUnit := .Repository.MustGetUnit $.Context $.UnitTypePullRequests}}
  294. {{$approvers := .Issue.PullRequest.GetApprovers}}
  295. {{if or $prUnit.PullRequestsConfig.AllowMerge $prUnit.PullRequestsConfig.AllowRebase $prUnit.PullRequestsConfig.AllowRebaseMerge $prUnit.PullRequestsConfig.AllowSquash}}
  296. {{$hasPendingPullRequestMergeTip := ""}}
  297. {{if .HasPendingPullRequestMerge}}
  298. {{$createdPRMergeStr := TimeSinceUnix .PendingPullRequestMerge.CreatedUnix $.locale}}
  299. {{$hasPendingPullRequestMergeTip = $.locale.Tr "repo.pulls.auto_merge_has_pending_schedule" .PendingPullRequestMerge.Doer.Name $createdPRMergeStr}}
  300. {{end}}
  301. <div class="ui divider"></div>
  302. <script type="module">
  303. const issueUrl = window.location.origin + {{$.Issue.Link}};
  304. const defaultMergeTitle = {{.DefaultMergeMessage}};
  305. const defaultSquashMergeTitle = {{.DefaultSquashMergeMessage}};
  306. const defaultMergeMessage = {{if .DefaultMergeBody}}{{.DefaultMergeBody}}{{else}}`Reviewed-on: ${issueUrl}\n` + {{$approvers}}{{end}};
  307. const defaultSquashMergeMessage = {{if .DefaultSquashMergeBody}}{{.DefaultSquashMergeBody}}{{else}}`Reviewed-on: ${issueUrl}\n` + {{$approvers}}{{end}};
  308. const mergeForm = {
  309. 'baseLink': {{.Link}},
  310. 'textCancel': {{$.locale.Tr "cancel"}},
  311. 'textDeleteBranch': {{$.locale.Tr "repo.branch.delete" .HeadTarget}},
  312. 'textAutoMergeButtonWhenSucceed': {{$.locale.Tr "repo.pulls.auto_merge_button_when_succeed"}},
  313. 'textAutoMergeWhenSucceed': {{$.locale.Tr "repo.pulls.auto_merge_when_succeed"}},
  314. 'textAutoMergeCancelSchedule': {{$.locale.Tr "repo.pulls.auto_merge_cancel_schedule"}},
  315. 'textClearMergeMessage': {{$.locale.Tr "repo.pulls.clear_merge_message"}},
  316. 'textClearMergeMessageHint': {{$.locale.Tr "repo.pulls.clear_merge_message_hint"}},
  317. 'canMergeNow': {{$canMergeNow}},
  318. 'allOverridableChecksOk': {{not $notAllOverridableChecksOk}},
  319. 'emptyCommit': {{.Issue.PullRequest.IsEmpty}},
  320. 'pullHeadCommitID': {{.PullHeadCommitID}},
  321. 'isPullBranchDeletable': {{.IsPullBranchDeletable}},
  322. 'defaultMergeStyle': {{.MergeStyle}},
  323. 'defaultDeleteBranchAfterMerge': {{$prUnit.PullRequestsConfig.DefaultDeleteBranchAfterMerge}},
  324. 'mergeMessageFieldPlaceHolder': {{$.locale.Tr "repo.editor.commit_message_desc"}},
  325. 'defaultMergeMessage': defaultMergeMessage,
  326. 'hasPendingPullRequestMerge': {{.HasPendingPullRequestMerge}},
  327. 'hasPendingPullRequestMergeTip': {{$hasPendingPullRequestMergeTip}},
  328. };
  329. const generalHideAutoMerge = mergeForm.canMergeNow && mergeForm.allOverridableChecksOk; // if this pr can be merged now, then hide the auto merge
  330. mergeForm['mergeStyles'] = [
  331. {
  332. 'name': 'merge',
  333. 'allowed': {{$prUnit.PullRequestsConfig.AllowMerge}},
  334. 'textDoMerge': {{$.locale.Tr "repo.pulls.merge_pull_request"}},
  335. 'mergeTitleFieldText': defaultMergeTitle,
  336. 'mergeMessageFieldText': defaultMergeMessage,
  337. 'hideAutoMerge': generalHideAutoMerge,
  338. },
  339. {
  340. 'name': 'rebase',
  341. 'allowed': {{$prUnit.PullRequestsConfig.AllowRebase}},
  342. 'textDoMerge': {{$.locale.Tr "repo.pulls.rebase_merge_pull_request"}},
  343. 'hideMergeMessageTexts': true,
  344. 'hideAutoMerge': generalHideAutoMerge,
  345. },
  346. {
  347. 'name': 'rebase-merge',
  348. 'allowed': {{$prUnit.PullRequestsConfig.AllowRebaseMerge}},
  349. 'textDoMerge': {{$.locale.Tr "repo.pulls.rebase_merge_commit_pull_request"}},
  350. 'mergeTitleFieldText': defaultMergeTitle,
  351. 'mergeMessageFieldText': defaultMergeMessage,
  352. 'hideAutoMerge': generalHideAutoMerge,
  353. },
  354. {
  355. 'name': 'squash',
  356. 'allowed': {{$prUnit.PullRequestsConfig.AllowSquash}},
  357. 'textDoMerge': {{$.locale.Tr "repo.pulls.squash_merge_pull_request"}},
  358. 'mergeTitleFieldText': defaultSquashMergeTitle,
  359. 'mergeMessageFieldText': {{.GetCommitMessages}} + defaultSquashMergeMessage,
  360. 'hideAutoMerge': generalHideAutoMerge,
  361. },
  362. {
  363. 'name': 'manually-merged',
  364. 'allowed': {{and $prUnit.PullRequestsConfig.AllowManualMerge $.IsRepoAdmin}},
  365. 'textDoMerge': {{$.locale.Tr "repo.pulls.merge_manually"}},
  366. 'hideMergeMessageTexts': true,
  367. 'hideAutoMerge': true,
  368. }
  369. ];
  370. window.config.pageData.pullRequestMergeForm = mergeForm;
  371. </script>
  372. <div id="pull-request-merge-form"></div>
  373. {{else}}
  374. {{/* no merge style was set in repo setting: not or ($prUnit.PullRequestsConfig.AllowMerge ...) */}}
  375. <div class="ui divider"></div>
  376. <div class="item text red">
  377. {{svg "octicon-x"}}
  378. {{$.locale.Tr "repo.pulls.no_merge_desc"}}
  379. </div>
  380. <div class="item">
  381. {{svg "octicon-info"}}
  382. {{$.locale.Tr "repo.pulls.no_merge_helper"}}
  383. </div>
  384. {{end}} {{/* end if the repo was set to use any merge style */}}
  385. {{else}}
  386. {{/* user is not allowed to merge */}}
  387. <div class="ui divider"></div>
  388. <div class="item">
  389. {{svg "octicon-info"}}
  390. {{$.locale.Tr "repo.pulls.no_merge_access"}}
  391. </div>
  392. {{end}} {{/* end if user is allowed to merge or not */}}
  393. {{else}}
  394. {{/* Merge conflict without specific file. Suggest manual merge, only if all reviews and status checks OK. */}}
  395. {{if .IsBlockedByApprovals}}
  396. <div class="item text red">
  397. {{svg "octicon-x"}}
  398. {{$.locale.Tr "repo.pulls.blocked_by_approvals" .GrantedApprovals .ProtectedBranch.RequiredApprovals}}
  399. </div>
  400. {{else if .IsBlockedByRejection}}
  401. <div class="item text red">
  402. {{svg "octicon-x"}}
  403. {{$.locale.Tr "repo.pulls.blocked_by_rejection"}}
  404. </div>
  405. {{else if .IsBlockedByOfficialReviewRequests}}
  406. <div class="item text red">
  407. {{svg "octicon-x"}}
  408. {{$.locale.Tr "repo.pulls.blocked_by_official_review_requests"}}
  409. </div>
  410. {{else if .IsBlockedByOutdatedBranch}}
  411. <div class="item text red">
  412. <i class="icon icon-octicon">{{svg "octicon-x"}}</i>
  413. {{$.locale.Tr "repo.pulls.blocked_by_outdated_branch"}}
  414. </div>
  415. {{else if .IsBlockedByChangedProtectedFiles}}
  416. <div class="item text red">
  417. <i class="icon icon-octicon">{{svg "octicon-x" 16}}</i>
  418. {{$.locale.TrN $.ChangedProtectedFilesNum "repo.pulls.blocked_by_changed_protected_files_1" "repo.pulls.blocked_by_changed_protected_files_n" | Safe}}
  419. <ul>
  420. {{range .ChangedProtectedFiles}}
  421. <li>{{.}}</li>
  422. {{end}}
  423. </ul>
  424. </div>
  425. {{else if and .EnableStatusCheck (not .RequiredStatusCheckState.IsSuccess)}}
  426. <div class="item text red">
  427. {{svg "octicon-x"}}
  428. {{$.locale.Tr "repo.pulls.required_status_check_failed"}}
  429. </div>
  430. {{else if and .RequireSigned (not .WillSign)}}
  431. <div class="item text red">
  432. {{svg "octicon-x"}}
  433. {{$.locale.Tr "repo.pulls.require_signed_wont_sign"}}
  434. </div>
  435. {{else}}
  436. <div class="item text red">
  437. {{svg "octicon-x"}}
  438. {{$.locale.Tr "repo.pulls.cannot_auto_merge_desc"}}
  439. </div>
  440. <div class="item">
  441. {{svg "octicon-info"}}
  442. {{$.locale.Tr "repo.pulls.cannot_auto_merge_helper"}}
  443. </div>
  444. {{end}}
  445. {{end}}
  446. {{if $.StillCanManualMerge}}
  447. <div class="ui divider"></div>
  448. <div class="ui form manually-merged-fields gt-hidden">
  449. <form action="{{.Link}}/merge" method="post">
  450. {{.CsrfTokenHtml}}
  451. <div class="field">
  452. <input type="text" name="merge_commit_id" placeholder="{{$.locale.Tr "repo.pulls.merge_commit_id"}}">
  453. </div>
  454. <button class="ui red button" type="submit" name="do" value="manually-merged">
  455. {{$.locale.Tr "repo.pulls.merge_manually"}}
  456. </button>
  457. <button class="ui button merge-cancel">
  458. {{$.locale.Tr "cancel"}}
  459. </button>
  460. </form>
  461. </div>
  462. <div class="ui red buttons merge-button">
  463. <button class="ui button" data-do="manually-merged">
  464. {{$.locale.Tr "repo.pulls.merge_manually"}}
  465. </button>
  466. </div>
  467. {{end}}
  468. {{if and .ShowMergeInstructions .Issue.PullRequest.HeadRepo}}
  469. {{template "repo/issue/view_content/pull_merge_instruction" (dict "locale" .locale "Issue" .Issue)}}
  470. {{end}}
  471. </div>
  472. </div>
  473. </div>