main git-pr / tmpl / pages / pr.html
Eric Bower  ·  2026-02-25
  1
  2{{template "base" .}}
  3
  4{{define "title"}}{{.Pr.Title}} - pr summary{{end}}
  5
  6{{define "meta"}}
  7<link rel="alternate" type="application/atom+xml"
  8      title="RSS feed for git collaboration server"
  9      href="/prs/{{.Pr.ID}}/rss" />
 10<meta property="og:title" content="{{.Pr.Title}}" />
 11<meta property="og:url" content="https://{{.MetaData.URL}}/prs/{{.Pr.ID}}" />
 12<meta property="og:type" content="object" />
 13<meta property="og:site_name" content="{{.MetaData.URL}}" />
 14{{end}}
 15
 16{{define "body"}}
 17<main class="group">
 18  <div class="flex justify-center items-center">
 19    <div class="box container w-full">
 20      <h1 class="text-xl">{{.RepoName}}</h1>
 21
 22      <div class="flex items-center gap border-visited flex-wrap">
 23        <a href="/prs/{{.Pr.ID}}">{{.Pr.Title}}</a>
 24        {{if eq .Pr.Status "draft"}}
 25          <code class="pill-info">{{.Pr.Status}}</code>
 26        {{else if eq .Pr.Status "open"}}
 27          <code class="pill-success">{{.Pr.Status}}</code>
 28        {{else}}
 29          <code>{{.Pr.Status}}</code>
 30        {{end}}
 31        <a class="btn-nav flex items-center" href="/prs/{{.Pr.ID}}/rss" style="padding: 0.025rem 0.3rem;">
 32          rss
 33        </a>
 34      </div>
 35
 36      <div class="group timeline text-sm my">
 37        {{range .Logs}}
 38        <div class="timeline-item{{if eq .Event "pr_status_changed"}} timeline-status-{{.Data.Status}}{{end}}">
 39          {{if eq .Event "pr_patchset_added"}}
 40            <details class="mb" style="border: 0; padding: 0;">
 41              <summary>
 42                <span class="font-bold">added <a href="/ps/{{.Patchset.ID}}"><code{{if eq .Patchset.ID $.Patchset.ID}} class="border-visited"{{end}}>{{.FormattedPatchsetID}}</code></a></span>
 43                <span class="event-meta">on <date>{{.Date}}</date> &middot; by {{template "user-pill" .UserData}}</span>
 44              </summary>
 45
 46              <div class="group">
 47                {{- range .RangeDiff -}}
 48                  <div>
 49                    <code class='{{if eq .Type "rm"}}pill-admin{{else if eq .Type "add"}}pill-success{{else if eq .Type "changed"}}pill-info{{end}}'>
 50                      {{.Header}}
 51                    </code>
 52                  </div>
 53                {{- end -}}
 54              </div>
 55            </details>
 56
 57          {{else if eq .Event "pr_status_changed"}}
 58            <div>
 59              <span class="font-bold">changed status to
 60                <code class="pill-status-{{.Data.Status}}">{{.Data.Status}}</code>
 61              </span>
 62              <span class="event-meta">on <date>{{.Date}}</date> &middot; by {{template "user-pill" .UserData}}</span>
 63            </div>
 64
 65            {{if .Data.Comment}}
 66            <div class="status-change-comment">{{.Data.Comment}}</div>
 67            {{end}}
 68
 69          {{else}}
 70            <div>
 71              <span class="font-bold">
 72                {{if eq .Event "pr_created"}}
 73                  created pr with <a href="/ps/{{.Patchset.ID}}"><code{{if eq .Patchset.ID $.Patchset.ID}} class="border-visited"{{end}}>{{.FormattedPatchsetID}}</code></a>
 74                {{else if eq .Event "pr_patchset_deleted"}}
 75                  deleted <code>{{.FormattedPatchsetID}}</code>
 76                {{else if eq .Event "pr_patchset_replaced"}}
 77                  replaced <code>{{.FormattedPatchsetID}}</code>
 78                {{else if eq .Event "pr_name_changed"}}
 79                  changed pr name to <code>{{.Data.Name}}</code>
 80                {{else}}
 81                  {{.Event}}
 82                {{end}}
 83              </span>
 84              <span class="event-meta">on <date>{{.Date}}</date> &middot; by {{template "user-pill" .UserData}}</span>
 85            </div>
 86          {{end}}
 87        </div>
 88        {{end}}
 89      </div>
 90
 91      <details class="text-sm">
 92        <summary>cmds</summary>
 93        <div class="group my">
 94          checkout latest patchset:
 95          <pre class="m-0">ssh {{.MetaData.URL}} print pr-{{.Pr.ID}} | git am -3</pre>
 96
 97          checkout any patchset in a patch request:
 98          <pre class="m-0">ssh {{.MetaData.URL}} print ps-X | git am -3</pre>
 99
100          add changes to patch request:
101          <pre class="m-0">git format-patch {{.Branch}} --stdout | ssh {{.MetaData.URL}} pr add {{.Pr.ID}}</pre>
102
103          set PR to open (enables RSS notifications):
104          <pre class="m-0">ssh {{.MetaData.URL}} pr open {{.Pr.ID}}</pre>
105
106          set PR to draft (stops RSS notifications):
107          <pre class="m-0">ssh {{.MetaData.URL}} pr draft {{.Pr.ID}}</pre>
108        </div>
109      </details>
110    </div>
111  </div>
112
113  <div class="flex justify-center items-center">
114    <div class="patchset-split">
115      <h3 class="text-md mb">
116        Patchset
117        <a href="/ps/{{.Patchset.ID}}"><code class="border-visited">{{.FormattedPatchsetID}}</code></a>
118        <span class="event-meta">on <date>{{.PatchsetDate}}</date> &middot; commit {{sha .Patch.CommitSha}}</span>
119      </h3>
120
121      <div class="flex-collapse flex gap">
122        <div class="w-full" style="flex: 1 1 50%; min-width: 0;">
123          {{template "commit-list" .}}
124        </div>
125        <div class="w-full" style="flex: 1 1 50%; min-width: 0;">
126          {{template "patch-detail" .}}
127        </div>
128      </div>
129    </div>
130  </div>
131
132  {{template "patch-files" .}}
133</main>
134{{end}}