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 {{ len $patches }}
115 commit{{ $s }}
116 </div>
117 <div class="hidden group-open:flex items-center gap-2 ml-2">
118 {{ i "chevrons-down-up" "w-4 h-4" }} hide {{ len $patches }}
119 commit{{ $s }}
120 </div>
121 </summary>
122 {{ range $patches }}
123 <div
124 id="commit-{{ .SHA }}"
125 class="py-1 px-2 relative w-full md:max-w-3/5 md:w-fit flex flex-col">
126 <div class="flex items-center gap-2">
127 {{ i "git-commit-horizontal" "w-4 h-4" }}
128 <div class="text-sm text-gray-500 dark:text-gray-400">
129 <!-- attempt to resolve $fullRepo: this is possible only on non-deleted forks and branches -->
130 {{ $fullRepo := "" }}
131 {{ if and $.Pull.IsForkBased $.Pull.PullSource.Repo }}
132 {{ $fullRepo = printf "%s/%s" $owner $.Pull.PullSource.Repo.Name }}
133 {{ else if $.Pull.IsBranchBased }}
134 {{ $fullRepo = $.RepoInfo.FullName }}
135 {{ end }}
136
137
138 <!-- if $fullRepo was resolved, link to it, otherwise just span without a link -->
139 {{ if $fullRepo }}
140 <a
141 href="/{{ $fullRepo }}/commit/{{ .SHA }}"
142 class="font-mono text-gray-500 dark:text-gray-400">
143 {{ slice .SHA 0 8 }}
144 </a>
145 {{ else }}
146 <span class="font-mono">{{ slice .SHA 0 8 }}</span>
147 {{ end }}
148 </div>
149 <div class="flex items-center">
150 <span>{{ .Title }}</span>
151 {{ if gt (len .Body) 0 }}
152 <button
153 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"
154 hx-on:click="document.getElementById('body-{{ $round }}-{{ .SHA }}').classList.toggle('hidden')">
155 {{ i "ellipsis" "w-3 h-3" }}
156 </button>
157 {{ end }}
158 </div>
159 </div>
160 {{ if gt (len .Body) 0 }}
161 <p
162 id="body-{{ $round }}-{{ .SHA }}"
163 class="hidden mt-1 text-sm pb-2">
164 {{ nl2br .Body }}
165 </p>
166 {{ end }}
167 </div>
168 {{ end }}
169 </details>
170 {{ end }}
171
172
173 <div class="md:pl-[3.5rem] flex flex-col gap-2 mt-2 relative">
174 {{ range $cidx, $c := .Comments }}
175 <div
176 id="comment-{{ $c.ID }}"
177 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">
178 {{ if gt $cidx 0 }}
179 <div
180 class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
181 {{ end }}
182 <div
183 class="text-sm text-gray-500 dark:text-gray-400 flex items-center gap-1">
184 {{ template "user/fragments/picHandleLink" $c.OwnerDid }}
185 <span class="before:content-['·']"></span>
186 <a
187 class="text-gray-500 dark:text-gray-400 hover:text-gray-500 dark:hover:text-gray-300"
188 href="#comment-{{ .ID }}">
189 {{ template "repo/fragments/time" $c.Created }}
190 </a>
191 </div>
192 <div class="prose dark:prose-invert">
193 {{ $c.Body | markdown }}
194 </div>
195 </div>
196 {{ end }}
197
198 {{ block "pipelineStatus" (list $ .) }}{{ end }}
199
200 {{ if eq $lastIdx .RoundNumber }}
201 {{ block "mergeStatus" $ }}{{ end }}
202 {{ block "resubmitStatus" $ }}{{ end }}
203 {{ end }}
204
205 {{ if $.LoggedInUser }}
206 {{ template "repo/pulls/fragments/pullActions" (dict "LoggedInUser" $.LoggedInUser "Pull" $.Pull "RepoInfo" $.RepoInfo "RoundNumber" .RoundNumber "MergeCheck" $.MergeCheck "ResubmitCheck" $.ResubmitCheck "Stack" $.Stack) }}
207 {{ else }}
208 <div
209 class="bg-white dark:bg-gray-800 rounded drop-shadow-sm px-6 py-4 w-fit dark:text-white">
210 <div
211 class="absolute left-8 -top-2 w-px h-2 bg-gray-300 dark:bg-gray-600"></div>
212 <a href="/login" class="underline">login</a>
213 to join the discussion
214 </div>
215 {{ end }}
216 </div>
217 </details>
218 {{ end }}
219 {{ end }}
220{{ end }}
221
222{{ define "mergeStatus" }}
223 {{ if .Pull.State.IsClosed }}
224 <div
225 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">
226 <div class="flex items-center gap-2 text-black dark:text-white">
227 {{ i "ban" "w-4 h-4" }}
228 <span class="font-medium">closed without merging</span>
229 </div>
230 </div>
231 {{ else if .Pull.State.IsMerged }}
232 <div
233 class="bg-purple-50 dark:bg-purple-900 border border-purple-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
234 <div class="flex items-center gap-2 text-purple-500 dark:text-purple-300">
235 {{ i "git-merge" "w-4 h-4" }}
236 <span class="font-medium">pull request successfully merged</span>
237 </div>
238 </div>
239 {{ else if .Pull.State.IsDeleted }}
240 <div
241 class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
242 <div class="flex items-center gap-2 text-red-500 dark:text-red-300">
243 {{ i "git-pull-request-closed" "w-4 h-4" }}
244 <span class="font-medium">
245 This pull has been deleted (possibly by jj abandon or jj squash)
246 </span>
247 </div>
248 </div>
249 {{ else if and .MergeCheck .MergeCheck.Error }}
250 <div
251 class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
252 <div class="flex items-center gap-2 text-red-500 dark:text-red-300">
253 {{ i "triangle-alert" "w-4 h-4" }}
254 <span class="font-medium">{{ .MergeCheck.Error }}</span>
255 </div>
256 </div>
257 {{ else if and .MergeCheck .MergeCheck.IsConflicted }}
258 <div
259 class="bg-red-50 dark:bg-red-900 border border-red-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
260 <div class="flex flex-col gap-2 text-red-500 dark:text-red-300">
261 <div class="flex items-center gap-2">
262 {{ i "triangle-alert" "w-4 h-4" }}
263 <span class="font-medium">merge conflicts detected</span>
264 </div>
265 {{ if gt (len .MergeCheck.Conflicts) 0 }}
266 <ul class="space-y-1">
267 {{ range .MergeCheck.Conflicts }}
268 {{ if .Filename }}
269 <li class="flex items-center">
270 {{ i "file-warning" "w-4 h-4 mr-1.5 text-red-500 dark:text-red-300" }}
271 <span class="font-mono">{{ .Filename }}</span>
272 </li>
273 {{ else if .Reason }}
274 <li class="flex items-center">
275 {{ i "file-warning" "w-4 h-4 mr-1.5 text-red-500 dark:text-red-300" }}
276 <span>{{ .Reason }}</span>
277 </li>
278 {{ end }}
279 {{ end }}
280 </ul>
281 {{ end }}
282 </div>
283 </div>
284 {{ else if .MergeCheck }}
285 <div
286 class="bg-green-50 dark:bg-green-900 border border-green-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
287 <div class="flex items-center gap-2 text-green-500 dark:text-green-300">
288 {{ i "circle-check-big" "w-4 h-4" }}
289 <span class="font-medium">no conflicts, ready to merge</span>
290 </div>
291 </div>
292 {{ end }}
293{{ end }}
294
295{{ define "resubmitStatus" }}
296 {{ if .ResubmitCheck.Yes }}
297 <div
298 class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded drop-shadow-sm px-6 py-2 relative w-fit">
299 <div class="flex items-center gap-2 text-amber-500 dark:text-amber-300">
300 {{ i "triangle-alert" "w-4 h-4" }}
301 <span class="font-medium">
302 this branch has been updated, consider resubmitting
303 </span>
304 </div>
305 </div>
306 {{ end }}
307{{ end }}
308
309{{ define "pipelineStatus" }}
310 {{ $root := index . 0 }}
311 {{ $submission := index . 1 }}
312 {{ $pipeline := index $root.Pipelines $submission.SourceRev }}
313 {{ with $pipeline }}
314 {{ $id := .Id }}
315 {{ if .Statuses }}
316 <div
317 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">
318 {{ range $name, $all := .Statuses }}
319 <a
320 href="/{{ $root.RepoInfo.FullName }}/pipelines/{{ $id }}/workflow/{{ $name }}"
321 class="no-underline hover:no-underline hover:bg-gray-100/25 hover:dark:bg-gray-700/25">
322 <div class="flex gap-2 items-center justify-between p-2">
323 {{ $lastStatus := $all.Latest }}
324 {{ $kind := $lastStatus.Status.String }}
325
326
327 <div id="left" class="flex items-center gap-2 flex-shrink-0">
328 {{ template "repo/pipelines/fragments/workflowSymbol" $all }}
329 {{ $name }}
330 </div>
331 <div id="right" class="flex items-center gap-2 flex-shrink-0">
332 <span class="font-bold">{{ $kind }}</span>
333 {{ if .TimeTaken }}
334 {{ template "repo/fragments/duration" .TimeTaken }}
335 {{ else }}
336 {{ template "repo/fragments/shortTimeAgo" $lastStatus.Created }}
337 {{ end }}
338 </div>
339 </div>
340 </a>
341 {{ end }}
342 </div>
343 {{ end }}
344 {{ end }}
345{{ end }}