Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

pull.tmpl 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. {{if gt (len .PullReviewers) 0}}
  2. <div class="comment box">
  3. <div class="content">
  4. <div class="ui segment">
  5. <h4>{{$.i18n.Tr "repo.issues.review.reviewers"}}</h4>
  6. {{range .PullReviewers}}
  7. {{ $createdStr:= TimeSinceUnix .UpdatedUnix $.Lang }}
  8. <div class="ui divider"></div>
  9. <div class="review-item">
  10. <span class="type-icon text {{if eq .Type 1}}green
  11. {{- else if eq .Type 2}}grey
  12. {{- else if eq .Type 3}}red
  13. {{- else if eq .Type 4}}yellow
  14. {{else}}grey{{end}}">
  15. {{$canChoose := false}}
  16. {{if eq .Type 4}}
  17. {{if or (eq .ReviewerID $.SignedUserID) $.Permission.IsAdmin}}
  18. {{$canChoose = true}}
  19. {{end}}
  20. {{else}}
  21. {{if and (or $.IsIssuePoster $.CanChooseReviewer) (not (eq $.SignedUserID .ReviewerID))}}
  22. {{$canChoose = true}}
  23. {{end}}
  24. {{end}}
  25. {{if $canChoose }}
  26. <a href="#" class="ui poping up icon re-request-review" data-is-checked="{{if eq .Type 4}}remove{{else}}add{{end}}" data-issue-id="{{$.Issue.ID}}" data-content="{{ if eq .Type 4 }} {{$.i18n.Tr "repo.issues.remove_request_review"}} {{else}} {{$.i18n.Tr "repo.issues.re_request_review"}} {{end}}" data-id="{{.ReviewerID}}" data-update-url="{{$.RepoLink}}/issues/request_review">
  27. {{svg "octicon-sync" 16}}
  28. </a>
  29. {{end}}
  30. {{svg (printf "octicon-%s" .Type.Icon) 16}}
  31. </span>
  32. {{if .Stale}}
  33. <span class="type-icon text grey">
  34. <i class="octicon icon fa-hourglass-end"></i>
  35. </span>
  36. {{end}}
  37. <a class="ui avatar image" href="{{.Reviewer.HomeLink}}">
  38. <img src="{{.Reviewer.RelAvatarLink}}">
  39. </a>
  40. <span class="text grey"><a href="{{.Reviewer.HomeLink}}">{{.Reviewer.Name}}</a>
  41. {{if eq .Type 1}}
  42. {{$.i18n.Tr "repo.issues.review.approve" $createdStr | Safe}}
  43. {{else if eq .Type 2}}
  44. {{$.i18n.Tr "repo.issues.review.comment" $createdStr | Safe}}
  45. {{else if eq .Type 3}}
  46. {{$.i18n.Tr "repo.issues.review.reject" $createdStr | Safe}}
  47. {{else if eq .Type 4}}
  48. {{$.i18n.Tr "repo.issues.review.wait" $createdStr | Safe}}
  49. {{else}}
  50. {{$.i18n.Tr "repo.issues.review.comment" $createdStr | Safe}}
  51. {{end}}
  52. </span>
  53. </div>
  54. {{end}}
  55. </div>
  56. </div>
  57. </div>
  58. {{end}}
  59. <div class="timeline-item comment merge box">
  60. <a class="timeline-avatar text {{if .Issue.PullRequest.HasMerged}}purple
  61. {{- else if .Issue.IsClosed}}grey
  62. {{- else if .IsPullWorkInProgress}}grey
  63. {{- else if .IsFilesConflicted}}grey
  64. {{- else if .IsPullRequestBroken}}red
  65. {{- else if .IsBlockedByApprovals}}red
  66. {{- else if .IsBlockedByRejection}}red
  67. {{- else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsFailure .RequiredStatusCheckState.IsError)}}red
  68. {{- else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsPending .RequiredStatusCheckState.IsWarning)}}yellow
  69. {{- else if and .RequireSigned (not .WillSign)}}}red
  70. {{- else if .Issue.PullRequest.IsChecking}}yellow
  71. {{- else if .Issue.PullRequest.CanAutoMerge}}green
  72. {{- else}}red{{end}}">{{svg "octicon-git-merge" 32}}</a>
  73. <div class="content">
  74. {{template "repo/pulls/status" .}}
  75. <div class="ui {{if not $.LatestCommitStatus}}top attached header{{else}}attached merge-section segment{{end}}">
  76. {{if .Issue.PullRequest.HasMerged}}
  77. <div class="item text purple">
  78. {{if .Issue.PullRequest.MergedCommitID}}
  79. {{$link := printf "%s/commit/%s" $.Repository.HTMLURL .Issue.PullRequest.MergedCommitID}}
  80. {{$.i18n.Tr "repo.pulls.merged_as" $link (ShortSha .Issue.PullRequest.MergedCommitID) | Safe}}
  81. {{else}}
  82. {{$.i18n.Tr "repo.pulls.has_merged"}}
  83. {{end}}
  84. </div>
  85. {{if .IsPullBranchDeletable}}
  86. <div class="ui divider"></div>
  87. <div>
  88. <a class="delete-button ui red button" href="" data-url="{{.DeleteBranchLink}}">{{$.i18n.Tr "repo.branch.delete" .HeadTarget}}</a>
  89. </div>
  90. {{end}}
  91. {{else if .Issue.IsClosed}}
  92. <div class="item text grey">
  93. {{if .IsPullRequestBroken}}
  94. {{$.i18n.Tr "repo.pulls.cant_reopen_deleted_branch"}}
  95. {{else}}
  96. {{$.i18n.Tr "repo.pulls.reopen_to_merge"}}
  97. {{end}}
  98. </div>
  99. {{if and .IsPullBranchDeletable ( not .IsPullRequestBroken )}}
  100. <div class="ui divider"></div>
  101. <div>
  102. <a class="delete-button ui red button" href="" data-url="{{.DeleteBranchLink}}">{{$.i18n.Tr "repo.branch.delete" .HeadTarget}}</a>
  103. </div>
  104. {{end}}
  105. {{else if .IsPullFilesConflicted}}
  106. <div class="item text grey">
  107. {{svg "octicon-x" 16}}
  108. {{$.i18n.Tr "repo.pulls.files_conflicted"}}
  109. {{range .ConflictedFiles}}
  110. <div>{{.}}</div>
  111. {{end}}
  112. </div>
  113. {{else if .IsPullRequestBroken}}
  114. <div class="item text red">
  115. <i class="icon icon-octicon">{{svg "octicon-x" 16}}</i>
  116. {{$.i18n.Tr "repo.pulls.data_broken"}}
  117. </div>
  118. {{else if .IsPullWorkInProgress}}
  119. <div class="item text grey">
  120. <i class="icon icon-octicon">{{svg "octicon-x" 16}}</i>
  121. {{$.i18n.Tr "repo.pulls.cannot_merge_work_in_progress" .WorkInProgressPrefix | Str2html}}
  122. </div>
  123. {{else if .Issue.PullRequest.IsChecking}}
  124. <div class="item text yellow">
  125. <i class="icon icon-octicon">{{svg "octicon-sync" 16}}</i>
  126. {{$.i18n.Tr "repo.pulls.is_checking"}}
  127. </div>
  128. {{else if .Issue.PullRequest.CanAutoMerge}}
  129. {{if .IsBlockedByApprovals}}
  130. <div class="item text red">
  131. <i class="icon icon-octicon">{{svg "octicon-x" 16}}</i>
  132. {{$.i18n.Tr "repo.pulls.blocked_by_approvals" .GrantedApprovals .Issue.PullRequest.ProtectedBranch.RequiredApprovals}}
  133. </div>
  134. {{else if .IsBlockedByRejection}}
  135. <div class="item text red">
  136. <i class="icon icon-octicon">{{svg "octicon-x" 16}}</i>
  137. {{$.i18n.Tr "repo.pulls.blocked_by_rejection"}}
  138. </div>
  139. {{else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsError .RequiredStatusCheckState.IsFailure)}}
  140. <div class="item text red">
  141. <i class="icon icon-octicon">{{svg "octicon-x" 16}}</i>
  142. {{$.i18n.Tr "repo.pulls.required_status_check_failed"}}
  143. </div>
  144. {{else if and .RequireSigned (not .WillSign)}}
  145. <div class="item text red">
  146. <i class="icon icon-octicon">{{svg "octicon-x" 16}}</i>
  147. {{$.i18n.Tr "repo.pulls.require_signed_wont_sign"}}
  148. </div>
  149. <div class="item text yellow">
  150. <i class="icon unlock"></i>
  151. {{$.i18n.Tr (printf "repo.signing.wont_sign.%s" .WontSignReason) }}
  152. </div>
  153. {{end}}
  154. {{$notAllOverridableChecksOk := or .IsBlockedByApprovals .IsBlockedByRejection (and .EnableStatusCheck (not .IsRequiredStatusCheckSuccess))}}
  155. {{if and (or $.IsRepoAdmin (not $notAllOverridableChecksOk)) (or (not .RequireSigned) .WillSign)}}
  156. {{if $notAllOverridableChecksOk}}
  157. <div class="item text yellow">
  158. <i class="icon icon-octicon">{{svg "octicon-primitive-dot" 16}}</i>
  159. {{$.i18n.Tr "repo.pulls.required_status_check_administrator"}}
  160. </div>
  161. {{else}}
  162. <div class="item text green">
  163. <i class="icon icon-octicon">{{svg "octicon-check" 16}}</i>
  164. {{$.i18n.Tr "repo.pulls.can_auto_merge_desc"}}
  165. </div>
  166. {{end}}
  167. {{if .WillSign}}
  168. <div class="item text green">
  169. <i class="icon lock green"></i>
  170. {{$.i18n.Tr "repo.signing.will_sign" .SigningKey}}
  171. </div>
  172. {{else if .IsSigned}}
  173. <div class="item text">
  174. <i class="icon unlock"></i>
  175. {{$.i18n.Tr (printf "repo.signing.wont_sign.%s" .WontSignReason) }}
  176. </div>
  177. {{end}}
  178. {{if .AllowMerge}}
  179. {{$prUnit := .Repository.MustGetUnit $.UnitTypePullRequests}}
  180. {{$approvers := .Issue.PullRequest.GetApprovers}}
  181. {{if or $prUnit.PullRequestsConfig.AllowMerge $prUnit.PullRequestsConfig.AllowRebase $prUnit.PullRequestsConfig.AllowRebaseMerge $prUnit.PullRequestsConfig.AllowSquash}}
  182. <div class="ui divider"></div>
  183. {{if $prUnit.PullRequestsConfig.AllowMerge}}
  184. <div class="ui form merge-fields" style="display: none">
  185. <form action="{{.Link}}/merge" method="post">
  186. {{.CsrfTokenHtml}}
  187. <div class="field">
  188. <input type="text" name="merge_title_field" value="{{.Issue.PullRequest.GetDefaultMergeMessage}}">
  189. </div>
  190. <div class="field">
  191. <textarea name="merge_message_field" rows="5" placeholder="{{$.i18n.Tr "repo.editor.commit_message_desc"}}">Reviewed-on: {{$.Issue.HTMLURL}}&#13;&#10;{{$approvers}}</textarea>
  192. </div>
  193. <button class="ui green button" type="submit" name="do" value="merge">
  194. {{$.i18n.Tr "repo.pulls.merge_pull_request"}}
  195. </button>
  196. <button class="ui button merge-cancel">
  197. {{$.i18n.Tr "cancel"}}
  198. </button>
  199. </form>
  200. </div>
  201. {{end}}
  202. {{if $prUnit.PullRequestsConfig.AllowRebase}}
  203. <div class="ui form rebase-fields" style="display: none">
  204. <form action="{{.Link}}/merge" method="post">
  205. {{.CsrfTokenHtml}}
  206. <button class="ui green button" type="submit" name="do" value="rebase">
  207. {{$.i18n.Tr "repo.pulls.rebase_merge_pull_request"}}
  208. </button>
  209. <button class="ui button merge-cancel">
  210. {{$.i18n.Tr "cancel"}}
  211. </button>
  212. </form>
  213. </div>
  214. {{end}}
  215. {{if $prUnit.PullRequestsConfig.AllowRebaseMerge}}
  216. <div class="ui form rebase-merge-fields" style="display: none">
  217. <form action="{{.Link}}/merge" method="post">
  218. {{.CsrfTokenHtml}}
  219. <div class="field">
  220. <input type="text" name="merge_title_field" value="{{.Issue.PullRequest.GetDefaultMergeMessage}}">
  221. </div>
  222. <div class="field">
  223. <textarea name="merge_message_field" rows="5" placeholder="{{$.i18n.Tr "repo.editor.commit_message_desc"}}">Reviewed-on: {{$.Issue.HTMLURL}}&#13;&#10;{{$approvers}}</textarea>
  224. </div>
  225. <button class="ui green button" type="submit" name="do" value="rebase-merge">
  226. {{$.i18n.Tr "repo.pulls.rebase_merge_commit_pull_request"}}
  227. </button>
  228. <button class="ui button merge-cancel">
  229. {{$.i18n.Tr "cancel"}}
  230. </button>
  231. </form>
  232. </div>
  233. {{end}}
  234. {{if $prUnit.PullRequestsConfig.AllowSquash}}
  235. <div class="ui form squash-fields" style="display: none">
  236. <form action="{{.Link}}/merge" method="post">
  237. {{.CsrfTokenHtml}}
  238. <div class="field">
  239. <input type="text" name="merge_title_field" value="{{.Issue.PullRequest.GetDefaultSquashMessage}}">
  240. </div>
  241. <div class="field">
  242. <textarea name="merge_message_field" rows="5" placeholder="{{$.i18n.Tr "repo.editor.commit_message_desc"}}">{{.GetCommitMessages}}Reviewed-on: {{$.Issue.HTMLURL}}&#13;&#10;{{$approvers}}</textarea>
  243. </div>
  244. <button class="ui green button" type="submit" name="do" value="squash">
  245. {{$.i18n.Tr "repo.pulls.squash_merge_pull_request"}}
  246. </button>
  247. <button class="ui button merge-cancel">
  248. {{$.i18n.Tr "cancel"}}
  249. </button>
  250. </form>
  251. </div>
  252. {{end}}
  253. <div class="ui {{if $notAllOverridableChecksOk}}red{{else}}green{{end}} buttons merge-button">
  254. <button class="ui button" data-do="{{.MergeStyle}}">
  255. {{svg "octicon-git-merge" 16}}
  256. <span class="button-text">
  257. {{if eq .MergeStyle "merge"}}
  258. {{$.i18n.Tr "repo.pulls.merge_pull_request"}}
  259. {{end}}
  260. {{if eq .MergeStyle "rebase"}}
  261. {{$.i18n.Tr "repo.pulls.rebase_merge_pull_request"}}
  262. {{end}}
  263. {{if eq .MergeStyle "rebase-merge"}}
  264. {{$.i18n.Tr "repo.pulls.rebase_merge_commit_pull_request"}}
  265. {{end}}
  266. {{if eq .MergeStyle "squash"}}
  267. {{$.i18n.Tr "repo.pulls.squash_merge_pull_request"}}
  268. {{end}}
  269. </span>
  270. </button>
  271. <div class="ui dropdown icon button">
  272. <i class="dropdown icon"></i>
  273. <div class="menu">
  274. {{if $prUnit.PullRequestsConfig.AllowMerge}}
  275. <div class="item{{if eq .MergeStyle "merge"}} active selected{{end}}" data-do="merge">{{$.i18n.Tr "repo.pulls.merge_pull_request"}}</div>
  276. {{end}}
  277. {{if $prUnit.PullRequestsConfig.AllowRebase}}
  278. <div class="item{{if eq .MergeStyle "rebase"}} active selected{{end}}" data-do="rebase">{{$.i18n.Tr "repo.pulls.rebase_merge_pull_request"}}</div>
  279. {{end}}
  280. {{if $prUnit.PullRequestsConfig.AllowRebaseMerge}}
  281. <div class="item{{if eq .MergeStyle "rebase-merge"}} active selected{{end}}" data-do="rebase-merge">{{$.i18n.Tr "repo.pulls.rebase_merge_commit_pull_request"}}</div>
  282. {{end}}
  283. {{if $prUnit.PullRequestsConfig.AllowSquash}}
  284. <div class="item{{if eq .MergeStyle "squash"}} active selected{{end}}" data-do="squash">{{$.i18n.Tr "repo.pulls.squash_merge_pull_request"}}</div>
  285. {{end}}
  286. </div>
  287. </div>
  288. </div>
  289. {{else}}
  290. <div class="item text red">
  291. {{svg "octicon-x" 16}}
  292. {{$.i18n.Tr "repo.pulls.no_merge_desc"}}
  293. </div>
  294. <div class="item text grey">
  295. {{svg "octicon-info" 16}}
  296. {{$.i18n.Tr "repo.pulls.no_merge_helper"}}
  297. </div>
  298. {{end}}
  299. {{else}}
  300. <div class="item text grey">
  301. {{svg "octicon-info" 16}}
  302. {{$.i18n.Tr "repo.pulls.no_merge_access"}}
  303. </div>
  304. {{end}}
  305. {{end}}
  306. {{if and .Divergence (gt .Divergence.Behind 0)}}
  307. <div class="ui very compact branch-update grid">
  308. <div class="row">
  309. <div class="item text gray eleven wide left floated column">
  310. <i class="icon icon-octicon">{{svg "octicon-alert" 16}}</i>
  311. {{$.i18n.Tr "repo.pulls.outdated_with_base_branch"}}
  312. </div>
  313. {{if .UpdateAllowed}}
  314. <div class="item text five wide right floated column">
  315. <form action="{{.Link}}/update" method="post">
  316. {{.CsrfTokenHtml}}
  317. <button class="ui button" data-do="update">
  318. <span class="item text">{{$.i18n.Tr "repo.pulls.update_branch"}}</span>
  319. </button>
  320. </form>
  321. </div>
  322. {{end}}
  323. </div>
  324. </div>
  325. {{end}}
  326. {{else}}
  327. {{/* Merge conflict without specific file. Suggest manual merge, only if all reviews and status checks OK. */}}
  328. {{if .IsBlockedByApprovals}}
  329. <div class="item text red">
  330. {{svg "octicon-x" 16}}
  331. {{$.i18n.Tr "repo.pulls.blocked_by_approvals" .GrantedApprovals .Issue.PullRequest.ProtectedBranch.RequiredApprovals}}
  332. </div>
  333. {{else if .IsBlockedByRejection}}
  334. <div class="item text red">
  335. {{svg "octicon-x" 16}}
  336. {{$.i18n.Tr "repo.pulls.blocked_by_rejection"}}
  337. </div>
  338. {{else if and .EnableStatusCheck (not .IsRequiredStatusCheckSuccess)}}
  339. <div class="item text red">
  340. {{svg "octicon-x" 16}}
  341. {{$.i18n.Tr "repo.pulls.required_status_check_failed"}}
  342. </div>
  343. {{else if and .RequireSigned (not .WillSign)}}
  344. <div class="item text red">
  345. {{svg "octicon-x" 16}}
  346. {{$.i18n.Tr "repo.pulls.require_signed_wont_sign"}}
  347. </div>
  348. {{else}}
  349. <div class="item text red">
  350. {{svg "octicon-x" 16}}
  351. {{$.i18n.Tr "repo.pulls.cannot_auto_merge_desc"}}
  352. </div>
  353. <div class="item text grey">
  354. {{svg "octicon-info" 16}}
  355. {{$.i18n.Tr "repo.pulls.cannot_auto_merge_helper"}}
  356. </div>
  357. {{end}}
  358. {{end}}
  359. </div>
  360. </div>
  361. </div>