main git-pr / tmpl / components / range-diff.html
Eric Bower  ·  2026-02-25
  1
  2{{define "range-diff"}}
  3<div class="group">
  4  <div class="flex gap-2 collapse">
  5    <div class="group patchset-list" style="width: 350px;">
  6      <h2 class="text-xl mt">
  7        Range-diff <code>rd-{{.Patchset.ID}}</code>
  8      </h2>
  9
 10      {{range $diff := .PatchsetData.RangeDiff}}
 11        <div class="box">
 12          <dl>
 13            <dt>title</dt>
 14            <dd><a href="#{{$diff.Header.OldIdx}}-{{$diff.Header.NewIdx}}">{{$diff.Header.Title}}</a></dd>
 15 
 16            <dt>description</dt>
 17            <dd>
 18              <code class='{{if eq $diff.Type "rm"}}pill-admin{{else if eq $diff.Type "add"}}pill-success{{else if eq $diff.Type "changed"}}pill-info{{end}}'>
 19              {{if eq $diff.Header.NewSha ""}}
 20                Patch removed
 21              {{else if eq $diff.Header.OldSha ""}}
 22                Patch added
 23              {{else if $diff.Header.ContentEqual}}
 24                Patch equal
 25              {{else}}
 26                Patch changed
 27              {{end}}
 28              </code>
 29            </dd>
 30
 31            <dt>old #{{$diff.Header.OldIdx}}</dt>
 32            <dd><code>{{sha $diff.Header.OldSha}}</code></dd>
 33
 34            <dt>new #{{$diff.Header.NewIdx}}</dt>
 35            <dd><code>{{sha $diff.Header.NewSha}}</code></dd>
 36          </dl>
 37        </div>
 38      {{else}}
 39      <div class="box">
 40        No range diff found for patchset. 
 41      </div>
 42      {{end}}
 43
 44      <div><a href="#top">Back to top</a></div>
 45    </div>
 46
 47    <div class="max-w flex-1">
 48      <div class="group">
 49        {{range .PatchsetData.RangeDiff}}
 50          <div id="{{.Header.OldIdx}}-{{.Header.NewIdx}}">
 51            <div class="mb">
 52              <code class='{{if eq .Type "rm"}}pill-admin{{else if eq .Type "add"}}pill-success{{else if eq .Type "changed"}}pill-info{{end}}'>
 53                {{.Header}}
 54              </code>
 55            </div>
 56
 57            {{if or .Header.AuthorChanged .Header.TitleChanged .Header.BodyChanged}}
 58            <div class="box mb">
 59              <dl>
 60                {{if .Header.AuthorChanged}}
 61                <dt>author changed</dt>
 62                <dd>
 63                  <div><span style="color: tomato;">- {{.Header.OldAuthorName}} &lt;{{.Header.OldAuthorEmail}}&gt;</span></div>
 64                  <div><span style="color: limegreen;">+ {{.Header.NewAuthorName}} &lt;{{.Header.NewAuthorEmail}}&gt;</span></div>
 65                </dd>
 66                {{end}}
 67                {{if .Header.TitleChanged}}
 68                <dt>title changed</dt>
 69                <dd>
 70                  <div><span style="color: tomato;">- {{.Header.OldTitle}}</span></div>
 71                  <div><span style="color: limegreen;">+ {{.Header.NewTitle}}</span></div>
 72                </dd>
 73                {{end}}
 74                {{if .Header.BodyChanged}}
 75                <dt>message changed</dt>
 76                <dd>
 77                  <pre style="color: tomato; margin: 0;">- {{.Header.OldBody}}</pre>
 78                  <pre style="color: limegreen; margin: 0;">+ {{.Header.NewBody}}</pre>
 79                </dd>
 80                {{end}}
 81              </dl>
 82            </div>
 83            {{end}}
 84
 85            <div>
 86              {{- if and .Files (ne .Type "add") -}}
 87                {{range .Files}}
 88                  <div class="flex gap">
 89                    <div class="flex-1" style="width: 48%;">
 90                      <h3 class="text-md">old</h3>
 91                      <div>
 92                        {{if .OldFile}}
 93                          {{if .OldFile.OldName}}old:<code>{{.OldFile.OldName}}</code>{{end}}
 94                          {{if .OldFile.NewName}}new:<code>{{.OldFile.NewName}}</code>{{end}}
 95                        {{end}}
 96                      </div>
 97                      <pre class="m-0">{{- range .Diff -}}
 98                        {{- if eq .OuterType "delete" -}}
 99                          {{- if eq .InnerType "insert" -}}
100                            <span style="background-color: rgba(255,99,71,0.25); color: limegreen;">{{.Text}}</span>
101                          {{- else if eq .InnerType "delete" -}}
102                            <span style="background-color: rgba(255,99,71,0.25); color: tomato;">{{.Text}}</span>
103                          {{- else -}}
104                            <span style="background-color: rgba(255,99,71,0.25);">{{.Text}}</span>
105                          {{- end -}}
106                        {{- else if eq .OuterType "insert" -}}
107                        {{- else if eq .InnerType "insert" -}}
108                          <span style="color: limegreen;">{{.Text}}</span>
109                        {{- else if eq .InnerType "delete" -}}
110                          <span style="color: tomato;">{{.Text}}</span>
111                        {{- else -}}
112                          <span>{{.Text}}</span>
113                        {{- end -}}
114                      {{- end -}}</pre>
115                    </div>
116
117                    <div class="flex-1" style="width: 48%;">
118                      <h3 class="text-md">new</h3>
119                      <div>
120                        {{if .NewFile}}
121                          {{if .NewFile.OldName}}old:<code>{{.NewFile.OldName}}</code>{{end}}
122                          {{if .NewFile.NewName}}new:<code>{{.NewFile.NewName}}</code>{{end}}
123                        {{end}}
124                      </div>
125                      <pre class="m-0">{{- range .Diff -}}
126                        {{- if eq .OuterType "insert" -}}
127                          {{- if eq .InnerType "insert" -}}
128                            <span style="background-color: rgba(50,205,50,0.25); color: limegreen;">{{.Text}}</span>
129                          {{- else if eq .InnerType "delete" -}}
130                            <span style="background-color: rgba(50,205,50,0.25); color: tomato;">{{.Text}}</span>
131                          {{- else -}}
132                            <span style="background-color: rgba(50,205,50,0.25);">{{.Text}}</span>
133                          {{- end -}}
134                        {{- else if eq .OuterType "delete" -}}
135                        {{- else if eq .InnerType "insert" -}}
136                          <span style="color: limegreen;">{{.Text}}</span>
137                        {{- else if eq .InnerType "delete" -}}
138                          <span style="color: tomato;">{{.Text}}</span>
139                        {{- else -}}
140                          <span>{{.Text}}</span>
141                        {{- end -}}
142                      {{- end -}}</pre>
143                    </div>
144                  </div>
145                {{end}}
146              {{- end -}}
147            </div>
148          </div>
149        {{- end -}}
150      </div>
151
152      <hr class="my" />
153    </div>
154  </div>
155</div>
156{{end}}