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