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 {{ 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 }}