this repo has no description
1{{ define "title" }}
2 {{ .Pull.Title }} · pull #{{ .Pull.PullId }} · {{ .RepoInfo.FullName }}
3{{ end }}
4
5{{ define "extrameta" }}
6 {{ template "repo/pulls/fragments/og" (dict "RepoInfo" .RepoInfo "Pull" .Pull) }}
7{{ end }}
8
9{{ define "repoContentLayout" }}
10 <div class="grid grid-cols-1 md:grid-cols-10 gap-4 w-full">
11 <div class="col-span-1 md:col-span-8">
12 <section class="bg-white dark:bg-gray-800 p-6 rounded relative w-full mx-auto dark:text-white">
13 {{ block "repoContent" . }}{{ end }}
14 </section>
15 {{ block "repoAfter" . }}{{ end }}
16 </div>
17 <div class="col-span-1 md:col-span-2 flex flex-col gap-6">
18 {{ template "repo/fragments/labelPanel"
19 (dict "RepoInfo" $.RepoInfo
20 "Defs" $.LabelDefs
21 "Subject" $.Pull.AtUri
22 "State" $.Pull.Labels) }}
23 {{ template "repo/fragments/participants" $.Pull.Participants }}
24 {{ template "repo/fragments/backlinks"
25 (dict "RepoInfo" $.RepoInfo
26 "Backlinks" $.Backlinks) }}
27 {{ template "repo/fragments/externalLinkPanel" $.Pull.AtUri }}
28 </div>
29 </div>
30{{ end }}
31
32{{ define "repoContent" }}
33 {{ template "repo/pulls/fragments/pullHeader" . }}
34
35 {{ if .Pull.IsStacked }}
36 <div class="mt-8">
37 {{ template "repo/pulls/fragments/pullStack" . }}
38 </div>
39 {{ end }}
40{{ end }}
41
42{{ define "repoAfter" }}
43 <section id="submissions" class="mt-4">
44 <div class="flex flex-col gap-4">
45 {{ block "submissions" . }} {{ end }}
46 </div>
47 </section>
48
49 <div id="pull-close"></div>
50 <div id="pull-reopen"></div>
51{{ end }}
52
53{{ define "submissions" }}
54 {{ $lastIdx := sub (len .Pull.Submissions) 1 }}
55 {{ $targetBranch := .Pull.TargetBranch }}
56 {{ $repoName := .RepoInfo.FullName }}
57 {{ range $idx, $item := .Pull.Submissions }}
58 {{ with $item }}
59 <details {{ if eq $idx $lastIdx }}open{{ end }}>
60 <summary id="round-#{{ .RoundNumber }}" class="list-none cursor-pointer">
61 <div class="flex flex-wrap gap-2 items-stretch">
62 <!-- round number -->
63 <div class="rounded bg-white dark:bg-gray-800 drop-shadow-sm px-3 py-2 dark:text-white">
64 <span class="flex items-center">{{ i "hash" "w-4 h-4" }}{{ .RoundNumber }}</span>
65 </div>
66 <!-- round summary -->
67 <div class="flex-1 rounded drop-shadow-sm bg-white dark:bg-gray-800 p-2 text-gray-500 dark:text-gray-400">
68 <span class="gap-1 flex items-center">
69 {{ $owner := resolve $.Pull.OwnerDid }}
70 {{ $re := "re" }}
71 {{ if eq .RoundNumber 0 }}
72 {{ $re = "" }}
73 {{ end }}
74 <span class="hidden md:inline">{{$re}}submitted</span>
75 by {{ template "user/fragments/picHandleLink" $.Pull.OwnerDid }}
76 <span class="select-none before:content-['\00B7']"></span>
77 <a class="text-gray-500 dark:text-gray-400 hover:text-gray-500" href="#round-#{{ .RoundNumber }}">{{ template "repo/fragments/shortTime" .Created }}</a>
78 <span class="select-none before:content-['·']"></span>
79 {{ $s := "s" }}
80 {{ if eq (len .Comments) 1 }}
81 {{ $s = "" }}
82 {{ end }}
83 {{ len .Comments }} comment{{$s}}
84 </span>
85 </div>
86
87 <a class="btn flex items-center gap-2 no-underline hover:no-underline p-2 group"
88 hx-boost="true"
89 href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/round/{{.RoundNumber}}">
90 {{ i "file-diff" "w-4 h-4" }}
91 <span class="hidden md:inline">diff</span>
92 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }}
93 </a>
94 {{ if ne $idx 0 }}
95 <a class="btn flex items-center gap-2 no-underline hover:no-underline p-2 group"
96 hx-boost="true"
97 href="/{{ $.RepoInfo.FullName }}/pulls/{{ $.Pull.PullId }}/round/{{.RoundNumber}}/interdiff">
98 {{ i "chevrons-left-right-ellipsis" "w-4 h-4 rotate-90" }}
99 <span class="hidden md:inline">interdiff</span>
100 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }}
101 </a>
102 {{ end }}
103 <span id="interdiff-error-{{.RoundNumber}}"></span>
104 </div>
105 </summary>
106
107 {{ if .IsFormatPatch }}
108 {{ $patches := .AsFormatPatch }}
109 {{ $round := .RoundNumber }}
110 <details class="group py-2 md:ml-[3.5rem] text-gray-500 dark:text-gray-400 flex flex-col gap-2 relative text-sm">
111 <summary class="py-1 list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400">
112 {{ $s := "s" }}
113 {{ if eq (len $patches) 1 }}
114 {{ $s = "" }}
115 {{ end }}
116 <div class="group-open:hidden flex items-center gap-2 ml-2">
117 {{ i "chevrons-up-down" "w-4 h-4" }} expand {{ len $patches }} commit{{$s}}
118 </div>
119 <div class="hidden group-open:flex items-center gap-2 ml-2">
120 {{ i "chevrons-down-up" "w-4 h-4" }} hide {{ len $patches }} commit{{$s}}
121 </div>
122 </summary>
123 {{ range $patches }}
124 <div id="commit-{{.SHA}}" class="py-1 px-2 relative w-full md:max-w-3/5 md:w-fit flex flex-col">
125 <div class="flex items-center gap-2">
126 {{ i "git-commit-horizontal" "w-4 h-4" }}
127 <div class="text-sm text-gray-500 dark:text-gray-400">
128 <!-- attempt to resolve $fullRepo: this is possible only on non-deleted forks and branches -->
129 {{ $fullRepo := "" }}
130 {{ if and $.Pull.IsForkBased $.Pull.PullSource.Repo }}
131 {{ $fullRepo = printf "%s/%s" $owner $.Pull.PullSource.Repo.Name }}
132 {{ else if $.Pull.IsBranchBased }}
133 {{ $fullRepo = $.RepoInfo.FullName }}
134 {{ end }}
135
136 <!-- if $fullRepo was resolved, link to it, otherwise just span without a link -->
137 {{ if $fullRepo }}
138 <a href="/{{ $fullRepo }}/commit/{{ .SHA }}" class="font-mono text-gray-500 dark:text-gray-400">{{ slice .SHA 0 8 }}</a>
139 {{ else }}
140 <span class="font-mono">{{ slice .SHA 0 8 }}</span>
141 {{ end }}
142 </div>
143 <div class="flex items-center">
144 <span>{{ .Title | description }}</span>
145 {{ if gt (len .Body) 0 }}
146 <button
147 class="py-1/2 px-1 mx-2 bg-gray-200 hover:bg-gray-400 rounded dark:bg-gray-700 dark:hover:bg-gray-600"
148 hx-on:click="document.getElementById('body-{{$round}}-{{.SHA}}').classList.toggle('hidden')"
149 >
150 {{ i "ellipsis" "w-3 h-3" }}
151 </button>
152 {{ end }}
153 </div>
154 </div>
155 {{ if gt (len .Body) 0 }}
156 <p id="body-{{$round}}-{{.SHA}}" class="hidden mt-1 text-sm pb-2">
157 {{ nl2br .Body }}
158 </p>
159 {{ end }}
160 </div>
161 {{ end }}
162 </details>
163 {{ end }}
164
165
166 <div class="md:pl-[3.5rem] flex flex-col gap-2 mt-2 relative">
167 {{ range $cidx, $c := .Comments }}
168 <div id="comment-{{$c.ID}}" class="bg-white dark:bg-gray-800 rounded drop-shadow-sm py-2 px-4 relative w-full">
169 {{ if gt $cidx 0 }}
170 <div class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
171 {{ end }}
172 <div class="text-sm text-gray-500 dark:text-gray-400 flex items-center gap-1">
173 {{ template "user/fragments/picHandleLink" $c.OwnerDid }}
174 <span class="before:content-['·']"></span>
175 <a class="text-gray-500 dark:text-gray-400 hover:text-gray-500 dark:hover:text-gray-300" href="#comment-{{.ID}}">{{ template "repo/fragments/time" $c.Created }}</a>
176 </div>
177 <div class="prose dark:prose-invert">
178 {{ $c.Body | markdown }}
179 </div>
180 </div>
181 {{ end }}
182
183 {{ block "pipelineStatus" (list $ .) }} {{ end }}
184
185 {{ if eq $lastIdx .RoundNumber }}
186 {{ block "mergeStatus" $ }} {{ end }}
187 {{ block "resubmitStatus" $ }} {{ end }}
188 {{ end }}
189
190 {{ if $.LoggedInUser }}
191 {{ template "repo/pulls/fragments/pullActions"
192 (dict
193 "LoggedInUser" $.LoggedInUser
194 "Pull" $.Pull
195 "RepoInfo" $.RepoInfo
196 "RoundNumber" .RoundNumber
197 "MergeCheck" $.MergeCheck
198 "ResubmitCheck" $.ResubmitCheck
199 "BranchDeleteStatus" $.BranchDeleteStatus
200 "Stack" $.Stack) }}
201 {{ else }}
202 <div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded drop-shadow-sm p-2 relative flex gap-2 items-center w-fit">
203 <a href="/signup" class="btn-create py-0 hover:no-underline hover:text-white flex items-center gap-2">
204 sign up
205 </a>
206 <span class="text-gray-500 dark:text-gray-400">or</span>
207 <a href="/login" class="underline">login</a>
208 to add to the discussion
209 </div>
210 {{ end }}
211 </div>
212 </details>
213 {{ end }}
214 {{ end }}
215{{ end }}
216
217{{ define "mergeStatus" }}
218 {{ if .Pull.State.IsClosed }}
219 <div class="bg-gray-50 dark:bg-gray-700 border border-black dark:border-gray-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
220 <div class="flex items-center gap-2 text-black dark:text-white">
221 {{ i "ban" "w-4 h-4" }}
222 <span class="font-medium">closed without merging</span
223 >
224 </div>
225 </div>
226 {{ else if .Pull.State.IsMerged }}
227 <div class="bg-purple-50 dark:bg-purple-900 border border-purple-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
228 <div class="flex items-center gap-2 text-purple-500 dark:text-purple-300">
229 {{ i "git-merge" "w-4 h-4" }}
230 <span class="font-medium">pull request successfully merged</span
231 >
232 </div>
233 </div>
234 {{ else if .Pull.State.IsDeleted }}
235 <div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
236 <div class="flex items-center gap-2 text-red-500 dark:text-red-300">
237 {{ i "git-pull-request-closed" "w-4 h-4" }}
238 <span class="font-medium">This pull has been deleted (possibly by jj abandon or jj squash)</span>
239 </div>
240 </div>
241 {{ else if and .MergeCheck .MergeCheck.Error }}
242 <div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
243 <div class="flex items-center gap-2 text-red-500 dark:text-red-300">
244 {{ i "triangle-alert" "w-4 h-4" }}
245 <span class="font-medium">{{ .MergeCheck.Error }}</span>
246 </div>
247 </div>
248 {{ else if and .MergeCheck .MergeCheck.IsConflicted }}
249 <div class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
250 <div class="flex flex-col gap-2 text-red-500 dark:text-red-300">
251 <div class="flex items-center gap-2">
252 {{ i "triangle-alert" "w-4 h-4" }}
253 <span class="font-medium">merge conflicts detected</span>
254 </div>
255 {{ if gt (len .MergeCheck.Conflicts) 0 }}
256 <ul class="space-y-1">
257 {{ range .MergeCheck.Conflicts }}
258 {{ if .Filename }}
259 <li class="flex items-center">
260 {{ i "file-warning" "w-4 h-4 mr-1.5 text-red-500 dark:text-red-300" }}
261 <span class="font-mono">{{ .Filename }}</span>
262 </li>
263 {{ else if .Reason }}
264 <li class="flex items-center">
265 {{ i "file-warning" "w-4 h-4 mr-1.5 text-red-500 dark:text-red-300" }}
266 <span>{{.Reason}}</span>
267 </li>
268 {{ end }}
269 {{ end }}
270 </ul>
271 {{ end }}
272 </div>
273 </div>
274 {{ else if .MergeCheck }}
275 <div class="bg-green-50 dark:bg-green-900 border border-green-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
276 <div class="flex items-center gap-2 text-green-500 dark:text-green-300">
277 {{ i "circle-check-big" "w-4 h-4" }}
278 <span class="font-medium">no conflicts, ready to merge</span>
279 </div>
280 </div>
281 {{ end }}
282{{ end }}
283
284{{ define "resubmitStatus" }}
285 {{ if .ResubmitCheck.Yes }}
286 <div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
287 <div class="flex items-center gap-2 text-amber-500 dark:text-amber-300">
288 {{ i "triangle-alert" "w-4 h-4" }}
289 <span class="font-medium">this branch has been updated, consider resubmitting</span>
290 </div>
291 </div>
292 {{ end }}
293{{ end }}
294
295{{ define "pipelineStatus" }}
296 {{ $root := index . 0 }}
297 {{ $submission := index . 1 }}
298 {{ $pipeline := index $root.Pipelines $submission.SourceRev }}
299 {{ with $pipeline }}
300 {{ $id := .Id }}
301 {{ if .Statuses }}
302 <div class="max-w-80 grid grid-cols-1 bg-white dark:bg-gray-800 rounded border border-gray-200 dark:border-gray-700 divide-y divide-gray-200 dark:divide-gray-700">
303 {{ range $name, $all := .Statuses }}
304 <a href="/{{ $root.RepoInfo.FullName }}/pipelines/{{ $id }}/workflow/{{ $name }}" class="no-underline hover:no-underline hover:bg-gray-100/25 hover:dark:bg-gray-700/25">
305 <div
306 class="flex gap-2 items-center justify-between p-2">
307 {{ $lastStatus := $all.Latest }}
308 {{ $kind := $lastStatus.Status.String }}
309
310 <div id="left" class="flex items-center gap-2 flex-shrink-0">
311 {{ template "repo/pipelines/fragments/workflowSymbol" $all }}
312 {{ $name }}
313 </div>
314 <div id="right" class="flex items-center gap-2 flex-shrink-0">
315 <span class="font-bold">{{ $kind }}</span>
316 {{ if .TimeTaken }}
317 {{ template "repo/fragments/duration" .TimeTaken }}
318 {{ else }}
319 {{ template "repo/fragments/shortTimeAgo" $lastStatus.Created }}
320 {{ end }}
321 </div>
322 </div>
323 </a>
324 {{ end }}
325 </div>
326 {{ end }}
327 {{ end }}
328{{ end }}