this repo has no description
1{{ define "title" }} 2 {{ .Pull.Title }} &middot; pull #{{ .Pull.PullId }} &middot; 3 {{ .RepoInfo.FullName }} 4{{ end }} 5 6{{ define "extrameta" }} 7 {{ $title := printf "%s &middot; pull #%d &middot; %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 }}