detached b6e9374

fix(web): give merge when ready its own mode choice and drop branch deletion from it

commit
b6e937407800bd6d1100a2aeac0d41cca931ce47
author
brice · · 2026-10-20 17:15 UTC
parent
355f5f4
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
4 files · +394 -317
M docs/merge-requests.md +1 -1
@@ -44,7 +44,7 @@ The merge box of the web page and the output of `mr merge --mode squash|merge` r
4444 A merge request can merge by itself once its checks passed.
4545
4646 - The repository setting `allow_auto_merge` is off by default: `ermite repo edit <repo> --allow-auto-merge` (`=false` to turn it off).
47-- Enable it with `ermite mr merge <repo> <n> --head <commit> --auto --mode squash` (`--head` is required, as for a plain merge; a head that moved is refused with "branch moved"), or with **Merge when ready** in the web merge box. It needs `mr:merge` and a server with CI. Re-enabling replaces the previous mode and enabler.
47+- Enable it with `ermite mr merge <repo> <n> --head <commit> --auto --mode squash` (`--head` is required, as for a plain merge; a head that moved is refused with "branch moved"), or with **Merge when ready** in the web merge box. Its separate mode choice offers every repository-allowed mode, even while the head conflicts or is behind. Auto-merge keeps the source branch; the delete-source checkbox applies only to an immediate merge. It needs `mr:merge` and a server with CI. Re-enabling replaces the previous mode and enabler.
4848 - The server merges when CI has settled on the head with every run complete and at least one check passed. A failing or unfinished check always blocks, whatever `failing_checks_block` says. The mode must still be allowed.
4949 - The merge is made as the person who enabled it. Their token is checked at every evaluation, even while checks are pending, and again at merge time under the merge lock: it must still be valid and allow `mr:merge` on the repository and the target branch. A token that no longer qualifies cancels the auto-merge.
5050 - A pending auto-merge shows in `mr show` (`auto_merge`), in the web merge box and as `merge_request_auto_merge_enabled` in `ermite watch`. A merge request merged this way has `auto_merged` true.
@@ -44,7 +44,7 @@ The merge box of the web page and the output of `mr merge --mode squash|merge` r
44 A merge request can merge by itself once its checks passed.44 A merge request can merge by itself once its checks passed.
45 45
46 - The repository setting `allow_auto_merge` is off by default: `ermite repo edit <repo> --allow-auto-merge` (`=false` to turn it off).46 - The repository setting `allow_auto_merge` is off by default: `ermite repo edit <repo> --allow-auto-merge` (`=false` to turn it off).
47-- Enable it with `ermite mr merge <repo> <n> --head <commit> --auto --mode squash` (`--head` is required, as for a plain merge; a head that moved is refused with "branch moved"), or with **Merge when ready** in the web merge box. It needs `mr:merge` and a server with CI. Re-enabling replaces the previous mode and enabler.47+- Enable it with `ermite mr merge <repo> <n> --head <commit> --auto --mode squash` (`--head` is required, as for a plain merge; a head that moved is refused with "branch moved"), or with **Merge when ready** in the web merge box. Its separate mode choice offers every repository-allowed mode, even while the head conflicts or is behind. Auto-merge keeps the source branch; the delete-source checkbox applies only to an immediate merge. It needs `mr:merge` and a server with CI. Re-enabling replaces the previous mode and enabler.
48 - The server merges when CI has settled on the head with every run complete and at least one check passed. A failing or unfinished check always blocks, whatever `failing_checks_block` says. The mode must still be allowed.48 - The server merges when CI has settled on the head with every run complete and at least one check passed. A failing or unfinished check always blocks, whatever `failing_checks_block` says. The mode must still be allowed.
49 - The merge is made as the person who enabled it. Their token is checked at every evaluation, even while checks are pending, and again at merge time under the merge lock: it must still be valid and allow `mr:merge` on the repository and the target branch. A token that no longer qualifies cancels the auto-merge.49 - The merge is made as the person who enabled it. Their token is checked at every evaluation, even while checks are pending, and again at merge time under the merge lock: it must still be valid and allow `mr:merge` on the repository and the target branch. A token that no longer qualifies cancels the auto-merge.
50 - A pending auto-merge shows in `mr show` (`auto_merge`), in the web merge box and as `merge_request_auto_merge_enabled` in `ermite watch`. A merge request merged this way has `auto_merged` true.50 - A pending auto-merge shows in `mr show` (`auto_merge`), in the web merge box and as `merge_request_auto_merge_enabled` in `ermite watch`. A merge request merged this way has `auto_merged` true.
M internal/adapters/web/mr.templ +14 -9
@@ -558,17 +558,22 @@ templ mergeMenu(p MRPage) {
558558 :disabled="!this.form.querySelector('input[name=mode]:checked:not(:disabled)')"
559559 :title="(this.form.querySelector('input[name=mode]:checked') || {}).title || ''"
560560 >Merge into { p.Target }</button>
561- if p.Box.CanAutoMerge {
562- <button
563- type="submit"
564- class="btn"
565- formaction={ templ.SafeURL(p.Box.AutoAction) }
566- disabled?={ len(p.Box.Modes) == 0 }
567- title="merge once the checks pass"
568- >Merge when ready</button>
569- }
570561 </div>
571562 </form>
563+ if p.Box.CanAutoMerge {
564+ <form class="d-acts" method="post" action={ templ.SafeURL(p.Box.AutoAction) }>
565+ <input type="hidden" name="head_id" value={ p.Box.Head }/>
566+ <fieldset class="d-modes">
567+ <legend>Auto-merge mode</legend>
568+ for i, m := range p.Box.Modes {
569+ <label><input type="radio" name="mode" value={ m.Value } checked?={ i == 0 }/> { m.Label }</label>
570+ }
571+ </fieldset>
572+ <div class="d-btns">
573+ <button type="submit" class="btn" disabled?={ len(p.Box.Modes) == 0 } title="merge once the checks pass">Merge when ready</button>
574+ </div>
575+ </form>
576+ }
572577 }
573578 </div>
574579 </details>
@@ -558,17 +558,22 @@ templ mergeMenu(p MRPage) {
558 :disabled="!this.form.querySelector('input[name=mode]:checked:not(:disabled)')"558 :disabled="!this.form.querySelector('input[name=mode]:checked:not(:disabled)')"
559 :title="(this.form.querySelector('input[name=mode]:checked') || {}).title || ''"559 :title="(this.form.querySelector('input[name=mode]:checked') || {}).title || ''"
560 >Merge into { p.Target }</button>560 >Merge into { p.Target }</button>
561- if p.Box.CanAutoMerge {
562- <button
563- type="submit"
564- class="btn"
565- formaction={ templ.SafeURL(p.Box.AutoAction) }
566- disabled?={ len(p.Box.Modes) == 0 }
567- title="merge once the checks pass"
568- >Merge when ready</button>
569- }
570 </div>561 </div>
571 </form>562 </form>
563+ if p.Box.CanAutoMerge {
564+ <form class="d-acts" method="post" action={ templ.SafeURL(p.Box.AutoAction) }>
565+ <input type="hidden" name="head_id" value={ p.Box.Head }/>
566+ <fieldset class="d-modes">
567+ <legend>Auto-merge mode</legend>
568+ for i, m := range p.Box.Modes {
569+ <label><input type="radio" name="mode" value={ m.Value } checked?={ i == 0 }/> { m.Label }</label>
570+ }
571+ </fieldset>
572+ <div class="d-btns">
573+ <button type="submit" class="btn" disabled?={ len(p.Box.Modes) == 0 } title="merge once the checks pass">Merge when ready</button>
574+ </div>
575+ </form>
576+ }
572 }577 }
573 </div>578 </div>
574 </details>579 </details>
M internal/adapters/web/mr_templ.go +361 -306
@@ -2860,45 +2860,100 @@ func mergeMenu(p MRPage) templ.Component {
28602860 if templ_7745c5c3_Err != nil {
28612861 return templ_7745c5c3_Err
28622862 }
2863- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, "</button> ")
2863+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, "</button></div></form>")
28642864 if templ_7745c5c3_Err != nil {
28652865 return templ_7745c5c3_Err
28662866 }
28672867 if p.Box.CanAutoMerge {
2868- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, "<button type=\"submit\" class=\"btn\" formaction=\"")
2868+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, "<form class=\"d-acts\" method=\"post\" action=\"")
28692869 if templ_7745c5c3_Err != nil {
28702870 return templ_7745c5c3_Err
28712871 }
2872- var templ_7745c5c3_Var137 string
2873- templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.SafeURL(p.Box.AutoAction))
2872+ var templ_7745c5c3_Var137 templ.SafeURL
2873+ templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.AutoAction))
28742874 if templ_7745c5c3_Err != nil {
2875- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 52}
2875+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 564, Col: 80}
28762876 }
2877- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var137)
2877+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var137))
28782878 if templ_7745c5c3_Err != nil {
28792879 return templ_7745c5c3_Err
28802880 }
2881- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "\"")
2881+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
2882+ if templ_7745c5c3_Err != nil {
2883+ return templ_7745c5c3_Err
2884+ }
2885+ var templ_7745c5c3_Var138 string
2886+ templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
2887+ if templ_7745c5c3_Err != nil {
2888+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 60}
2889+ }
2890+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var138)
2891+ if templ_7745c5c3_Err != nil {
2892+ return templ_7745c5c3_Err
2893+ }
2894+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, "\"><fieldset class=\"d-modes\"><legend>Auto-merge mode</legend> ")
2895+ if templ_7745c5c3_Err != nil {
2896+ return templ_7745c5c3_Err
2897+ }
2898+ for i, m := range p.Box.Modes {
2899+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "<label><input type=\"radio\" name=\"mode\" value=\"")
2900+ if templ_7745c5c3_Err != nil {
2901+ return templ_7745c5c3_Err
2902+ }
2903+ var templ_7745c5c3_Var139 string
2904+ templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
2905+ if templ_7745c5c3_Err != nil {
2906+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 569, Col: 62}
2907+ }
2908+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var139)
2909+ if templ_7745c5c3_Err != nil {
2910+ return templ_7745c5c3_Err
2911+ }
2912+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, "\"")
2913+ if templ_7745c5c3_Err != nil {
2914+ return templ_7745c5c3_Err
2915+ }
2916+ if i == 0 {
2917+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, " checked")
2918+ if templ_7745c5c3_Err != nil {
2919+ return templ_7745c5c3_Err
2920+ }
2921+ }
2922+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "> ")
2923+ if templ_7745c5c3_Err != nil {
2924+ return templ_7745c5c3_Err
2925+ }
2926+ var templ_7745c5c3_Var140 string
2927+ templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
2928+ if templ_7745c5c3_Err != nil {
2929+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 569, Col: 96}
2930+ }
2931+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var140))
2932+ if templ_7745c5c3_Err != nil {
2933+ return templ_7745c5c3_Err
2934+ }
2935+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "</label>")
2936+ if templ_7745c5c3_Err != nil {
2937+ return templ_7745c5c3_Err
2938+ }
2939+ }
2940+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "</fieldset><div class=\"d-btns\"><button type=\"submit\" class=\"btn\"")
28822941 if templ_7745c5c3_Err != nil {
28832942 return templ_7745c5c3_Err
28842943 }
28852944 if len(p.Box.Modes) == 0 {
2886- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, " disabled")
2945+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, " disabled")
28872946 if templ_7745c5c3_Err != nil {
28882947 return templ_7745c5c3_Err
28892948 }
28902949 }
2891- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, " title=\"merge once the checks pass\">Merge when ready</button>")
2950+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, " title=\"merge once the checks pass\">Merge when ready</button></div></form>")
28922951 if templ_7745c5c3_Err != nil {
28932952 return templ_7745c5c3_Err
28942953 }
28952954 }
2896- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, "</div></form>")
2897- if templ_7745c5c3_Err != nil {
2898- return templ_7745c5c3_Err
2899- }
29002955 }
2901- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, "</div></details>")
2956+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "</div></details>")
29022957 if templ_7745c5c3_Err != nil {
29032958 return templ_7745c5c3_Err
29042959 }
@@ -2924,182 +2979,182 @@ func MRMergeability(v MergeabilityView) templ.Component {
29242979 }()
29252980 }
29262981 ctx = templ.InitializeContext(ctx)
2927- templ_7745c5c3_Var138 := templ.GetChildren(ctx)
2928- if templ_7745c5c3_Var138 == nil {
2929- templ_7745c5c3_Var138 = templ.NopComponent
2982+ templ_7745c5c3_Var141 := templ.GetChildren(ctx)
2983+ if templ_7745c5c3_Var141 == nil {
2984+ templ_7745c5c3_Var141 = templ.NopComponent
29302985 }
29312986 ctx = templ.ClearChildren(ctx)
2932- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "<span data-mergeability data-state=\"")
2987+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "<span data-mergeability data-state=\"")
29332988 if templ_7745c5c3_Err != nil {
29342989 return templ_7745c5c3_Err
29352990 }
2936- var templ_7745c5c3_Var139 string
2937- templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
2991+ var templ_7745c5c3_Var142 string
2992+ templ_7745c5c3_Var142, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
29382993 if templ_7745c5c3_Err != nil {
2939- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 582, Col: 22}
2994+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 587, Col: 22}
29402995 }
2941- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var139)
2996+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var142)
29422997 if templ_7745c5c3_Err != nil {
29432998 return templ_7745c5c3_Err
29442999 }
2945- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "\" data-ff-ok=\"")
3000+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "\" data-ff-ok=\"")
29463001 if templ_7745c5c3_Err != nil {
29473002 return templ_7745c5c3_Err
29483003 }
2949- var templ_7745c5c3_Var140 string
2950- templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))
3004+ var templ_7745c5c3_Var143 string
3005+ templ_7745c5c3_Var143, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))
29513006 if templ_7745c5c3_Err != nil {
2952- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 583, Col: 41}
3007+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 588, Col: 41}
29533008 }
2954- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var140)
3009+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var143)
29553010 if templ_7745c5c3_Err != nil {
29563011 return templ_7745c5c3_Err
29573012 }
2958- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "\" data-merge-ok=\"")
3013+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "\" data-merge-ok=\"")
29593014 if templ_7745c5c3_Err != nil {
29603015 return templ_7745c5c3_Err
29613016 }
2962- var templ_7745c5c3_Var141 string
2963- templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))
3017+ var templ_7745c5c3_Var144 string
3018+ templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))
29643019 if templ_7745c5c3_Err != nil {
2965- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 584, Col: 47}
3020+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 589, Col: 47}
29663021 }
2967- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var141)
3022+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var144)
29683023 if templ_7745c5c3_Err != nil {
29693024 return templ_7745c5c3_Err
29703025 }
2971- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, "\" data-ff-reason=\"")
3026+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "\" data-ff-reason=\"")
29723027 if templ_7745c5c3_Err != nil {
29733028 return templ_7745c5c3_Err
29743029 }
2975- var templ_7745c5c3_Var142 string
2976- templ_7745c5c3_Var142, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)
3030+ var templ_7745c5c3_Var145 string
3031+ templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)
29773032 if templ_7745c5c3_Err != nil {
2978- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 585, Col: 29}
3033+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 29}
29793034 }
2980- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var142)
3035+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var145)
29813036 if templ_7745c5c3_Err != nil {
29823037 return templ_7745c5c3_Err
29833038 }
2984- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, "\" data-merge-reason=\"")
3039+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "\" data-merge-reason=\"")
29853040 if templ_7745c5c3_Err != nil {
29863041 return templ_7745c5c3_Err
29873042 }
2988- var templ_7745c5c3_Var143 string
2989- templ_7745c5c3_Var143, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)
3043+ var templ_7745c5c3_Var146 string
3044+ templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)
29903045 if templ_7745c5c3_Err != nil {
2991- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 586, Col: 35}
3046+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 591, Col: 35}
29923047 }
2993- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var143)
3048+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var146)
29943049 if templ_7745c5c3_Err != nil {
29953050 return templ_7745c5c3_Err
29963051 }
2997- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "\"><span class=\"badge\" data-state=\"")
3052+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "\"><span class=\"badge\" data-state=\"")
29983053 if templ_7745c5c3_Err != nil {
29993054 return templ_7745c5c3_Err
30003055 }
3001- var templ_7745c5c3_Var144 string
3002- templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
3056+ var templ_7745c5c3_Var147 string
3057+ templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
30033058 if templ_7745c5c3_Err != nil {
3004- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 588, Col: 42}
3059+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 42}
30053060 }
3006- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var144)
3061+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var147)
30073062 if templ_7745c5c3_Err != nil {
30083063 return templ_7745c5c3_Err
30093064 }
3010- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "\">")
3065+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "\">")
30113066 if templ_7745c5c3_Err != nil {
30123067 return templ_7745c5c3_Err
30133068 }
3014- var templ_7745c5c3_Var145 string
3015- templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
3069+ var templ_7745c5c3_Var148 string
3070+ templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
30163071 if templ_7745c5c3_Err != nil {
3017- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 588, Col: 54}
3072+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 54}
30183073 }
3019- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))
3074+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var148))
30203075 if templ_7745c5c3_Err != nil {
30213076 return templ_7745c5c3_Err
30223077 }
3023- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "</span> ")
3078+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, "</span> ")
30243079 if templ_7745c5c3_Err != nil {
30253080 return templ_7745c5c3_Err
30263081 }
30273082 if v.Detail != "" {
3028- var templ_7745c5c3_Var146 string
3029- templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
3083+ var templ_7745c5c3_Var149 string
3084+ templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
30303085 if templ_7745c5c3_Err != nil {
3031- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 8}
3086+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 595, Col: 8}
30323087 }
3033- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))
3088+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var149))
30343089 if templ_7745c5c3_Err != nil {
30353090 return templ_7745c5c3_Err
30363091 }
3037- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "<span class=\"dim\">")
3092+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "<span class=\"dim\">")
30383093 if templ_7745c5c3_Err != nil {
30393094 return templ_7745c5c3_Err
30403095 }
3041- var templ_7745c5c3_Var147 string
3042- templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)
3096+ var templ_7745c5c3_Var150 string
3097+ templ_7745c5c3_Var150, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)
30433098 if templ_7745c5c3_Err != nil {
3044- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 38}
3099+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 595, Col: 38}
30453100 }
3046- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var147))
3101+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var150))
30473102 if templ_7745c5c3_Err != nil {
30483103 return templ_7745c5c3_Err
30493104 }
3050- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "</span>")
3105+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "</span>")
30513106 if templ_7745c5c3_Err != nil {
30523107 return templ_7745c5c3_Err
30533108 }
30543109 }
3055- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "</span> ")
3110+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "</span> ")
30563111 if templ_7745c5c3_Err != nil {
30573112 return templ_7745c5c3_Err
30583113 }
30593114 if len(v.Paths) > 0 {
3060- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "<ul class=\"mg-paths\" aria-label=\"conflicting files\">")
3115+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "<ul class=\"mg-paths\" aria-label=\"conflicting files\">")
30613116 if templ_7745c5c3_Err != nil {
30623117 return templ_7745c5c3_Err
30633118 }
30643119 for _, path := range v.Paths {
3065- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "<li><code>")
3120+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "<li><code>")
30663121 if templ_7745c5c3_Err != nil {
30673122 return templ_7745c5c3_Err
30683123 }
3069- var templ_7745c5c3_Var148 string
3070- templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.JoinStringErrs(path)
3124+ var templ_7745c5c3_Var151 string
3125+ templ_7745c5c3_Var151, templ_7745c5c3_Err = templ.JoinStringErrs(path)
30713126 if templ_7745c5c3_Err != nil {
3072- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 596, Col: 20}
3127+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 601, Col: 20}
30733128 }
3074- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var148))
3129+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151))
30753130 if templ_7745c5c3_Err != nil {
30763131 return templ_7745c5c3_Err
30773132 }
3078- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, "</code></li>")
3133+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "</code></li>")
30793134 if templ_7745c5c3_Err != nil {
30803135 return templ_7745c5c3_Err
30813136 }
30823137 }
3083- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "</ul>")
3138+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "</ul>")
30843139 if templ_7745c5c3_Err != nil {
30853140 return templ_7745c5c3_Err
30863141 }
30873142 }
30883143 if v.PathsNote != "" {
3089- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "<p class=\"dim\">")
3144+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "<p class=\"dim\">")
30903145 if templ_7745c5c3_Err != nil {
30913146 return templ_7745c5c3_Err
30923147 }
3093- var templ_7745c5c3_Var149 string
3094- templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)
3148+ var templ_7745c5c3_Var152 string
3149+ templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)
30953150 if templ_7745c5c3_Err != nil {
3096- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 601, Col: 30}
3151+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 606, Col: 30}
30973152 }
3098- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var149))
3153+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))
30993154 if templ_7745c5c3_Err != nil {
31003155 return templ_7745c5c3_Err
31013156 }
3102- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "</p>")
3157+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "</p>")
31033158 if templ_7745c5c3_Err != nil {
31043159 return templ_7745c5c3_Err
31053160 }
@@ -3126,12 +3181,12 @@ func mrMergeabilitySlot(v MergeabilityView) templ.Component {
31263181 }()
31273182 }
31283183 ctx = templ.InitializeContext(ctx)
3129- templ_7745c5c3_Var150 := templ.GetChildren(ctx)
3130- if templ_7745c5c3_Var150 == nil {
3131- templ_7745c5c3_Var150 = templ.NopComponent
3184+ templ_7745c5c3_Var153 := templ.GetChildren(ctx)
3185+ if templ_7745c5c3_Var153 == nil {
3186+ templ_7745c5c3_Var153 = templ.NopComponent
31323187 }
31333188 ctx = templ.ClearChildren(ctx)
3134- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "<div id=\"mr-mergeability\" class=\"live-slot\" role=\"status\" data-slot>")
3189+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "<div id=\"mr-mergeability\" class=\"live-slot\" role=\"status\" data-slot>")
31353190 if templ_7745c5c3_Err != nil {
31363191 return templ_7745c5c3_Err
31373192 }
@@ -3139,7 +3194,7 @@ func mrMergeabilitySlot(v MergeabilityView) templ.Component {
31393194 if templ_7745c5c3_Err != nil {
31403195 return templ_7745c5c3_Err
31413196 }
3142- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "</div>")
3197+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "</div>")
31433198 if templ_7745c5c3_Err != nil {
31443199 return templ_7745c5c3_Err
31453200 }
@@ -3164,9 +3219,9 @@ func MRMergeabilityFragment(v MergeabilityView) templ.Component {
31643219 }()
31653220 }
31663221 ctx = templ.InitializeContext(ctx)
3167- templ_7745c5c3_Var151 := templ.GetChildren(ctx)
3168- if templ_7745c5c3_Var151 == nil {
3169- templ_7745c5c3_Var151 = templ.NopComponent
3222+ templ_7745c5c3_Var154 := templ.GetChildren(ctx)
3223+ if templ_7745c5c3_Var154 == nil {
3224+ templ_7745c5c3_Var154 = templ.NopComponent
31703225 }
31713226 ctx = templ.ClearChildren(ctx)
31723227 templ_7745c5c3_Err = mrMergeabilitySlot(v).Render(ctx, templ_7745c5c3_Buffer)
@@ -3195,128 +3250,128 @@ func moreMenu(p MRPage) templ.Component {
31953250 }()
31963251 }
31973252 ctx = templ.InitializeContext(ctx)
3198- templ_7745c5c3_Var152 := templ.GetChildren(ctx)
3199- if templ_7745c5c3_Var152 == nil {
3200- templ_7745c5c3_Var152 = templ.NopComponent
3253+ templ_7745c5c3_Var155 := templ.GetChildren(ctx)
3254+ if templ_7745c5c3_Var155 == nil {
3255+ templ_7745c5c3_Var155 = templ.NopComponent
32013256 }
32023257 ctx = templ.ClearChildren(ctx)
3203- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "<details class=\"menu omenu\"><summary class=\"btn icon\" aria-label=\"More actions\" title=\"more actions\">⋯</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"More actions\"><section class=\"merge-settings\"><h2>Merge settings</h2><dl class=\"kv\"><dt>modes</dt><dd>")
3258+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "<details class=\"menu omenu\"><summary class=\"btn icon\" aria-label=\"More actions\" title=\"more actions\">⋯</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"More actions\"><section class=\"merge-settings\"><h2>Merge settings</h2><dl class=\"kv\"><dt>modes</dt><dd>")
32043259 if templ_7745c5c3_Err != nil {
32053260 return templ_7745c5c3_Err
32063261 }
3207- var templ_7745c5c3_Var153 string
3208- templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
3262+ var templ_7745c5c3_Var156 string
3263+ templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
32093264 if templ_7745c5c3_Err != nil {
3210- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 628, Col: 38}
3265+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 633, Col: 38}
32113266 }
3212- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))
3267+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156))
32133268 if templ_7745c5c3_Err != nil {
32143269 return templ_7745c5c3_Err
32153270 }
3216- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "</dd><dt>checks</dt><dd>")
3271+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "</dd><dt>checks</dt><dd>")
32173272 if templ_7745c5c3_Err != nil {
32183273 return templ_7745c5c3_Err
32193274 }
32203275 if p.ChecksBlock {
3221- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "failing ones block the merge")
3276+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 304, "failing ones block the merge")
32223277 if templ_7745c5c3_Err != nil {
32233278 return templ_7745c5c3_Err
32243279 }
32253280 } else {
3226- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "do not block the merge")
3281+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 305, "do not block the merge")
32273282 if templ_7745c5c3_Err != nil {
32283283 return templ_7745c5c3_Err
32293284 }
32303285 }
3231- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "</dd></dl></section>")
3286+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 306, "</dd></dl></section>")
32323287 if templ_7745c5c3_Err != nil {
32333288 return templ_7745c5c3_Err
32343289 }
32353290 if p.Box != nil {
32363291 if p.Box.Signed {
3237- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "<p class=\"d-note\" id=\"mr-signing\">squash and merge commits are signed with ermite's own key (generated on first start). ")
3292+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 307, "<p class=\"d-note\" id=\"mr-signing\">squash and merge commits are signed with ermite's own key (generated on first start). ")
32383293 if templ_7745c5c3_Err != nil {
32393294 return templ_7745c5c3_Err
32403295 }
32413296 if p.Box.Fingerprint != "" {
3242- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "fingerprint <code>")
3297+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 308, "fingerprint <code>")
32433298 if templ_7745c5c3_Err != nil {
32443299 return templ_7745c5c3_Err
32453300 }
3246- var templ_7745c5c3_Var154 string
3247- templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)
3301+ var templ_7745c5c3_Var157 string
3302+ templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)
32483303 if templ_7745c5c3_Err != nil {
3249- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 644, Col: 44}
3304+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 649, Col: 44}
32503305 }
3251- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))
3306+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var157))
32523307 if templ_7745c5c3_Err != nil {
32533308 return templ_7745c5c3_Err
32543309 }
3255- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "</code> ")
3310+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 309, "</code> ")
32563311 if templ_7745c5c3_Err != nil {
32573312 return templ_7745c5c3_Err
32583313 }
32593314 }
3260- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 304, "<code>ermite signing-key show</code> prints it.</p>")
3315+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 310, "<code>ermite signing-key show</code> prints it.</p>")
32613316 if templ_7745c5c3_Err != nil {
32623317 return templ_7745c5c3_Err
32633318 }
32643319 }
3265- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 305, " ")
3320+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 311, " ")
32663321 if templ_7745c5c3_Err != nil {
32673322 return templ_7745c5c3_Err
32683323 }
32693324 if p.Box.CanMarkRead {
3270- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 306, "<form method=\"post\" action=\"")
3325+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 312, "<form method=\"post\" action=\"")
32713326 if templ_7745c5c3_Err != nil {
32723327 return templ_7745c5c3_Err
32733328 }
3274- var templ_7745c5c3_Var155 templ.SafeURL
3275- templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
3329+ var templ_7745c5c3_Var158 templ.SafeURL
3330+ templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
32763331 if templ_7745c5c3_Err != nil {
3277- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 650, Col: 65}
3332+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 65}
32783333 }
3279- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))
3334+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))
32803335 if templ_7745c5c3_Err != nil {
32813336 return templ_7745c5c3_Err
32823337 }
3283- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 307, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
3338+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 313, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
32843339 if templ_7745c5c3_Err != nil {
32853340 return templ_7745c5c3_Err
32863341 }
3287- var templ_7745c5c3_Var156 string
3288- templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
3342+ var templ_7745c5c3_Var159 string
3343+ templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
32893344 if templ_7745c5c3_Err != nil {
3290- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 651, Col: 60}
3345+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 656, Col: 60}
32913346 }
3292- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var156)
3347+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var159)
32933348 if templ_7745c5c3_Err != nil {
32943349 return templ_7745c5c3_Err
32953350 }
3296- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 308, "\"> <button type=\"submit\" title=\"the next visit can show only what changed after this head\" class=\"btn\" aria-keyshortcuts=\"Shift+R\" data-read>Mark read <kbd aria-hidden=\"true\">R</kbd></button></form>")
3351+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 314, "\"> <button type=\"submit\" title=\"the next visit can show only what changed after this head\" class=\"btn\" aria-keyshortcuts=\"Shift+R\" data-read>Mark read <kbd aria-hidden=\"true\">R</kbd></button></form>")
32973352 if templ_7745c5c3_Err != nil {
32983353 return templ_7745c5c3_Err
32993354 }
33003355 }
3301- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 309, " <form method=\"post\" action=\"")
3356+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 315, " <form method=\"post\" action=\"")
33023357 if templ_7745c5c3_Err != nil {
33033358 return templ_7745c5c3_Err
33043359 }
3305- var templ_7745c5c3_Var157 templ.SafeURL
3306- templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
3360+ var templ_7745c5c3_Var160 templ.SafeURL
3361+ templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
33073362 if templ_7745c5c3_Err != nil {
3308- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 65}
3363+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 660, Col: 65}
33093364 }
3310- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var157))
3365+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
33113366 if templ_7745c5c3_Err != nil {
33123367 return templ_7745c5c3_Err
33133368 }
3314- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 310, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")
3369+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 316, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")
33153370 if templ_7745c5c3_Err != nil {
33163371 return templ_7745c5c3_Err
33173372 }
33183373 if !p.Box.HeadGone && p.Box.ReadyAction == "" {
3319- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 311, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")
3374+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 317, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")
33203375 if templ_7745c5c3_Err != nil {
33213376 return templ_7745c5c3_Err
33223377 }
@@ -3324,13 +3379,13 @@ func moreMenu(p MRPage) templ.Component {
33243379 if templ_7745c5c3_Err != nil {
33253380 return templ_7745c5c3_Err
33263381 }
3327- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 312, "</details>")
3382+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 318, "</details>")
33283383 if templ_7745c5c3_Err != nil {
33293384 return templ_7745c5c3_Err
33303385 }
33313386 }
33323387 }
3333- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 313, "</div></details>")
3388+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 319, "</div></details>")
33343389 if templ_7745c5c3_Err != nil {
33353390 return templ_7745c5c3_Err
33363391 }
@@ -3354,12 +3409,12 @@ func Compare(l Layout, p ComparePage) templ.Component {
33543409 }()
33553410 }
33563411 ctx = templ.InitializeContext(ctx)
3357- templ_7745c5c3_Var158 := templ.GetChildren(ctx)
3358- if templ_7745c5c3_Var158 == nil {
3359- templ_7745c5c3_Var158 = templ.NopComponent
3412+ templ_7745c5c3_Var161 := templ.GetChildren(ctx)
3413+ if templ_7745c5c3_Var161 == nil {
3414+ templ_7745c5c3_Var161 = templ.NopComponent
33603415 }
33613416 ctx = templ.ClearChildren(ctx)
3362- templ_7745c5c3_Var159 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
3417+ templ_7745c5c3_Var162 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
33633418 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
33643419 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
33653420 if !templ_7745c5c3_IsBuffer {
@@ -3371,263 +3426,263 @@ func Compare(l Layout, p ComparePage) templ.Component {
33713426 }()
33723427 }
33733428 ctx = templ.InitializeContext(ctx)
3374- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 314, "<header class=\"show mr-h\"><h1>")
3429+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 320, "<header class=\"show mr-h\"><h1>")
33753430 if templ_7745c5c3_Err != nil {
33763431 return templ_7745c5c3_Err
33773432 }
3378- var templ_7745c5c3_Var160 string
3379- templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3433+ var templ_7745c5c3_Var163 string
3434+ templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
33803435 if templ_7745c5c3_Err != nil {
3381- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 672, Col: 17}
3436+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 677, Col: 17}
33823437 }
3383- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
3438+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var163))
33843439 if templ_7745c5c3_Err != nil {
33853440 return templ_7745c5c3_Err
33863441 }
3387- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 315, " → ")
3442+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 321, " → ")
33883443 if templ_7745c5c3_Err != nil {
33893444 return templ_7745c5c3_Err
33903445 }
3391- var templ_7745c5c3_Var161 string
3392- templ_7745c5c3_Var161, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3446+ var templ_7745c5c3_Var164 string
3447+ templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
33933448 if templ_7745c5c3_Err != nil {
3394- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 672, Col: 34}
3449+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 677, Col: 34}
33953450 }
3396- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var161))
3451+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var164))
33973452 if templ_7745c5c3_Err != nil {
33983453 return templ_7745c5c3_Err
33993454 }
3400- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 316, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")
3455+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 322, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")
34013456 if templ_7745c5c3_Err != nil {
34023457 return templ_7745c5c3_Err
34033458 }
3404- var templ_7745c5c3_Var162 templ.SafeURL
3405- templ_7745c5c3_Var162, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
3459+ var templ_7745c5c3_Var165 templ.SafeURL
3460+ templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
34063461 if templ_7745c5c3_Err != nil {
3407- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 675, Col: 45}
3462+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 45}
34083463 }
3409- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var162))
3464+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var165))
34103465 if templ_7745c5c3_Err != nil {
34113466 return templ_7745c5c3_Err
34123467 }
3413- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 317, "\">")
3468+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 323, "\">")
34143469 if templ_7745c5c3_Err != nil {
34153470 return templ_7745c5c3_Err
34163471 }
3417- var templ_7745c5c3_Var163 string
3418- templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3472+ var templ_7745c5c3_Var166 string
3473+ templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
34193474 if templ_7745c5c3_Err != nil {
3420- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 675, Col: 58}
3475+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 58}
34213476 }
3422- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var163))
3477+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))
34233478 if templ_7745c5c3_Err != nil {
34243479 return templ_7745c5c3_Err
34253480 }
3426- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 318, "</a></dd><dt>target</dt><dd><a href=\"")
3481+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 324, "</a></dd><dt>target</dt><dd><a href=\"")
34273482 if templ_7745c5c3_Err != nil {
34283483 return templ_7745c5c3_Err
34293484 }
3430- var templ_7745c5c3_Var164 templ.SafeURL
3431- templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
3485+ var templ_7745c5c3_Var167 templ.SafeURL
3486+ templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
34323487 if templ_7745c5c3_Err != nil {
3433- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 677, Col: 45}
3488+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 682, Col: 45}
34343489 }
3435- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var164))
3490+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))
34363491 if templ_7745c5c3_Err != nil {
34373492 return templ_7745c5c3_Err
34383493 }
3439- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 319, "\">")
3494+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 325, "\">")
34403495 if templ_7745c5c3_Err != nil {
34413496 return templ_7745c5c3_Err
34423497 }
3443- var templ_7745c5c3_Var165 string
3444- templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3498+ var templ_7745c5c3_Var168 string
3499+ templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
34453500 if templ_7745c5c3_Err != nil {
3446- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 677, Col: 58}
3501+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 682, Col: 58}
34473502 }
3448- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var165))
3503+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))
34493504 if templ_7745c5c3_Err != nil {
34503505 return templ_7745c5c3_Err
34513506 }
3452- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 320, "</a></dd><dt>ahead</dt><dd>")
3507+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 326, "</a></dd><dt>ahead</dt><dd>")
34533508 if templ_7745c5c3_Err != nil {
34543509 return templ_7745c5c3_Err
34553510 }
3456- var templ_7745c5c3_Var166 string
3457- templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
3511+ var templ_7745c5c3_Var169 string
3512+ templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
34583513 if templ_7745c5c3_Err != nil {
3459- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 679, Col: 21}
3514+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 684, Col: 21}
34603515 }
3461- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))
3516+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var169))
34623517 if templ_7745c5c3_Err != nil {
34633518 return templ_7745c5c3_Err
34643519 }
3465- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 321, "</dd></dl></header>")
3520+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 327, "</dd></dl></header>")
34663521 if templ_7745c5c3_Err != nil {
34673522 return templ_7745c5c3_Err
34683523 }
34693524 if p.Note != "" {
3470- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 322, "<p class=\"notice\">")
3525+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 328, "<p class=\"notice\">")
34713526 if templ_7745c5c3_Err != nil {
34723527 return templ_7745c5c3_Err
34733528 }
3474- var templ_7745c5c3_Var167 string
3475- templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
3529+ var templ_7745c5c3_Var170 string
3530+ templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
34763531 if templ_7745c5c3_Err != nil {
3477- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 683, Col: 29}
3532+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 688, Col: 29}
34783533 }
3479- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))
3534+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var170))
34803535 if templ_7745c5c3_Err != nil {
34813536 return templ_7745c5c3_Err
34823537 }
3483- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 323, "</p>")
3538+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 329, "</p>")
34843539 if templ_7745c5c3_Err != nil {
34853540 return templ_7745c5c3_Err
34863541 }
34873542 }
3488- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 324, " ")
3543+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 330, " ")
34893544 if templ_7745c5c3_Err != nil {
34903545 return templ_7745c5c3_Err
34913546 }
34923547 if p.Existing != nil {
3493- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 325, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")
3548+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 331, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")
34943549 if templ_7745c5c3_Err != nil {
34953550 return templ_7745c5c3_Err
34963551 }
3497- var templ_7745c5c3_Var168 templ.SafeURL
3498- templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
3552+ var templ_7745c5c3_Var171 templ.SafeURL
3553+ templ_7745c5c3_Var171, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
34993554 if templ_7745c5c3_Err != nil {
3500- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 686, Col: 114}
3555+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 114}
35013556 }
3502- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))
3557+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var171))
35033558 if templ_7745c5c3_Err != nil {
35043559 return templ_7745c5c3_Err
35053560 }
3506- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 326, "\">")
3561+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 332, "\">")
35073562 if templ_7745c5c3_Err != nil {
35083563 return templ_7745c5c3_Err
35093564 }
3510- var templ_7745c5c3_Var169 string
3511- templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
3565+ var templ_7745c5c3_Var172 string
3566+ templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
35123567 if templ_7745c5c3_Err != nil {
3513- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 686, Col: 135}
3568+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 135}
35143569 }
3515- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var169))
3570+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))
35163571 if templ_7745c5c3_Err != nil {
35173572 return templ_7745c5c3_Err
35183573 }
3519- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 327, "</a></p>")
3574+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 333, "</a></p>")
35203575 if templ_7745c5c3_Err != nil {
35213576 return templ_7745c5c3_Err
35223577 }
35233578 }
3524- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 328, " ")
3579+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 334, " ")
35253580 if templ_7745c5c3_Err != nil {
35263581 return templ_7745c5c3_Err
35273582 }
35283583 if p.Create != nil {
3529- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 329, "<form class=\"cform create\" method=\"post\" action=\"")
3584+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 335, "<form class=\"cform create\" method=\"post\" action=\"")
35303585 if templ_7745c5c3_Err != nil {
35313586 return templ_7745c5c3_Err
35323587 }
3533- var templ_7745c5c3_Var170 templ.SafeURL
3534- templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
3588+ var templ_7745c5c3_Var173 templ.SafeURL
3589+ templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
35353590 if templ_7745c5c3_Err != nil {
3536- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 689, Col: 83}
3591+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 694, Col: 83}
35373592 }
3538- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var170))
3593+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))
35393594 if templ_7745c5c3_Err != nil {
35403595 return templ_7745c5c3_Err
35413596 }
3542- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 330, "\"><input type=\"hidden\" name=\"source\" value=\"")
3597+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 336, "\"><input type=\"hidden\" name=\"source\" value=\"")
35433598 if templ_7745c5c3_Err != nil {
35443599 return templ_7745c5c3_Err
35453600 }
3546- var templ_7745c5c3_Var171 string
3547- templ_7745c5c3_Var171, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
3601+ var templ_7745c5c3_Var174 string
3602+ templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
35483603 if templ_7745c5c3_Err != nil {
3549- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 690, Col: 62}
3604+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 695, Col: 62}
35503605 }
3551- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var171)
3606+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var174)
35523607 if templ_7745c5c3_Err != nil {
35533608 return templ_7745c5c3_Err
35543609 }
3555- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 331, "\"> <input type=\"hidden\" name=\"target\" value=\"")
3610+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 337, "\"> <input type=\"hidden\" name=\"target\" value=\"")
35563611 if templ_7745c5c3_Err != nil {
35573612 return templ_7745c5c3_Err
35583613 }
3559- var templ_7745c5c3_Var172 string
3560- templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
3614+ var templ_7745c5c3_Var175 string
3615+ templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
35613616 if templ_7745c5c3_Err != nil {
3562- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 62}
3617+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 696, Col: 62}
35633618 }
3564- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var172)
3619+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var175)
35653620 if templ_7745c5c3_Err != nil {
35663621 return templ_7745c5c3_Err
35673622 }
3568- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 332, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")
3623+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 338, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")
35693624 if templ_7745c5c3_Err != nil {
35703625 return templ_7745c5c3_Err
35713626 }
3572- var templ_7745c5c3_Var173 string
3573- templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
3627+ var templ_7745c5c3_Var176 string
3628+ templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
35743629 if templ_7745c5c3_Err != nil {
3575- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 693, Col: 97}
3630+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 698, Col: 97}
35763631 }
3577- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var173)
3632+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var176)
35783633 if templ_7745c5c3_Err != nil {
35793634 return templ_7745c5c3_Err
35803635 }
3581- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 333, "\" autocomplete=\"off\"> <label for=\"mr-desc\">description</label> <textarea id=\"mr-desc\" name=\"description\" rows=\"4\" maxlength=\"8000\" placeholder=\"Markdown, optional\"></textarea><div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Create merge request</button></div></form>")
3636+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 339, "\" autocomplete=\"off\"> <label for=\"mr-desc\">description</label> <textarea id=\"mr-desc\" name=\"description\" rows=\"4\" maxlength=\"8000\" placeholder=\"Markdown, optional\"></textarea><div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Create merge request</button></div></form>")
35823637 if templ_7745c5c3_Err != nil {
35833638 return templ_7745c5c3_Err
35843639 }
35853640 }
3586- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 334, " ")
3641+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 340, " ")
35873642 if templ_7745c5c3_Err != nil {
35883643 return templ_7745c5c3_Err
35893644 }
35903645 if p.HasDiff {
3591- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 335, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
3646+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 341, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
35923647 if templ_7745c5c3_Err != nil {
35933648 return templ_7745c5c3_Err
35943649 }
3595- var templ_7745c5c3_Var174 string
3596- templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
3650+ var templ_7745c5c3_Var177 string
3651+ templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
35973652 if templ_7745c5c3_Err != nil {
3598- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 703, Col: 57}
3653+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 57}
35993654 }
3600- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))
3655+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var177))
36013656 if templ_7745c5c3_Err != nil {
36023657 return templ_7745c5c3_Err
36033658 }
3604- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 336, " · <span class=\"plus\">+")
3659+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 342, " · <span class=\"plus\">+")
36053660 if templ_7745c5c3_Err != nil {
36063661 return templ_7745c5c3_Err
36073662 }
3608- var templ_7745c5c3_Var175 string
3609- templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
3663+ var templ_7745c5c3_Var178 string
3664+ templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
36103665 if templ_7745c5c3_Err != nil {
3611- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 703, Col: 97}
3666+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 97}
36123667 }
3613- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var175))
3668+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var178))
36143669 if templ_7745c5c3_Err != nil {
36153670 return templ_7745c5c3_Err
36163671 }
3617- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 337, "</span> <span class=\"minus\">-")
3672+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 343, "</span> <span class=\"minus\">-")
36183673 if templ_7745c5c3_Err != nil {
36193674 return templ_7745c5c3_Err
36203675 }
3621- var templ_7745c5c3_Var176 string
3622- templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
3676+ var templ_7745c5c3_Var179 string
3677+ templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
36233678 if templ_7745c5c3_Err != nil {
3624- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 703, Col: 142}
3679+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 142}
36253680 }
3626- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var176))
3681+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))
36273682 if templ_7745c5c3_Err != nil {
36283683 return templ_7745c5c3_Err
36293684 }
3630- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 338, "</span></span> <span class=\"grow\"></span>")
3685+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 344, "</span></span> <span class=\"grow\"></span>")
36313686 if templ_7745c5c3_Err != nil {
36323687 return templ_7745c5c3_Err
36333688 }
@@ -3635,64 +3690,64 @@ func Compare(l Layout, p ComparePage) templ.Component {
36353690 if templ_7745c5c3_Err != nil {
36363691 return templ_7745c5c3_Err
36373692 }
3638- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 339, "</div>")
3693+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 345, "</div>")
36393694 if templ_7745c5c3_Err != nil {
36403695 return templ_7745c5c3_Err
36413696 }
36423697 if p.Invisible {
3643- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 340, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")
3698+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 346, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")
36443699 if templ_7745c5c3_Err != nil {
36453700 return templ_7745c5c3_Err
36463701 }
36473702 }
3648- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 341, " <div id=\"diffs\"")
3703+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 347, " <div id=\"diffs\"")
36493704 if templ_7745c5c3_Err != nil {
36503705 return templ_7745c5c3_Err
36513706 }
36523707 if p.Both {
3653- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 342, " data-diff=\"")
3708+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 348, " data-diff=\"")
36543709 if templ_7745c5c3_Err != nil {
36553710 return templ_7745c5c3_Err
36563711 }
3657- var templ_7745c5c3_Var177 string
3658- templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3712+ var templ_7745c5c3_Var180 string
3713+ templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
36593714 if templ_7745c5c3_Err != nil {
3660- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 716, Col: 23}
3715+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 721, Col: 23}
36613716 }
3662- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var177)
3717+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var180)
36633718 if templ_7745c5c3_Err != nil {
36643719 return templ_7745c5c3_Err
36653720 }
3666- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 343, "\"")
3721+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 349, "\"")
36673722 if templ_7745c5c3_Err != nil {
36683723 return templ_7745c5c3_Err
36693724 }
36703725 } else {
3671- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 344, " data-view=\"")
3726+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 350, " data-view=\"")
36723727 if templ_7745c5c3_Err != nil {
36733728 return templ_7745c5c3_Err
36743729 }
3675- var templ_7745c5c3_Var178 string
3676- templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3730+ var templ_7745c5c3_Var181 string
3731+ templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
36773732 if templ_7745c5c3_Err != nil {
3678- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 718, Col: 23}
3733+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 23}
36793734 }
3680- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var178)
3735+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var181)
36813736 if templ_7745c5c3_Err != nil {
36823737 return templ_7745c5c3_Err
36833738 }
3684- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 345, "\"")
3739+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 351, "\"")
36853740 if templ_7745c5c3_Err != nil {
36863741 return templ_7745c5c3_Err
36873742 }
36883743 }
36893744 if p.Both && !p.Pinned {
3690- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 346, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
3745+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 352, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
36913746 if templ_7745c5c3_Err != nil {
36923747 return templ_7745c5c3_Err
36933748 }
36943749 }
3695- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 347, ">")
3750+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 353, ">")
36963751 if templ_7745c5c3_Err != nil {
36973752 return templ_7745c5c3_Err
36983753 }
@@ -3702,14 +3757,14 @@ func Compare(l Layout, p ComparePage) templ.Component {
37023757 return templ_7745c5c3_Err
37033758 }
37043759 }
3705- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 348, "</div>")
3760+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 354, "</div>")
37063761 if templ_7745c5c3_Err != nil {
37073762 return templ_7745c5c3_Err
37083763 }
37093764 }
37103765 return nil
37113766 })
3712- templ_7745c5c3_Err = Shell(l, compareRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var159), templ_7745c5c3_Buffer)
3767+ templ_7745c5c3_Err = Shell(l, compareRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var162), templ_7745c5c3_Buffer)
37133768 if templ_7745c5c3_Err != nil {
37143769 return templ_7745c5c3_Err
37153770 }
@@ -3733,173 +3788,173 @@ func compareRail(p ComparePage) templ.Component {
37333788 }()
37343789 }
37353790 ctx = templ.InitializeContext(ctx)
3736- templ_7745c5c3_Var179 := templ.GetChildren(ctx)
3737- if templ_7745c5c3_Var179 == nil {
3738- templ_7745c5c3_Var179 = templ.NopComponent
3791+ templ_7745c5c3_Var182 := templ.GetChildren(ctx)
3792+ if templ_7745c5c3_Var182 == nil {
3793+ templ_7745c5c3_Var182 = templ.NopComponent
37393794 }
37403795 ctx = templ.ClearChildren(ctx)
3741- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 349, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")
3796+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 355, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")
37423797 if templ_7745c5c3_Err != nil {
37433798 return templ_7745c5c3_Err
37443799 }
3745- var templ_7745c5c3_Var180 string
3746- templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
3800+ var templ_7745c5c3_Var183 string
3801+ templ_7745c5c3_Var183, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
37473802 if templ_7745c5c3_Err != nil {
3748- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 734, Col: 67}
3803+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 739, Col: 67}
37493804 }
3750- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180))
3805+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var183))
37513806 if templ_7745c5c3_Err != nil {
37523807 return templ_7745c5c3_Err
37533808 }
3754- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 350, "</span></h2><ul class=\"pcommits\">")
3809+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 356, "</span></h2><ul class=\"pcommits\">")
37553810 if templ_7745c5c3_Err != nil {
37563811 return templ_7745c5c3_Err
37573812 }
37583813 for _, c := range p.Ahead {
3759- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 351, "<li><a href=\"")
3814+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 357, "<li><a href=\"")
37603815 if templ_7745c5c3_Err != nil {
37613816 return templ_7745c5c3_Err
37623817 }
3763- var templ_7745c5c3_Var181 templ.SafeURL
3764- templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
3818+ var templ_7745c5c3_Var184 templ.SafeURL
3819+ templ_7745c5c3_Var184, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
37653820 if templ_7745c5c3_Err != nil {
3766- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 738, Col: 37}
3821+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 37}
37673822 }
3768- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var181))
3823+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var184))
37693824 if templ_7745c5c3_Err != nil {
37703825 return templ_7745c5c3_Err
37713826 }
3772- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 352, "\">")
3827+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 358, "\">")
37733828 if templ_7745c5c3_Err != nil {
37743829 return templ_7745c5c3_Err
37753830 }
3776- var templ_7745c5c3_Var182 string
3777- templ_7745c5c3_Var182, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
3831+ var templ_7745c5c3_Var185 string
3832+ templ_7745c5c3_Var185, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
37783833 if templ_7745c5c3_Err != nil {
3779- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 738, Col: 49}
3834+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 49}
37803835 }
3781- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var182))
3836+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var185))
37823837 if templ_7745c5c3_Err != nil {
37833838 return templ_7745c5c3_Err
37843839 }
3785- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 353, "</a> <span class=\"s\">")
3840+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 359, "</a> <span class=\"s\">")
37863841 if templ_7745c5c3_Err != nil {
37873842 return templ_7745c5c3_Err
37883843 }
3789- var templ_7745c5c3_Var183 string
3790- templ_7745c5c3_Var183, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
3844+ var templ_7745c5c3_Var186 string
3845+ templ_7745c5c3_Var186, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
37913846 if templ_7745c5c3_Err != nil {
3792- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 739, Col: 32}
3847+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 744, Col: 32}
37933848 }
3794- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var183))
3849+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var186))
37953850 if templ_7745c5c3_Err != nil {
37963851 return templ_7745c5c3_Err
37973852 }
3798- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 354, "</span> <span class=\"mute\">")
3853+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 360, "</span> <span class=\"mute\">")
37993854 if templ_7745c5c3_Err != nil {
38003855 return templ_7745c5c3_Err
38013856 }
3802- var templ_7745c5c3_Var184 string
3803- templ_7745c5c3_Var184, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
3857+ var templ_7745c5c3_Var187 string
3858+ templ_7745c5c3_Var187, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
38043859 if templ_7745c5c3_Err != nil {
3805- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 741, Col: 16}
3860+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 746, Col: 16}
38063861 }
3807- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var184))
3862+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var187))
38083863 if templ_7745c5c3_Err != nil {
38093864 return templ_7745c5c3_Err
38103865 }
3811- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 355, " ")
3866+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 361, " ")
38123867 if templ_7745c5c3_Err != nil {
38133868 return templ_7745c5c3_Err
38143869 }
38153870 if c.WhenAt != "" {
3816- var templ_7745c5c3_Var185 string
3817- templ_7745c5c3_Var185, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
3871+ var templ_7745c5c3_Var188 string
3872+ templ_7745c5c3_Var188, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
38183873 if templ_7745c5c3_Err != nil {
3819- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 15}
3874+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 15}
38203875 }
3821- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var185))
3876+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var188))
38223877 if templ_7745c5c3_Err != nil {
38233878 return templ_7745c5c3_Err
38243879 }
3825- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 356, "<time datetime=\"")
3880+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 362, "<time datetime=\"")
38263881 if templ_7745c5c3_Err != nil {
38273882 return templ_7745c5c3_Err
38283883 }
3829- var templ_7745c5c3_Var186 string
3830- templ_7745c5c3_Var186, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
3884+ var templ_7745c5c3_Var189 string
3885+ templ_7745c5c3_Var189, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
38313886 if templ_7745c5c3_Err != nil {
3832- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 42}
3887+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 42}
38333888 }
3834- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var186)
3889+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var189)
38353890 if templ_7745c5c3_Err != nil {
38363891 return templ_7745c5c3_Err
38373892 }
3838- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 357, "\">")
3893+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 363, "\">")
38393894 if templ_7745c5c3_Err != nil {
38403895 return templ_7745c5c3_Err
38413896 }
3842- var templ_7745c5c3_Var187 string
3843- templ_7745c5c3_Var187, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
3897+ var templ_7745c5c3_Var190 string
3898+ templ_7745c5c3_Var190, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
38443899 if templ_7745c5c3_Err != nil {
3845- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 53}
3900+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 53}
38463901 }
3847- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var187))
3902+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var190))
38483903 if templ_7745c5c3_Err != nil {
38493904 return templ_7745c5c3_Err
38503905 }
3851- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 358, "</time>")
3906+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 364, "</time>")
38523907 if templ_7745c5c3_Err != nil {
38533908 return templ_7745c5c3_Err
38543909 }
38553910 }
3856- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 359, "</span></li>")
3911+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 365, "</span></li>")
38573912 if templ_7745c5c3_Err != nil {
38583913 return templ_7745c5c3_Err
38593914 }
38603915 }
3861- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 360, "</ul>")
3916+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 366, "</ul>")
38623917 if templ_7745c5c3_Err != nil {
38633918 return templ_7745c5c3_Err
38643919 }
38653920 if len(p.Ahead) == 0 {
3866- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 361, "<p class=\"dim\">no commit ahead of ")
3921+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 367, "<p class=\"dim\">no commit ahead of ")
38673922 if templ_7745c5c3_Err != nil {
38683923 return templ_7745c5c3_Err
38693924 }
3870- var templ_7745c5c3_Var188 string
3871- templ_7745c5c3_Var188, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3925+ var templ_7745c5c3_Var191 string
3926+ templ_7745c5c3_Var191, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
38723927 if templ_7745c5c3_Err != nil {
3873- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 750, Col: 47}
3928+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 755, Col: 47}
38743929 }
3875- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var188))
3930+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var191))
38763931 if templ_7745c5c3_Err != nil {
38773932 return templ_7745c5c3_Err
38783933 }
3879- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 362, ".</p>")
3934+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 368, ".</p>")
38803935 if templ_7745c5c3_Err != nil {
38813936 return templ_7745c5c3_Err
38823937 }
38833938 }
3884- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 363, "</section>")
3939+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 369, "</section>")
38853940 if templ_7745c5c3_Err != nil {
38863941 return templ_7745c5c3_Err
38873942 }
38883943 if p.HasDiff {
3889- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 364, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
3944+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 370, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
38903945 if templ_7745c5c3_Err != nil {
38913946 return templ_7745c5c3_Err
38923947 }
3893- var templ_7745c5c3_Var189 string
3894- templ_7745c5c3_Var189, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
3948+ var templ_7745c5c3_Var192 string
3949+ templ_7745c5c3_Var192, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
38953950 if templ_7745c5c3_Err != nil {
3896- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 755, Col: 66}
3951+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 760, Col: 66}
38973952 }
3898- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var189))
3953+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var192))
38993954 if templ_7745c5c3_Err != nil {
39003955 return templ_7745c5c3_Err
39013956 }
3902- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 365, "</span></h2>")
3957+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 371, "</span></h2>")
39033958 if templ_7745c5c3_Err != nil {
39043959 return templ_7745c5c3_Err
39053960 }
@@ -3907,12 +3962,12 @@ func compareRail(p ComparePage) templ.Component {
39073962 if templ_7745c5c3_Err != nil {
39083963 return templ_7745c5c3_Err
39093964 }
3910- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 366, "</section>")
3965+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 372, "</section>")
39113966 if templ_7745c5c3_Err != nil {
39123967 return templ_7745c5c3_Err
39133968 }
39143969 }
3915- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 367, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")
3970+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 373, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")
39163971 if templ_7745c5c3_Err != nil {
39173972 return templ_7745c5c3_Err
39183973 }
@@ -3920,7 +3975,7 @@ func compareRail(p ComparePage) templ.Component {
39203975 if templ_7745c5c3_Err != nil {
39213976 return templ_7745c5c3_Err
39223977 }
3923- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 368, "</section>")
3978+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 374, "</section>")
39243979 if templ_7745c5c3_Err != nil {
39253980 return templ_7745c5c3_Err
39263981 }
@@ -2860,45 +2860,100 @@ func mergeMenu(p MRPage) templ.Component {
2860 if templ_7745c5c3_Err != nil {2860 if templ_7745c5c3_Err != nil {
2861 return templ_7745c5c3_Err2861 return templ_7745c5c3_Err
2862 }2862 }
2863- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, "</button> ")2863+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 270, "</button></div></form>")
2864 if templ_7745c5c3_Err != nil {2864 if templ_7745c5c3_Err != nil {
2865 return templ_7745c5c3_Err2865 return templ_7745c5c3_Err
2866 }2866 }
2867 if p.Box.CanAutoMerge {2867 if p.Box.CanAutoMerge {
2868- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, "<button type=\"submit\" class=\"btn\" formaction=\"")2868+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 271, "<form class=\"d-acts\" method=\"post\" action=\"")
2869 if templ_7745c5c3_Err != nil {2869 if templ_7745c5c3_Err != nil {
2870 return templ_7745c5c3_Err2870 return templ_7745c5c3_Err
2871 }2871 }
2872- var templ_7745c5c3_Var137 string2872+ var templ_7745c5c3_Var137 templ.SafeURL
2873- templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.SafeURL(p.Box.AutoAction))2873+ templ_7745c5c3_Var137, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.AutoAction))
2874 if templ_7745c5c3_Err != nil {2874 if templ_7745c5c3_Err != nil {
2875- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 52}2875+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 564, Col: 80}
2876 }2876 }
2877- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var137)2877+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var137))
2878 if templ_7745c5c3_Err != nil {2878 if templ_7745c5c3_Err != nil {
2879 return templ_7745c5c3_Err2879 return templ_7745c5c3_Err
2880 }2880 }
2881- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "\"")2881+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 272, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
2882+ if templ_7745c5c3_Err != nil {
2883+ return templ_7745c5c3_Err
2884+ }
2885+ var templ_7745c5c3_Var138 string
2886+ templ_7745c5c3_Var138, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
2887+ if templ_7745c5c3_Err != nil {
2888+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 565, Col: 60}
2889+ }
2890+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var138)
2891+ if templ_7745c5c3_Err != nil {
2892+ return templ_7745c5c3_Err
2893+ }
2894+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, "\"><fieldset class=\"d-modes\"><legend>Auto-merge mode</legend> ")
2895+ if templ_7745c5c3_Err != nil {
2896+ return templ_7745c5c3_Err
2897+ }
2898+ for i, m := range p.Box.Modes {
2899+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, "<label><input type=\"radio\" name=\"mode\" value=\"")
2900+ if templ_7745c5c3_Err != nil {
2901+ return templ_7745c5c3_Err
2902+ }
2903+ var templ_7745c5c3_Var139 string
2904+ templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.ResolveAttributeValue(m.Value)
2905+ if templ_7745c5c3_Err != nil {
2906+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 569, Col: 62}
2907+ }
2908+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var139)
2909+ if templ_7745c5c3_Err != nil {
2910+ return templ_7745c5c3_Err
2911+ }
2912+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, "\"")
2913+ if templ_7745c5c3_Err != nil {
2914+ return templ_7745c5c3_Err
2915+ }
2916+ if i == 0 {
2917+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, " checked")
2918+ if templ_7745c5c3_Err != nil {
2919+ return templ_7745c5c3_Err
2920+ }
2921+ }
2922+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "> ")
2923+ if templ_7745c5c3_Err != nil {
2924+ return templ_7745c5c3_Err
2925+ }
2926+ var templ_7745c5c3_Var140 string
2927+ templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.JoinStringErrs(m.Label)
2928+ if templ_7745c5c3_Err != nil {
2929+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 569, Col: 96}
2930+ }
2931+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var140))
2932+ if templ_7745c5c3_Err != nil {
2933+ return templ_7745c5c3_Err
2934+ }
2935+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "</label>")
2936+ if templ_7745c5c3_Err != nil {
2937+ return templ_7745c5c3_Err
2938+ }
2939+ }
2940+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "</fieldset><div class=\"d-btns\"><button type=\"submit\" class=\"btn\"")
2882 if templ_7745c5c3_Err != nil {2941 if templ_7745c5c3_Err != nil {
2883 return templ_7745c5c3_Err2942 return templ_7745c5c3_Err
2884 }2943 }
2885 if len(p.Box.Modes) == 0 {2944 if len(p.Box.Modes) == 0 {
2886- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 273, " disabled")2945+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, " disabled")
2887 if templ_7745c5c3_Err != nil {2946 if templ_7745c5c3_Err != nil {
2888 return templ_7745c5c3_Err2947 return templ_7745c5c3_Err
2889 }2948 }
2890 }2949 }
2891- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 274, " title=\"merge once the checks pass\">Merge when ready</button>")2950+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, " title=\"merge once the checks pass\">Merge when ready</button></div></form>")
2892 if templ_7745c5c3_Err != nil {2951 if templ_7745c5c3_Err != nil {
2893 return templ_7745c5c3_Err2952 return templ_7745c5c3_Err
2894 }2953 }
2895 }2954 }
2896- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 275, "</div></form>")
2897- if templ_7745c5c3_Err != nil {
2898- return templ_7745c5c3_Err
2899- }
2900 }2955 }
2901- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 276, "</div></details>")2956+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "</div></details>")
2902 if templ_7745c5c3_Err != nil {2957 if templ_7745c5c3_Err != nil {
2903 return templ_7745c5c3_Err2958 return templ_7745c5c3_Err
2904 }2959 }
@@ -2924,182 +2979,182 @@ func MRMergeability(v MergeabilityView) templ.Component {
2924 }()2979 }()
2925 }2980 }
2926 ctx = templ.InitializeContext(ctx)2981 ctx = templ.InitializeContext(ctx)
2927- templ_7745c5c3_Var138 := templ.GetChildren(ctx)2982+ templ_7745c5c3_Var141 := templ.GetChildren(ctx)
2928- if templ_7745c5c3_Var138 == nil {2983+ if templ_7745c5c3_Var141 == nil {
2929- templ_7745c5c3_Var138 = templ.NopComponent2984+ templ_7745c5c3_Var141 = templ.NopComponent
2930 }2985 }
2931 ctx = templ.ClearChildren(ctx)2986 ctx = templ.ClearChildren(ctx)
2932- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 277, "<span data-mergeability data-state=\"")2987+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "<span data-mergeability data-state=\"")
2933 if templ_7745c5c3_Err != nil {2988 if templ_7745c5c3_Err != nil {
2934 return templ_7745c5c3_Err2989 return templ_7745c5c3_Err
2935 }2990 }
2936- var templ_7745c5c3_Var139 string2991+ var templ_7745c5c3_Var142 string
2937- templ_7745c5c3_Var139, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)2992+ templ_7745c5c3_Var142, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
2938 if templ_7745c5c3_Err != nil {2993 if templ_7745c5c3_Err != nil {
2939- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 582, Col: 22}2994+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 587, Col: 22}
2940 }2995 }
2941- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var139)2996+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var142)
2942 if templ_7745c5c3_Err != nil {2997 if templ_7745c5c3_Err != nil {
2943 return templ_7745c5c3_Err2998 return templ_7745c5c3_Err
2944 }2999 }
2945- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 278, "\" data-ff-ok=\"")3000+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "\" data-ff-ok=\"")
2946 if templ_7745c5c3_Err != nil {3001 if templ_7745c5c3_Err != nil {
2947 return templ_7745c5c3_Err3002 return templ_7745c5c3_Err
2948 }3003 }
2949- var templ_7745c5c3_Var140 string3004+ var templ_7745c5c3_Var143 string
2950- templ_7745c5c3_Var140, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))3005+ templ_7745c5c3_Var143, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.FFOk))
2951 if templ_7745c5c3_Err != nil {3006 if templ_7745c5c3_Err != nil {
2952- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 583, Col: 41}3007+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 588, Col: 41}
2953 }3008 }
2954- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var140)3009+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var143)
2955 if templ_7745c5c3_Err != nil {3010 if templ_7745c5c3_Err != nil {
2956 return templ_7745c5c3_Err3011 return templ_7745c5c3_Err
2957 }3012 }
2958- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 279, "\" data-merge-ok=\"")3013+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "\" data-merge-ok=\"")
2959 if templ_7745c5c3_Err != nil {3014 if templ_7745c5c3_Err != nil {
2960 return templ_7745c5c3_Err3015 return templ_7745c5c3_Err
2961 }3016 }
2962- var templ_7745c5c3_Var141 string3017+ var templ_7745c5c3_Var144 string
2963- templ_7745c5c3_Var141, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))3018+ templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.ResolveAttributeValue(strconv.FormatBool(v.MergeOk))
2964 if templ_7745c5c3_Err != nil {3019 if templ_7745c5c3_Err != nil {
2965- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 584, Col: 47}3020+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 589, Col: 47}
2966 }3021 }
2967- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var141)3022+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var144)
2968 if templ_7745c5c3_Err != nil {3023 if templ_7745c5c3_Err != nil {
2969 return templ_7745c5c3_Err3024 return templ_7745c5c3_Err
2970 }3025 }
2971- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 280, "\" data-ff-reason=\"")3026+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "\" data-ff-reason=\"")
2972 if templ_7745c5c3_Err != nil {3027 if templ_7745c5c3_Err != nil {
2973 return templ_7745c5c3_Err3028 return templ_7745c5c3_Err
2974 }3029 }
2975- var templ_7745c5c3_Var142 string3030+ var templ_7745c5c3_Var145 string
2976- templ_7745c5c3_Var142, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)3031+ templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.FFReason)
2977 if templ_7745c5c3_Err != nil {3032 if templ_7745c5c3_Err != nil {
2978- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 585, Col: 29}3033+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 29}
2979 }3034 }
2980- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var142)3035+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var145)
2981 if templ_7745c5c3_Err != nil {3036 if templ_7745c5c3_Err != nil {
2982 return templ_7745c5c3_Err3037 return templ_7745c5c3_Err
2983 }3038 }
2984- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 281, "\" data-merge-reason=\"")3039+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "\" data-merge-reason=\"")
2985 if templ_7745c5c3_Err != nil {3040 if templ_7745c5c3_Err != nil {
2986 return templ_7745c5c3_Err3041 return templ_7745c5c3_Err
2987 }3042 }
2988- var templ_7745c5c3_Var143 string3043+ var templ_7745c5c3_Var146 string
2989- templ_7745c5c3_Var143, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)3044+ templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.MergeReason)
2990 if templ_7745c5c3_Err != nil {3045 if templ_7745c5c3_Err != nil {
2991- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 586, Col: 35}3046+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 591, Col: 35}
2992 }3047 }
2993- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var143)3048+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var146)
2994 if templ_7745c5c3_Err != nil {3049 if templ_7745c5c3_Err != nil {
2995 return templ_7745c5c3_Err3050 return templ_7745c5c3_Err
2996 }3051 }
2997- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 282, "\"><span class=\"badge\" data-state=\"")3052+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "\"><span class=\"badge\" data-state=\"")
2998 if templ_7745c5c3_Err != nil {3053 if templ_7745c5c3_Err != nil {
2999 return templ_7745c5c3_Err3054 return templ_7745c5c3_Err
3000 }3055 }
3001- var templ_7745c5c3_Var144 string3056+ var templ_7745c5c3_Var147 string
3002- templ_7745c5c3_Var144, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)3057+ templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.ResolveAttributeValue(v.State)
3003 if templ_7745c5c3_Err != nil {3058 if templ_7745c5c3_Err != nil {
3004- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 588, Col: 42}3059+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 42}
3005 }3060 }
3006- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var144)3061+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var147)
3007 if templ_7745c5c3_Err != nil {3062 if templ_7745c5c3_Err != nil {
3008 return templ_7745c5c3_Err3063 return templ_7745c5c3_Err
3009 }3064 }
3010- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 283, "\">")3065+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "\">")
3011 if templ_7745c5c3_Err != nil {3066 if templ_7745c5c3_Err != nil {
3012 return templ_7745c5c3_Err3067 return templ_7745c5c3_Err
3013 }3068 }
3014- var templ_7745c5c3_Var145 string3069+ var templ_7745c5c3_Var148 string
3015- templ_7745c5c3_Var145, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)3070+ templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.JoinStringErrs(v.Label)
3016 if templ_7745c5c3_Err != nil {3071 if templ_7745c5c3_Err != nil {
3017- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 588, Col: 54}3072+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 593, Col: 54}
3018 }3073 }
3019- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var145))3074+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var148))
3020 if templ_7745c5c3_Err != nil {3075 if templ_7745c5c3_Err != nil {
3021 return templ_7745c5c3_Err3076 return templ_7745c5c3_Err
3022 }3077 }
3023- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 284, "</span> ")3078+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, "</span> ")
3024 if templ_7745c5c3_Err != nil {3079 if templ_7745c5c3_Err != nil {
3025 return templ_7745c5c3_Err3080 return templ_7745c5c3_Err
3026 }3081 }
3027 if v.Detail != "" {3082 if v.Detail != "" {
3028- var templ_7745c5c3_Var146 string3083+ var templ_7745c5c3_Var149 string
3029- templ_7745c5c3_Var146, templ_7745c5c3_Err = templ.JoinStringErrs(" ")3084+ templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.JoinStringErrs(" ")
3030 if templ_7745c5c3_Err != nil {3085 if templ_7745c5c3_Err != nil {
3031- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 8}3086+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 595, Col: 8}
3032 }3087 }
3033- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var146))3088+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var149))
3034 if templ_7745c5c3_Err != nil {3089 if templ_7745c5c3_Err != nil {
3035 return templ_7745c5c3_Err3090 return templ_7745c5c3_Err
3036 }3091 }
3037- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 285, "<span class=\"dim\">")3092+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "<span class=\"dim\">")
3038 if templ_7745c5c3_Err != nil {3093 if templ_7745c5c3_Err != nil {
3039 return templ_7745c5c3_Err3094 return templ_7745c5c3_Err
3040 }3095 }
3041- var templ_7745c5c3_Var147 string3096+ var templ_7745c5c3_Var150 string
3042- templ_7745c5c3_Var147, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)3097+ templ_7745c5c3_Var150, templ_7745c5c3_Err = templ.JoinStringErrs(v.Detail)
3043 if templ_7745c5c3_Err != nil {3098 if templ_7745c5c3_Err != nil {
3044- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 590, Col: 38}3099+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 595, Col: 38}
3045 }3100 }
3046- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var147))3101+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var150))
3047 if templ_7745c5c3_Err != nil {3102 if templ_7745c5c3_Err != nil {
3048 return templ_7745c5c3_Err3103 return templ_7745c5c3_Err
3049 }3104 }
3050- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 286, "</span>")3105+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "</span>")
3051 if templ_7745c5c3_Err != nil {3106 if templ_7745c5c3_Err != nil {
3052 return templ_7745c5c3_Err3107 return templ_7745c5c3_Err
3053 }3108 }
3054 }3109 }
3055- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 287, "</span> ")3110+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "</span> ")
3056 if templ_7745c5c3_Err != nil {3111 if templ_7745c5c3_Err != nil {
3057 return templ_7745c5c3_Err3112 return templ_7745c5c3_Err
3058 }3113 }
3059 if len(v.Paths) > 0 {3114 if len(v.Paths) > 0 {
3060- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 288, "<ul class=\"mg-paths\" aria-label=\"conflicting files\">")3115+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "<ul class=\"mg-paths\" aria-label=\"conflicting files\">")
3061 if templ_7745c5c3_Err != nil {3116 if templ_7745c5c3_Err != nil {
3062 return templ_7745c5c3_Err3117 return templ_7745c5c3_Err
3063 }3118 }
3064 for _, path := range v.Paths {3119 for _, path := range v.Paths {
3065- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 289, "<li><code>")3120+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "<li><code>")
3066 if templ_7745c5c3_Err != nil {3121 if templ_7745c5c3_Err != nil {
3067 return templ_7745c5c3_Err3122 return templ_7745c5c3_Err
3068 }3123 }
3069- var templ_7745c5c3_Var148 string3124+ var templ_7745c5c3_Var151 string
3070- templ_7745c5c3_Var148, templ_7745c5c3_Err = templ.JoinStringErrs(path)3125+ templ_7745c5c3_Var151, templ_7745c5c3_Err = templ.JoinStringErrs(path)
3071 if templ_7745c5c3_Err != nil {3126 if templ_7745c5c3_Err != nil {
3072- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 596, Col: 20}3127+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 601, Col: 20}
3073 }3128 }
3074- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var148))3129+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151))
3075 if templ_7745c5c3_Err != nil {3130 if templ_7745c5c3_Err != nil {
3076 return templ_7745c5c3_Err3131 return templ_7745c5c3_Err
3077 }3132 }
3078- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 290, "</code></li>")3133+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "</code></li>")
3079 if templ_7745c5c3_Err != nil {3134 if templ_7745c5c3_Err != nil {
3080 return templ_7745c5c3_Err3135 return templ_7745c5c3_Err
3081 }3136 }
3082 }3137 }
3083- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 291, "</ul>")3138+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "</ul>")
3084 if templ_7745c5c3_Err != nil {3139 if templ_7745c5c3_Err != nil {
3085 return templ_7745c5c3_Err3140 return templ_7745c5c3_Err
3086 }3141 }
3087 }3142 }
3088 if v.PathsNote != "" {3143 if v.PathsNote != "" {
3089- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 292, "<p class=\"dim\">")3144+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "<p class=\"dim\">")
3090 if templ_7745c5c3_Err != nil {3145 if templ_7745c5c3_Err != nil {
3091 return templ_7745c5c3_Err3146 return templ_7745c5c3_Err
3092 }3147 }
3093- var templ_7745c5c3_Var149 string3148+ var templ_7745c5c3_Var152 string
3094- templ_7745c5c3_Var149, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)3149+ templ_7745c5c3_Var152, templ_7745c5c3_Err = templ.JoinStringErrs(v.PathsNote)
3095 if templ_7745c5c3_Err != nil {3150 if templ_7745c5c3_Err != nil {
3096- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 601, Col: 30}3151+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 606, Col: 30}
3097 }3152 }
3098- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var149))3153+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var152))
3099 if templ_7745c5c3_Err != nil {3154 if templ_7745c5c3_Err != nil {
3100 return templ_7745c5c3_Err3155 return templ_7745c5c3_Err
3101 }3156 }
3102- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 293, "</p>")3157+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "</p>")
3103 if templ_7745c5c3_Err != nil {3158 if templ_7745c5c3_Err != nil {
3104 return templ_7745c5c3_Err3159 return templ_7745c5c3_Err
3105 }3160 }
@@ -3126,12 +3181,12 @@ func mrMergeabilitySlot(v MergeabilityView) templ.Component {
3126 }()3181 }()
3127 }3182 }
3128 ctx = templ.InitializeContext(ctx)3183 ctx = templ.InitializeContext(ctx)
3129- templ_7745c5c3_Var150 := templ.GetChildren(ctx)3184+ templ_7745c5c3_Var153 := templ.GetChildren(ctx)
3130- if templ_7745c5c3_Var150 == nil {3185+ if templ_7745c5c3_Var153 == nil {
3131- templ_7745c5c3_Var150 = templ.NopComponent3186+ templ_7745c5c3_Var153 = templ.NopComponent
3132 }3187 }
3133 ctx = templ.ClearChildren(ctx)3188 ctx = templ.ClearChildren(ctx)
3134- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 294, "<div id=\"mr-mergeability\" class=\"live-slot\" role=\"status\" data-slot>")3189+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "<div id=\"mr-mergeability\" class=\"live-slot\" role=\"status\" data-slot>")
3135 if templ_7745c5c3_Err != nil {3190 if templ_7745c5c3_Err != nil {
3136 return templ_7745c5c3_Err3191 return templ_7745c5c3_Err
3137 }3192 }
@@ -3139,7 +3194,7 @@ func mrMergeabilitySlot(v MergeabilityView) templ.Component {
3139 if templ_7745c5c3_Err != nil {3194 if templ_7745c5c3_Err != nil {
3140 return templ_7745c5c3_Err3195 return templ_7745c5c3_Err
3141 }3196 }
3142- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 295, "</div>")3197+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "</div>")
3143 if templ_7745c5c3_Err != nil {3198 if templ_7745c5c3_Err != nil {
3144 return templ_7745c5c3_Err3199 return templ_7745c5c3_Err
3145 }3200 }
@@ -3164,9 +3219,9 @@ func MRMergeabilityFragment(v MergeabilityView) templ.Component {
3164 }()3219 }()
3165 }3220 }
3166 ctx = templ.InitializeContext(ctx)3221 ctx = templ.InitializeContext(ctx)
3167- templ_7745c5c3_Var151 := templ.GetChildren(ctx)3222+ templ_7745c5c3_Var154 := templ.GetChildren(ctx)
3168- if templ_7745c5c3_Var151 == nil {3223+ if templ_7745c5c3_Var154 == nil {
3169- templ_7745c5c3_Var151 = templ.NopComponent3224+ templ_7745c5c3_Var154 = templ.NopComponent
3170 }3225 }
3171 ctx = templ.ClearChildren(ctx)3226 ctx = templ.ClearChildren(ctx)
3172 templ_7745c5c3_Err = mrMergeabilitySlot(v).Render(ctx, templ_7745c5c3_Buffer)3227 templ_7745c5c3_Err = mrMergeabilitySlot(v).Render(ctx, templ_7745c5c3_Buffer)
@@ -3195,128 +3250,128 @@ func moreMenu(p MRPage) templ.Component {
3195 }()3250 }()
3196 }3251 }
3197 ctx = templ.InitializeContext(ctx)3252 ctx = templ.InitializeContext(ctx)
3198- templ_7745c5c3_Var152 := templ.GetChildren(ctx)3253+ templ_7745c5c3_Var155 := templ.GetChildren(ctx)
3199- if templ_7745c5c3_Var152 == nil {3254+ if templ_7745c5c3_Var155 == nil {
3200- templ_7745c5c3_Var152 = templ.NopComponent3255+ templ_7745c5c3_Var155 = templ.NopComponent
3201 }3256 }
3202 ctx = templ.ClearChildren(ctx)3257 ctx = templ.ClearChildren(ctx)
3203- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 296, "<details class=\"menu omenu\"><summary class=\"btn icon\" aria-label=\"More actions\" title=\"more actions\">⋯</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"More actions\"><section class=\"merge-settings\"><h2>Merge settings</h2><dl class=\"kv\"><dt>modes</dt><dd>")3258+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "<details class=\"menu omenu\"><summary class=\"btn icon\" aria-label=\"More actions\" title=\"more actions\">⋯</summary><div class=\"menu-pop\" role=\"group\" aria-label=\"More actions\"><section class=\"merge-settings\"><h2>Merge settings</h2><dl class=\"kv\"><dt>modes</dt><dd>")
3204 if templ_7745c5c3_Err != nil {3259 if templ_7745c5c3_Err != nil {
3205 return templ_7745c5c3_Err3260 return templ_7745c5c3_Err
3206 }3261 }
3207- var templ_7745c5c3_Var153 string3262+ var templ_7745c5c3_Var156 string
3208- templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))3263+ templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(p.Modes, ", "))
3209 if templ_7745c5c3_Err != nil {3264 if templ_7745c5c3_Err != nil {
3210- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 628, Col: 38}3265+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 633, Col: 38}
3211 }3266 }
3212- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var153))3267+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156))
3213 if templ_7745c5c3_Err != nil {3268 if templ_7745c5c3_Err != nil {
3214 return templ_7745c5c3_Err3269 return templ_7745c5c3_Err
3215 }3270 }
3216- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 297, "</dd><dt>checks</dt><dd>")3271+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "</dd><dt>checks</dt><dd>")
3217 if templ_7745c5c3_Err != nil {3272 if templ_7745c5c3_Err != nil {
3218 return templ_7745c5c3_Err3273 return templ_7745c5c3_Err
3219 }3274 }
3220 if p.ChecksBlock {3275 if p.ChecksBlock {
3221- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 298, "failing ones block the merge")3276+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 304, "failing ones block the merge")
3222 if templ_7745c5c3_Err != nil {3277 if templ_7745c5c3_Err != nil {
3223 return templ_7745c5c3_Err3278 return templ_7745c5c3_Err
3224 }3279 }
3225 } else {3280 } else {
3226- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 299, "do not block the merge")3281+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 305, "do not block the merge")
3227 if templ_7745c5c3_Err != nil {3282 if templ_7745c5c3_Err != nil {
3228 return templ_7745c5c3_Err3283 return templ_7745c5c3_Err
3229 }3284 }
3230 }3285 }
3231- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 300, "</dd></dl></section>")3286+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 306, "</dd></dl></section>")
3232 if templ_7745c5c3_Err != nil {3287 if templ_7745c5c3_Err != nil {
3233 return templ_7745c5c3_Err3288 return templ_7745c5c3_Err
3234 }3289 }
3235 if p.Box != nil {3290 if p.Box != nil {
3236 if p.Box.Signed {3291 if p.Box.Signed {
3237- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 301, "<p class=\"d-note\" id=\"mr-signing\">squash and merge commits are signed with ermite's own key (generated on first start). ")3292+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 307, "<p class=\"d-note\" id=\"mr-signing\">squash and merge commits are signed with ermite's own key (generated on first start). ")
3238 if templ_7745c5c3_Err != nil {3293 if templ_7745c5c3_Err != nil {
3239 return templ_7745c5c3_Err3294 return templ_7745c5c3_Err
3240 }3295 }
3241 if p.Box.Fingerprint != "" {3296 if p.Box.Fingerprint != "" {
3242- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 302, "fingerprint <code>")3297+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 308, "fingerprint <code>")
3243 if templ_7745c5c3_Err != nil {3298 if templ_7745c5c3_Err != nil {
3244 return templ_7745c5c3_Err3299 return templ_7745c5c3_Err
3245 }3300 }
3246- var templ_7745c5c3_Var154 string3301+ var templ_7745c5c3_Var157 string
3247- templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)3302+ templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.JoinStringErrs(p.Box.Fingerprint)
3248 if templ_7745c5c3_Err != nil {3303 if templ_7745c5c3_Err != nil {
3249- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 644, Col: 44}3304+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 649, Col: 44}
3250 }3305 }
3251- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))3306+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var157))
3252 if templ_7745c5c3_Err != nil {3307 if templ_7745c5c3_Err != nil {
3253 return templ_7745c5c3_Err3308 return templ_7745c5c3_Err
3254 }3309 }
3255- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 303, "</code> ")3310+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 309, "</code> ")
3256 if templ_7745c5c3_Err != nil {3311 if templ_7745c5c3_Err != nil {
3257 return templ_7745c5c3_Err3312 return templ_7745c5c3_Err
3258 }3313 }
3259 }3314 }
3260- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 304, "<code>ermite signing-key show</code> prints it.</p>")3315+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 310, "<code>ermite signing-key show</code> prints it.</p>")
3261 if templ_7745c5c3_Err != nil {3316 if templ_7745c5c3_Err != nil {
3262 return templ_7745c5c3_Err3317 return templ_7745c5c3_Err
3263 }3318 }
3264 }3319 }
3265- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 305, " ")3320+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 311, " ")
3266 if templ_7745c5c3_Err != nil {3321 if templ_7745c5c3_Err != nil {
3267 return templ_7745c5c3_Err3322 return templ_7745c5c3_Err
3268 }3323 }
3269 if p.Box.CanMarkRead {3324 if p.Box.CanMarkRead {
3270- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 306, "<form method=\"post\" action=\"")3325+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 312, "<form method=\"post\" action=\"")
3271 if templ_7745c5c3_Err != nil {3326 if templ_7745c5c3_Err != nil {
3272 return templ_7745c5c3_Err3327 return templ_7745c5c3_Err
3273 }3328 }
3274- var templ_7745c5c3_Var155 templ.SafeURL3329+ var templ_7745c5c3_Var158 templ.SafeURL
3275- templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))3330+ templ_7745c5c3_Var158, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.ReadAction))
3276 if templ_7745c5c3_Err != nil {3331 if templ_7745c5c3_Err != nil {
3277- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 650, Col: 65}3332+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 65}
3278 }3333 }
3279- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var155))3334+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var158))
3280 if templ_7745c5c3_Err != nil {3335 if templ_7745c5c3_Err != nil {
3281 return templ_7745c5c3_Err3336 return templ_7745c5c3_Err
3282 }3337 }
3283- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 307, "\"><input type=\"hidden\" name=\"head_id\" value=\"")3338+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 313, "\"><input type=\"hidden\" name=\"head_id\" value=\"")
3284 if templ_7745c5c3_Err != nil {3339 if templ_7745c5c3_Err != nil {
3285 return templ_7745c5c3_Err3340 return templ_7745c5c3_Err
3286 }3341 }
3287- var templ_7745c5c3_Var156 string3342+ var templ_7745c5c3_Var159 string
3288- templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)3343+ templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Box.Head)
3289 if templ_7745c5c3_Err != nil {3344 if templ_7745c5c3_Err != nil {
3290- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 651, Col: 60}3345+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 656, Col: 60}
3291 }3346 }
3292- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var156)3347+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var159)
3293 if templ_7745c5c3_Err != nil {3348 if templ_7745c5c3_Err != nil {
3294 return templ_7745c5c3_Err3349 return templ_7745c5c3_Err
3295 }3350 }
3296- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 308, "\"> <button type=\"submit\" title=\"the next visit can show only what changed after this head\" class=\"btn\" aria-keyshortcuts=\"Shift+R\" data-read>Mark read <kbd aria-hidden=\"true\">R</kbd></button></form>")3351+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 314, "\"> <button type=\"submit\" title=\"the next visit can show only what changed after this head\" class=\"btn\" aria-keyshortcuts=\"Shift+R\" data-read>Mark read <kbd aria-hidden=\"true\">R</kbd></button></form>")
3297 if templ_7745c5c3_Err != nil {3352 if templ_7745c5c3_Err != nil {
3298 return templ_7745c5c3_Err3353 return templ_7745c5c3_Err
3299 }3354 }
3300 }3355 }
3301- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 309, " <form method=\"post\" action=\"")3356+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 315, " <form method=\"post\" action=\"")
3302 if templ_7745c5c3_Err != nil {3357 if templ_7745c5c3_Err != nil {
3303 return templ_7745c5c3_Err3358 return templ_7745c5c3_Err
3304 }3359 }
3305- var templ_7745c5c3_Var157 templ.SafeURL3360+ var templ_7745c5c3_Var160 templ.SafeURL
3306- templ_7745c5c3_Var157, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))3361+ templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Box.CloseAction))
3307 if templ_7745c5c3_Err != nil {3362 if templ_7745c5c3_Err != nil {
3308- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 655, Col: 65}3363+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 660, Col: 65}
3309 }3364 }
3310- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var157))3365+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))
3311 if templ_7745c5c3_Err != nil {3366 if templ_7745c5c3_Err != nil {
3312 return templ_7745c5c3_Err3367 return templ_7745c5c3_Err
3313 }3368 }
3314- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 310, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")3369+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 316, "\"><button type=\"submit\" title=\"close without merging; the branch is kept\" class=\"btn danger\">Close</button></form>")
3315 if templ_7745c5c3_Err != nil {3370 if templ_7745c5c3_Err != nil {
3316 return templ_7745c5c3_Err3371 return templ_7745c5c3_Err
3317 }3372 }
3318 if !p.Box.HeadGone && p.Box.ReadyAction == "" {3373 if !p.Box.HeadGone && p.Box.ReadyAction == "" {
3319- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 311, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")3374+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 317, "<details class=\"d-or\"><summary class=\"mute\">or from a terminal</summary>")
3320 if templ_7745c5c3_Err != nil {3375 if templ_7745c5c3_Err != nil {
3321 return templ_7745c5c3_Err3376 return templ_7745c5c3_Err
3322 }3377 }
@@ -3324,13 +3379,13 @@ func moreMenu(p MRPage) templ.Component {
3324 if templ_7745c5c3_Err != nil {3379 if templ_7745c5c3_Err != nil {
3325 return templ_7745c5c3_Err3380 return templ_7745c5c3_Err
3326 }3381 }
3327- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 312, "</details>")3382+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 318, "</details>")
3328 if templ_7745c5c3_Err != nil {3383 if templ_7745c5c3_Err != nil {
3329 return templ_7745c5c3_Err3384 return templ_7745c5c3_Err
3330 }3385 }
3331 }3386 }
3332 }3387 }
3333- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 313, "</div></details>")3388+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 319, "</div></details>")
3334 if templ_7745c5c3_Err != nil {3389 if templ_7745c5c3_Err != nil {
3335 return templ_7745c5c3_Err3390 return templ_7745c5c3_Err
3336 }3391 }
@@ -3354,12 +3409,12 @@ func Compare(l Layout, p ComparePage) templ.Component {
3354 }()3409 }()
3355 }3410 }
3356 ctx = templ.InitializeContext(ctx)3411 ctx = templ.InitializeContext(ctx)
3357- templ_7745c5c3_Var158 := templ.GetChildren(ctx)3412+ templ_7745c5c3_Var161 := templ.GetChildren(ctx)
3358- if templ_7745c5c3_Var158 == nil {3413+ if templ_7745c5c3_Var161 == nil {
3359- templ_7745c5c3_Var158 = templ.NopComponent3414+ templ_7745c5c3_Var161 = templ.NopComponent
3360 }3415 }
3361 ctx = templ.ClearChildren(ctx)3416 ctx = templ.ClearChildren(ctx)
3362- templ_7745c5c3_Var159 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {3417+ templ_7745c5c3_Var162 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
3363 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context3418 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
3364 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)3419 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
3365 if !templ_7745c5c3_IsBuffer {3420 if !templ_7745c5c3_IsBuffer {
@@ -3371,263 +3426,263 @@ func Compare(l Layout, p ComparePage) templ.Component {
3371 }()3426 }()
3372 }3427 }
3373 ctx = templ.InitializeContext(ctx)3428 ctx = templ.InitializeContext(ctx)
3374- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 314, "<header class=\"show mr-h\"><h1>")3429+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 320, "<header class=\"show mr-h\"><h1>")
3375 if templ_7745c5c3_Err != nil {3430 if templ_7745c5c3_Err != nil {
3376 return templ_7745c5c3_Err3431 return templ_7745c5c3_Err
3377 }3432 }
3378- var templ_7745c5c3_Var160 string3433+ var templ_7745c5c3_Var163 string
3379- templ_7745c5c3_Var160, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)3434+ templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3380 if templ_7745c5c3_Err != nil {3435 if templ_7745c5c3_Err != nil {
3381- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 672, Col: 17}3436+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 677, Col: 17}
3382 }3437 }
3383- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var160))3438+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var163))
3384 if templ_7745c5c3_Err != nil {3439 if templ_7745c5c3_Err != nil {
3385 return templ_7745c5c3_Err3440 return templ_7745c5c3_Err
3386 }3441 }
3387- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 315, " → ")3442+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 321, " → ")
3388 if templ_7745c5c3_Err != nil {3443 if templ_7745c5c3_Err != nil {
3389 return templ_7745c5c3_Err3444 return templ_7745c5c3_Err
3390 }3445 }
3391- var templ_7745c5c3_Var161 string3446+ var templ_7745c5c3_Var164 string
3392- templ_7745c5c3_Var161, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)3447+ templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3393 if templ_7745c5c3_Err != nil {3448 if templ_7745c5c3_Err != nil {
3394- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 672, Col: 34}3449+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 677, Col: 34}
3395 }3450 }
3396- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var161))3451+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var164))
3397 if templ_7745c5c3_Err != nil {3452 if templ_7745c5c3_Err != nil {
3398 return templ_7745c5c3_Err3453 return templ_7745c5c3_Err
3399 }3454 }
3400- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 316, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")3455+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 322, "</h1><dl class=\"kv show-kv\"><dt>branch</dt><dd><a href=\"")
3401 if templ_7745c5c3_Err != nil {3456 if templ_7745c5c3_Err != nil {
3402 return templ_7745c5c3_Err3457 return templ_7745c5c3_Err
3403 }3458 }
3404- var templ_7745c5c3_Var162 templ.SafeURL3459+ var templ_7745c5c3_Var165 templ.SafeURL
3405- templ_7745c5c3_Var162, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))3460+ templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.SourceHref))
3406 if templ_7745c5c3_Err != nil {3461 if templ_7745c5c3_Err != nil {
3407- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 675, Col: 45}3462+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 45}
3408 }3463 }
3409- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var162))3464+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var165))
3410 if templ_7745c5c3_Err != nil {3465 if templ_7745c5c3_Err != nil {
3411 return templ_7745c5c3_Err3466 return templ_7745c5c3_Err
3412 }3467 }
3413- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 317, "\">")3468+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 323, "\">")
3414 if templ_7745c5c3_Err != nil {3469 if templ_7745c5c3_Err != nil {
3415 return templ_7745c5c3_Err3470 return templ_7745c5c3_Err
3416 }3471 }
3417- var templ_7745c5c3_Var163 string3472+ var templ_7745c5c3_Var166 string
3418- templ_7745c5c3_Var163, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)3473+ templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinStringErrs(p.Source)
3419 if templ_7745c5c3_Err != nil {3474 if templ_7745c5c3_Err != nil {
3420- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 675, Col: 58}3475+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 680, Col: 58}
3421 }3476 }
3422- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var163))3477+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))
3423 if templ_7745c5c3_Err != nil {3478 if templ_7745c5c3_Err != nil {
3424 return templ_7745c5c3_Err3479 return templ_7745c5c3_Err
3425 }3480 }
3426- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 318, "</a></dd><dt>target</dt><dd><a href=\"")3481+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 324, "</a></dd><dt>target</dt><dd><a href=\"")
3427 if templ_7745c5c3_Err != nil {3482 if templ_7745c5c3_Err != nil {
3428 return templ_7745c5c3_Err3483 return templ_7745c5c3_Err
3429 }3484 }
3430- var templ_7745c5c3_Var164 templ.SafeURL3485+ var templ_7745c5c3_Var167 templ.SafeURL
3431- templ_7745c5c3_Var164, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))3486+ templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.TargetHref))
3432 if templ_7745c5c3_Err != nil {3487 if templ_7745c5c3_Err != nil {
3433- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 677, Col: 45}3488+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 682, Col: 45}
3434 }3489 }
3435- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var164))3490+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))
3436 if templ_7745c5c3_Err != nil {3491 if templ_7745c5c3_Err != nil {
3437 return templ_7745c5c3_Err3492 return templ_7745c5c3_Err
3438 }3493 }
3439- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 319, "\">")3494+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 325, "\">")
3440 if templ_7745c5c3_Err != nil {3495 if templ_7745c5c3_Err != nil {
3441 return templ_7745c5c3_Err3496 return templ_7745c5c3_Err
3442 }3497 }
3443- var templ_7745c5c3_Var165 string3498+ var templ_7745c5c3_Var168 string
3444- templ_7745c5c3_Var165, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)3499+ templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3445 if templ_7745c5c3_Err != nil {3500 if templ_7745c5c3_Err != nil {
3446- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 677, Col: 58}3501+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 682, Col: 58}
3447 }3502 }
3448- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var165))3503+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))
3449 if templ_7745c5c3_Err != nil {3504 if templ_7745c5c3_Err != nil {
3450 return templ_7745c5c3_Err3505 return templ_7745c5c3_Err
3451 }3506 }
3452- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 320, "</a></dd><dt>ahead</dt><dd>")3507+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 326, "</a></dd><dt>ahead</dt><dd>")
3453 if templ_7745c5c3_Err != nil {3508 if templ_7745c5c3_Err != nil {
3454 return templ_7745c5c3_Err3509 return templ_7745c5c3_Err
3455 }3510 }
3456- var templ_7745c5c3_Var166 string3511+ var templ_7745c5c3_Var169 string
3457- templ_7745c5c3_Var166, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)3512+ templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.JoinStringErrs(p.AheadText)
3458 if templ_7745c5c3_Err != nil {3513 if templ_7745c5c3_Err != nil {
3459- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 679, Col: 21}3514+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 684, Col: 21}
3460 }3515 }
3461- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var166))3516+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var169))
3462 if templ_7745c5c3_Err != nil {3517 if templ_7745c5c3_Err != nil {
3463 return templ_7745c5c3_Err3518 return templ_7745c5c3_Err
3464 }3519 }
3465- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 321, "</dd></dl></header>")3520+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 327, "</dd></dl></header>")
3466 if templ_7745c5c3_Err != nil {3521 if templ_7745c5c3_Err != nil {
3467 return templ_7745c5c3_Err3522 return templ_7745c5c3_Err
3468 }3523 }
3469 if p.Note != "" {3524 if p.Note != "" {
3470- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 322, "<p class=\"notice\">")3525+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 328, "<p class=\"notice\">")
3471 if templ_7745c5c3_Err != nil {3526 if templ_7745c5c3_Err != nil {
3472 return templ_7745c5c3_Err3527 return templ_7745c5c3_Err
3473 }3528 }
3474- var templ_7745c5c3_Var167 string3529+ var templ_7745c5c3_Var170 string
3475- templ_7745c5c3_Var167, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)3530+ templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.JoinStringErrs(p.Note)
3476 if templ_7745c5c3_Err != nil {3531 if templ_7745c5c3_Err != nil {
3477- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 683, Col: 29}3532+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 688, Col: 29}
3478 }3533 }
3479- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var167))3534+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var170))
3480 if templ_7745c5c3_Err != nil {3535 if templ_7745c5c3_Err != nil {
3481 return templ_7745c5c3_Err3536 return templ_7745c5c3_Err
3482 }3537 }
3483- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 323, "</p>")3538+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 329, "</p>")
3484 if templ_7745c5c3_Err != nil {3539 if templ_7745c5c3_Err != nil {
3485 return templ_7745c5c3_Err3540 return templ_7745c5c3_Err
3486 }3541 }
3487 }3542 }
3488- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 324, " ")3543+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 330, " ")
3489 if templ_7745c5c3_Err != nil {3544 if templ_7745c5c3_Err != nil {
3490 return templ_7745c5c3_Err3545 return templ_7745c5c3_Err
3491 }3546 }
3492 if p.Existing != nil {3547 if p.Existing != nil {
3493- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 325, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")3548+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 331, "<p class=\"notice\">an open merge request already covers these branches: <a href=\"")
3494 if templ_7745c5c3_Err != nil {3549 if templ_7745c5c3_Err != nil {
3495 return templ_7745c5c3_Err3550 return templ_7745c5c3_Err
3496 }3551 }
3497- var templ_7745c5c3_Var168 templ.SafeURL3552+ var templ_7745c5c3_Var171 templ.SafeURL
3498- templ_7745c5c3_Var168, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))3553+ templ_7745c5c3_Var171, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Existing.Href))
3499 if templ_7745c5c3_Err != nil {3554 if templ_7745c5c3_Err != nil {
3500- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 686, Col: 114}3555+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 114}
3501 }3556 }
3502- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var168))3557+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var171))
3503 if templ_7745c5c3_Err != nil {3558 if templ_7745c5c3_Err != nil {
3504 return templ_7745c5c3_Err3559 return templ_7745c5c3_Err
3505 }3560 }
3506- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 326, "\">")3561+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 332, "\">")
3507 if templ_7745c5c3_Err != nil {3562 if templ_7745c5c3_Err != nil {
3508 return templ_7745c5c3_Err3563 return templ_7745c5c3_Err
3509 }3564 }
3510- var templ_7745c5c3_Var169 string3565+ var templ_7745c5c3_Var172 string
3511- templ_7745c5c3_Var169, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)3566+ templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.JoinStringErrs(p.Existing.Label)
3512 if templ_7745c5c3_Err != nil {3567 if templ_7745c5c3_Err != nil {
3513- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 686, Col: 135}3568+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 135}
3514 }3569 }
3515- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var169))3570+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var172))
3516 if templ_7745c5c3_Err != nil {3571 if templ_7745c5c3_Err != nil {
3517 return templ_7745c5c3_Err3572 return templ_7745c5c3_Err
3518 }3573 }
3519- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 327, "</a></p>")3574+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 333, "</a></p>")
3520 if templ_7745c5c3_Err != nil {3575 if templ_7745c5c3_Err != nil {
3521 return templ_7745c5c3_Err3576 return templ_7745c5c3_Err
3522 }3577 }
3523 }3578 }
3524- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 328, " ")3579+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 334, " ")
3525 if templ_7745c5c3_Err != nil {3580 if templ_7745c5c3_Err != nil {
3526 return templ_7745c5c3_Err3581 return templ_7745c5c3_Err
3527 }3582 }
3528 if p.Create != nil {3583 if p.Create != nil {
3529- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 329, "<form class=\"cform create\" method=\"post\" action=\"")3584+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 335, "<form class=\"cform create\" method=\"post\" action=\"")
3530 if templ_7745c5c3_Err != nil {3585 if templ_7745c5c3_Err != nil {
3531 return templ_7745c5c3_Err3586 return templ_7745c5c3_Err
3532 }3587 }
3533- var templ_7745c5c3_Var170 templ.SafeURL3588+ var templ_7745c5c3_Var173 templ.SafeURL
3534- templ_7745c5c3_Var170, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))3589+ templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(p.Create.Action))
3535 if templ_7745c5c3_Err != nil {3590 if templ_7745c5c3_Err != nil {
3536- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 689, Col: 83}3591+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 694, Col: 83}
3537 }3592 }
3538- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var170))3593+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var173))
3539 if templ_7745c5c3_Err != nil {3594 if templ_7745c5c3_Err != nil {
3540 return templ_7745c5c3_Err3595 return templ_7745c5c3_Err
3541 }3596 }
3542- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 330, "\"><input type=\"hidden\" name=\"source\" value=\"")3597+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 336, "\"><input type=\"hidden\" name=\"source\" value=\"")
3543 if templ_7745c5c3_Err != nil {3598 if templ_7745c5c3_Err != nil {
3544 return templ_7745c5c3_Err3599 return templ_7745c5c3_Err
3545 }3600 }
3546- var templ_7745c5c3_Var171 string3601+ var templ_7745c5c3_Var174 string
3547- templ_7745c5c3_Var171, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)3602+ templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Source)
3548 if templ_7745c5c3_Err != nil {3603 if templ_7745c5c3_Err != nil {
3549- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 690, Col: 62}3604+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 695, Col: 62}
3550 }3605 }
3551- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var171)3606+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var174)
3552 if templ_7745c5c3_Err != nil {3607 if templ_7745c5c3_Err != nil {
3553 return templ_7745c5c3_Err3608 return templ_7745c5c3_Err
3554 }3609 }
3555- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 331, "\"> <input type=\"hidden\" name=\"target\" value=\"")3610+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 337, "\"> <input type=\"hidden\" name=\"target\" value=\"")
3556 if templ_7745c5c3_Err != nil {3611 if templ_7745c5c3_Err != nil {
3557 return templ_7745c5c3_Err3612 return templ_7745c5c3_Err
3558 }3613 }
3559- var templ_7745c5c3_Var172 string3614+ var templ_7745c5c3_Var175 string
3560- templ_7745c5c3_Var172, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)3615+ templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Target)
3561 if templ_7745c5c3_Err != nil {3616 if templ_7745c5c3_Err != nil {
3562- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 691, Col: 62}3617+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 696, Col: 62}
3563 }3618 }
3564- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var172)3619+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var175)
3565 if templ_7745c5c3_Err != nil {3620 if templ_7745c5c3_Err != nil {
3566 return templ_7745c5c3_Err3621 return templ_7745c5c3_Err
3567 }3622 }
3568- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 332, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")3623+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 338, "\"> <label for=\"mr-title\">title</label> <input id=\"mr-title\" name=\"title\" type=\"text\" maxlength=\"120\" required value=\"")
3569 if templ_7745c5c3_Err != nil {3624 if templ_7745c5c3_Err != nil {
3570 return templ_7745c5c3_Err3625 return templ_7745c5c3_Err
3571 }3626 }
3572- var templ_7745c5c3_Var173 string3627+ var templ_7745c5c3_Var176 string
3573- templ_7745c5c3_Var173, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)3628+ templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.Create.Title)
3574 if templ_7745c5c3_Err != nil {3629 if templ_7745c5c3_Err != nil {
3575- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 693, Col: 97}3630+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 698, Col: 97}
3576 }3631 }
3577- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var173)3632+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var176)
3578 if templ_7745c5c3_Err != nil {3633 if templ_7745c5c3_Err != nil {
3579 return templ_7745c5c3_Err3634 return templ_7745c5c3_Err
3580 }3635 }
3581- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 333, "\" autocomplete=\"off\"> <label for=\"mr-desc\">description</label> <textarea id=\"mr-desc\" name=\"description\" rows=\"4\" maxlength=\"8000\" placeholder=\"Markdown, optional\"></textarea><div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Create merge request</button></div></form>")3636+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 339, "\" autocomplete=\"off\"> <label for=\"mr-desc\">description</label> <textarea id=\"mr-desc\" name=\"description\" rows=\"4\" maxlength=\"8000\" placeholder=\"Markdown, optional\"></textarea><div class=\"f-btns\"><button type=\"submit\" class=\"btn primary\">Create merge request</button></div></form>")
3582 if templ_7745c5c3_Err != nil {3637 if templ_7745c5c3_Err != nil {
3583 return templ_7745c5c3_Err3638 return templ_7745c5c3_Err
3584 }3639 }
3585 }3640 }
3586- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 334, " ")3641+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 340, " ")
3587 if templ_7745c5c3_Err != nil {3642 if templ_7745c5c3_Err != nil {
3588 return templ_7745c5c3_Err3643 return templ_7745c5c3_Err
3589 }3644 }
3590 if p.HasDiff {3645 if p.HasDiff {
3591- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 335, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")3646+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 341, "<div class=\"diff-tools\" role=\"group\" aria-label=\"Diff view\"><span class=\"dim\">")
3592 if templ_7745c5c3_Err != nil {3647 if templ_7745c5c3_Err != nil {
3593 return templ_7745c5c3_Err3648 return templ_7745c5c3_Err
3594 }3649 }
3595- var templ_7745c5c3_Var174 string3650+ var templ_7745c5c3_Var177 string
3596- templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))3651+ templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.JoinStringErrs(plural(p.NFiles, "file", "files"))
3597 if templ_7745c5c3_Err != nil {3652 if templ_7745c5c3_Err != nil {
3598- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 703, Col: 57}3653+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 57}
3599 }3654 }
3600- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))3655+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var177))
3601 if templ_7745c5c3_Err != nil {3656 if templ_7745c5c3_Err != nil {
3602 return templ_7745c5c3_Err3657 return templ_7745c5c3_Err
3603 }3658 }
3604- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 336, " · <span class=\"plus\">+")3659+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 342, " · <span class=\"plus\">+")
3605 if templ_7745c5c3_Err != nil {3660 if templ_7745c5c3_Err != nil {
3606 return templ_7745c5c3_Err3661 return templ_7745c5c3_Err
3607 }3662 }
3608- var templ_7745c5c3_Var175 string3663+ var templ_7745c5c3_Var178 string
3609- templ_7745c5c3_Var175, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))3664+ templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Adds))
3610 if templ_7745c5c3_Err != nil {3665 if templ_7745c5c3_Err != nil {
3611- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 703, Col: 97}3666+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 97}
3612 }3667 }
3613- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var175))3668+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var178))
3614 if templ_7745c5c3_Err != nil {3669 if templ_7745c5c3_Err != nil {
3615 return templ_7745c5c3_Err3670 return templ_7745c5c3_Err
3616 }3671 }
3617- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 337, "</span> <span class=\"minus\">-")3672+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 343, "</span> <span class=\"minus\">-")
3618 if templ_7745c5c3_Err != nil {3673 if templ_7745c5c3_Err != nil {
3619 return templ_7745c5c3_Err3674 return templ_7745c5c3_Err
3620 }3675 }
3621- var templ_7745c5c3_Var176 string3676+ var templ_7745c5c3_Var179 string
3622- templ_7745c5c3_Var176, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))3677+ templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(p.Dels))
3623 if templ_7745c5c3_Err != nil {3678 if templ_7745c5c3_Err != nil {
3624- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 703, Col: 142}3679+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 708, Col: 142}
3625 }3680 }
3626- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var176))3681+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))
3627 if templ_7745c5c3_Err != nil {3682 if templ_7745c5c3_Err != nil {
3628 return templ_7745c5c3_Err3683 return templ_7745c5c3_Err
3629 }3684 }
3630- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 338, "</span></span> <span class=\"grow\"></span>")3685+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 344, "</span></span> <span class=\"grow\"></span>")
3631 if templ_7745c5c3_Err != nil {3686 if templ_7745c5c3_Err != nil {
3632 return templ_7745c5c3_Err3687 return templ_7745c5c3_Err
3633 }3688 }
@@ -3635,64 +3690,64 @@ func Compare(l Layout, p ComparePage) templ.Component {
3635 if templ_7745c5c3_Err != nil {3690 if templ_7745c5c3_Err != nil {
3636 return templ_7745c5c3_Err3691 return templ_7745c5c3_Err
3637 }3692 }
3638- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 339, "</div>")3693+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 345, "</div>")
3639 if templ_7745c5c3_Err != nil {3694 if templ_7745c5c3_Err != nil {
3640 return templ_7745c5c3_Err3695 return templ_7745c5c3_Err
3641 }3696 }
3642 if p.Invisible {3697 if p.Invisible {
3643- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 340, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")3698+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 346, "<p class=\"notice\">this diff holds invisible characters (direction controls, zero-width characters). They are shown as <span class=\"inv\">&lt;U+XXXX&gt;</span> markers, never applied.</p>")
3644 if templ_7745c5c3_Err != nil {3699 if templ_7745c5c3_Err != nil {
3645 return templ_7745c5c3_Err3700 return templ_7745c5c3_Err
3646 }3701 }
3647 }3702 }
3648- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 341, " <div id=\"diffs\"")3703+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 347, " <div id=\"diffs\"")
3649 if templ_7745c5c3_Err != nil {3704 if templ_7745c5c3_Err != nil {
3650 return templ_7745c5c3_Err3705 return templ_7745c5c3_Err
3651 }3706 }
3652 if p.Both {3707 if p.Both {
3653- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 342, " data-diff=\"")3708+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 348, " data-diff=\"")
3654 if templ_7745c5c3_Err != nil {3709 if templ_7745c5c3_Err != nil {
3655 return templ_7745c5c3_Err3710 return templ_7745c5c3_Err
3656 }3711 }
3657- var templ_7745c5c3_Var177 string3712+ var templ_7745c5c3_Var180 string
3658- templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)3713+ templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3659 if templ_7745c5c3_Err != nil {3714 if templ_7745c5c3_Err != nil {
3660- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 716, Col: 23}3715+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 721, Col: 23}
3661 }3716 }
3662- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var177)3717+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var180)
3663 if templ_7745c5c3_Err != nil {3718 if templ_7745c5c3_Err != nil {
3664 return templ_7745c5c3_Err3719 return templ_7745c5c3_Err
3665 }3720 }
3666- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 343, "\"")3721+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 349, "\"")
3667 if templ_7745c5c3_Err != nil {3722 if templ_7745c5c3_Err != nil {
3668 return templ_7745c5c3_Err3723 return templ_7745c5c3_Err
3669 }3724 }
3670 } else {3725 } else {
3671- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 344, " data-view=\"")3726+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 350, " data-view=\"")
3672 if templ_7745c5c3_Err != nil {3727 if templ_7745c5c3_Err != nil {
3673 return templ_7745c5c3_Err3728 return templ_7745c5c3_Err
3674 }3729 }
3675- var templ_7745c5c3_Var178 string3730+ var templ_7745c5c3_Var181 string
3676- templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)3731+ templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.ResolveAttributeValue(p.View)
3677 if templ_7745c5c3_Err != nil {3732 if templ_7745c5c3_Err != nil {
3678- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 718, Col: 23}3733+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 723, Col: 23}
3679 }3734 }
3680- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var178)3735+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var181)
3681 if templ_7745c5c3_Err != nil {3736 if templ_7745c5c3_Err != nil {
3682 return templ_7745c5c3_Err3737 return templ_7745c5c3_Err
3683 }3738 }
3684- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 345, "\"")3739+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 351, "\"")
3685 if templ_7745c5c3_Err != nil {3740 if templ_7745c5c3_Err != nil {
3686 return templ_7745c5c3_Err3741 return templ_7745c5c3_Err
3687 }3742 }
3688 }3743 }
3689 if p.Both && !p.Pinned {3744 if p.Both && !p.Pinned {
3690- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 346, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")3745+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 352, " hx-live=\"this.dataset.diff = sessionStorage.getItem('diff') || this.dataset.diff\"")
3691 if templ_7745c5c3_Err != nil {3746 if templ_7745c5c3_Err != nil {
3692 return templ_7745c5c3_Err3747 return templ_7745c5c3_Err
3693 }3748 }
3694 }3749 }
3695- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 347, ">")3750+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 353, ">")
3696 if templ_7745c5c3_Err != nil {3751 if templ_7745c5c3_Err != nil {
3697 return templ_7745c5c3_Err3752 return templ_7745c5c3_Err
3698 }3753 }
@@ -3702,14 +3757,14 @@ func Compare(l Layout, p ComparePage) templ.Component {
3702 return templ_7745c5c3_Err3757 return templ_7745c5c3_Err
3703 }3758 }
3704 }3759 }
3705- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 348, "</div>")3760+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 354, "</div>")
3706 if templ_7745c5c3_Err != nil {3761 if templ_7745c5c3_Err != nil {
3707 return templ_7745c5c3_Err3762 return templ_7745c5c3_Err
3708 }3763 }
3709 }3764 }
3710 return nil3765 return nil
3711 })3766 })
3712- templ_7745c5c3_Err = Shell(l, compareRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var159), templ_7745c5c3_Buffer)3767+ templ_7745c5c3_Err = Shell(l, compareRail(p)).Render(templ.WithChildren(ctx, templ_7745c5c3_Var162), templ_7745c5c3_Buffer)
3713 if templ_7745c5c3_Err != nil {3768 if templ_7745c5c3_Err != nil {
3714 return templ_7745c5c3_Err3769 return templ_7745c5c3_Err
3715 }3770 }
@@ -3733,173 +3788,173 @@ func compareRail(p ComparePage) templ.Component {
3733 }()3788 }()
3734 }3789 }
3735 ctx = templ.InitializeContext(ctx)3790 ctx = templ.InitializeContext(ctx)
3736- templ_7745c5c3_Var179 := templ.GetChildren(ctx)3791+ templ_7745c5c3_Var182 := templ.GetChildren(ctx)
3737- if templ_7745c5c3_Var179 == nil {3792+ if templ_7745c5c3_Var182 == nil {
3738- templ_7745c5c3_Var179 = templ.NopComponent3793+ templ_7745c5c3_Var182 = templ.NopComponent
3739 }3794 }
3740 ctx = templ.ClearChildren(ctx)3795 ctx = templ.ClearChildren(ctx)
3741- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 349, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")3796+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 355, "<section aria-labelledby=\"r-ahead\"><h2 id=\"r-ahead\">Commits <span class=\"count\">")
3742 if templ_7745c5c3_Err != nil {3797 if templ_7745c5c3_Err != nil {
3743 return templ_7745c5c3_Err3798 return templ_7745c5c3_Err
3744 }3799 }
3745- var templ_7745c5c3_Var180 string3800+ var templ_7745c5c3_Var183 string
3746- templ_7745c5c3_Var180, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))3801+ templ_7745c5c3_Var183, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Ahead)))
3747 if templ_7745c5c3_Err != nil {3802 if templ_7745c5c3_Err != nil {
3748- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 734, Col: 67}3803+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 739, Col: 67}
3749 }3804 }
3750- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var180))3805+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var183))
3751 if templ_7745c5c3_Err != nil {3806 if templ_7745c5c3_Err != nil {
3752 return templ_7745c5c3_Err3807 return templ_7745c5c3_Err
3753 }3808 }
3754- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 350, "</span></h2><ul class=\"pcommits\">")3809+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 356, "</span></h2><ul class=\"pcommits\">")
3755 if templ_7745c5c3_Err != nil {3810 if templ_7745c5c3_Err != nil {
3756 return templ_7745c5c3_Err3811 return templ_7745c5c3_Err
3757 }3812 }
3758 for _, c := range p.Ahead {3813 for _, c := range p.Ahead {
3759- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 351, "<li><a href=\"")3814+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 357, "<li><a href=\"")
3760 if templ_7745c5c3_Err != nil {3815 if templ_7745c5c3_Err != nil {
3761 return templ_7745c5c3_Err3816 return templ_7745c5c3_Err
3762 }3817 }
3763- var templ_7745c5c3_Var181 templ.SafeURL3818+ var templ_7745c5c3_Var184 templ.SafeURL
3764- templ_7745c5c3_Var181, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))3819+ templ_7745c5c3_Var184, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(c.CHref))
3765 if templ_7745c5c3_Err != nil {3820 if templ_7745c5c3_Err != nil {
3766- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 738, Col: 37}3821+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 37}
3767 }3822 }
3768- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var181))3823+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var184))
3769 if templ_7745c5c3_Err != nil {3824 if templ_7745c5c3_Err != nil {
3770 return templ_7745c5c3_Err3825 return templ_7745c5c3_Err
3771 }3826 }
3772- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 352, "\">")3827+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 358, "\">")
3773 if templ_7745c5c3_Err != nil {3828 if templ_7745c5c3_Err != nil {
3774 return templ_7745c5c3_Err3829 return templ_7745c5c3_Err
3775 }3830 }
3776- var templ_7745c5c3_Var182 string3831+ var templ_7745c5c3_Var185 string
3777- templ_7745c5c3_Var182, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)3832+ templ_7745c5c3_Var185, templ_7745c5c3_Err = templ.JoinStringErrs(c.Short)
3778 if templ_7745c5c3_Err != nil {3833 if templ_7745c5c3_Err != nil {
3779- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 738, Col: 49}3834+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 49}
3780 }3835 }
3781- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var182))3836+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var185))
3782 if templ_7745c5c3_Err != nil {3837 if templ_7745c5c3_Err != nil {
3783 return templ_7745c5c3_Err3838 return templ_7745c5c3_Err
3784 }3839 }
3785- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 353, "</a> <span class=\"s\">")3840+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 359, "</a> <span class=\"s\">")
3786 if templ_7745c5c3_Err != nil {3841 if templ_7745c5c3_Err != nil {
3787 return templ_7745c5c3_Err3842 return templ_7745c5c3_Err
3788 }3843 }
3789- var templ_7745c5c3_Var183 string3844+ var templ_7745c5c3_Var186 string
3790- templ_7745c5c3_Var183, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)3845+ templ_7745c5c3_Var186, templ_7745c5c3_Err = templ.JoinStringErrs(c.Subject)
3791 if templ_7745c5c3_Err != nil {3846 if templ_7745c5c3_Err != nil {
3792- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 739, Col: 32}3847+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 744, Col: 32}
3793 }3848 }
3794- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var183))3849+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var186))
3795 if templ_7745c5c3_Err != nil {3850 if templ_7745c5c3_Err != nil {
3796 return templ_7745c5c3_Err3851 return templ_7745c5c3_Err
3797 }3852 }
3798- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 354, "</span> <span class=\"mute\">")3853+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 360, "</span> <span class=\"mute\">")
3799 if templ_7745c5c3_Err != nil {3854 if templ_7745c5c3_Err != nil {
3800 return templ_7745c5c3_Err3855 return templ_7745c5c3_Err
3801 }3856 }
3802- var templ_7745c5c3_Var184 string3857+ var templ_7745c5c3_Var187 string
3803- templ_7745c5c3_Var184, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)3858+ templ_7745c5c3_Var187, templ_7745c5c3_Err = templ.JoinStringErrs(c.Author)
3804 if templ_7745c5c3_Err != nil {3859 if templ_7745c5c3_Err != nil {
3805- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 741, Col: 16}3860+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 746, Col: 16}
3806 }3861 }
3807- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var184))3862+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var187))
3808 if templ_7745c5c3_Err != nil {3863 if templ_7745c5c3_Err != nil {
3809 return templ_7745c5c3_Err3864 return templ_7745c5c3_Err
3810 }3865 }
3811- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 355, " ")3866+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 361, " ")
3812 if templ_7745c5c3_Err != nil {3867 if templ_7745c5c3_Err != nil {
3813 return templ_7745c5c3_Err3868 return templ_7745c5c3_Err
3814 }3869 }
3815 if c.WhenAt != "" {3870 if c.WhenAt != "" {
3816- var templ_7745c5c3_Var185 string3871+ var templ_7745c5c3_Var188 string
3817- templ_7745c5c3_Var185, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")3872+ templ_7745c5c3_Var188, templ_7745c5c3_Err = templ.JoinStringErrs(" · ")
3818 if templ_7745c5c3_Err != nil {3873 if templ_7745c5c3_Err != nil {
3819- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 15}3874+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 15}
3820 }3875 }
3821- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var185))3876+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var188))
3822 if templ_7745c5c3_Err != nil {3877 if templ_7745c5c3_Err != nil {
3823 return templ_7745c5c3_Err3878 return templ_7745c5c3_Err
3824 }3879 }
3825- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 356, "<time datetime=\"")3880+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 362, "<time datetime=\"")
3826 if templ_7745c5c3_Err != nil {3881 if templ_7745c5c3_Err != nil {
3827 return templ_7745c5c3_Err3882 return templ_7745c5c3_Err
3828 }3883 }
3829- var templ_7745c5c3_Var186 string3884+ var templ_7745c5c3_Var189 string
3830- templ_7745c5c3_Var186, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)3885+ templ_7745c5c3_Var189, templ_7745c5c3_Err = templ.ResolveAttributeValue(c.WhenAt)
3831 if templ_7745c5c3_Err != nil {3886 if templ_7745c5c3_Err != nil {
3832- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 42}3887+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 42}
3833 }3888 }
3834- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var186)3889+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var189)
3835 if templ_7745c5c3_Err != nil {3890 if templ_7745c5c3_Err != nil {
3836 return templ_7745c5c3_Err3891 return templ_7745c5c3_Err
3837 }3892 }
3838- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 357, "\">")3893+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 363, "\">")
3839 if templ_7745c5c3_Err != nil {3894 if templ_7745c5c3_Err != nil {
3840 return templ_7745c5c3_Err3895 return templ_7745c5c3_Err
3841 }3896 }
3842- var templ_7745c5c3_Var187 string3897+ var templ_7745c5c3_Var190 string
3843- templ_7745c5c3_Var187, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)3898+ templ_7745c5c3_Var190, templ_7745c5c3_Err = templ.JoinStringErrs(c.When)
3844 if templ_7745c5c3_Err != nil {3899 if templ_7745c5c3_Err != nil {
3845- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 743, Col: 53}3900+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 748, Col: 53}
3846 }3901 }
3847- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var187))3902+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var190))
3848 if templ_7745c5c3_Err != nil {3903 if templ_7745c5c3_Err != nil {
3849 return templ_7745c5c3_Err3904 return templ_7745c5c3_Err
3850 }3905 }
3851- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 358, "</time>")3906+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 364, "</time>")
3852 if templ_7745c5c3_Err != nil {3907 if templ_7745c5c3_Err != nil {
3853 return templ_7745c5c3_Err3908 return templ_7745c5c3_Err
3854 }3909 }
3855 }3910 }
3856- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 359, "</span></li>")3911+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 365, "</span></li>")
3857 if templ_7745c5c3_Err != nil {3912 if templ_7745c5c3_Err != nil {
3858 return templ_7745c5c3_Err3913 return templ_7745c5c3_Err
3859 }3914 }
3860 }3915 }
3861- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 360, "</ul>")3916+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 366, "</ul>")
3862 if templ_7745c5c3_Err != nil {3917 if templ_7745c5c3_Err != nil {
3863 return templ_7745c5c3_Err3918 return templ_7745c5c3_Err
3864 }3919 }
3865 if len(p.Ahead) == 0 {3920 if len(p.Ahead) == 0 {
3866- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 361, "<p class=\"dim\">no commit ahead of ")3921+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 367, "<p class=\"dim\">no commit ahead of ")
3867 if templ_7745c5c3_Err != nil {3922 if templ_7745c5c3_Err != nil {
3868 return templ_7745c5c3_Err3923 return templ_7745c5c3_Err
3869 }3924 }
3870- var templ_7745c5c3_Var188 string3925+ var templ_7745c5c3_Var191 string
3871- templ_7745c5c3_Var188, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)3926+ templ_7745c5c3_Var191, templ_7745c5c3_Err = templ.JoinStringErrs(p.Target)
3872 if templ_7745c5c3_Err != nil {3927 if templ_7745c5c3_Err != nil {
3873- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 750, Col: 47}3928+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 755, Col: 47}
3874 }3929 }
3875- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var188))3930+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var191))
3876 if templ_7745c5c3_Err != nil {3931 if templ_7745c5c3_Err != nil {
3877 return templ_7745c5c3_Err3932 return templ_7745c5c3_Err
3878 }3933 }
3879- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 362, ".</p>")3934+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 368, ".</p>")
3880 if templ_7745c5c3_Err != nil {3935 if templ_7745c5c3_Err != nil {
3881 return templ_7745c5c3_Err3936 return templ_7745c5c3_Err
3882 }3937 }
3883 }3938 }
3884- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 363, "</section>")3939+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 369, "</section>")
3885 if templ_7745c5c3_Err != nil {3940 if templ_7745c5c3_Err != nil {
3886 return templ_7745c5c3_Err3941 return templ_7745c5c3_Err
3887 }3942 }
3888 if p.HasDiff {3943 if p.HasDiff {
3889- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 364, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")3944+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 370, "<section aria-labelledby=\"r-files\"><h2 id=\"r-files\">Files <span class=\"count\">")
3890 if templ_7745c5c3_Err != nil {3945 if templ_7745c5c3_Err != nil {
3891 return templ_7745c5c3_Err3946 return templ_7745c5c3_Err
3892 }3947 }
3893- var templ_7745c5c3_Var189 string3948+ var templ_7745c5c3_Var192 string
3894- templ_7745c5c3_Var189, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))3949+ templ_7745c5c3_Var192, templ_7745c5c3_Err = templ.JoinStringErrs(itoa(len(p.Files)))
3895 if templ_7745c5c3_Err != nil {3950 if templ_7745c5c3_Err != nil {
3896- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 755, Col: 66}3951+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/adapters/web/mr.templ`, Line: 760, Col: 66}
3897 }3952 }
3898- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var189))3953+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var192))
3899 if templ_7745c5c3_Err != nil {3954 if templ_7745c5c3_Err != nil {
3900 return templ_7745c5c3_Err3955 return templ_7745c5c3_Err
3901 }3956 }
3902- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 365, "</span></h2>")3957+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 371, "</span></h2>")
3903 if templ_7745c5c3_Err != nil {3958 if templ_7745c5c3_Err != nil {
3904 return templ_7745c5c3_Err3959 return templ_7745c5c3_Err
3905 }3960 }
@@ -3907,12 +3962,12 @@ func compareRail(p ComparePage) templ.Component {
3907 if templ_7745c5c3_Err != nil {3962 if templ_7745c5c3_Err != nil {
3908 return templ_7745c5c3_Err3963 return templ_7745c5c3_Err
3909 }3964 }
3910- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 366, "</section>")3965+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 372, "</section>")
3911 if templ_7745c5c3_Err != nil {3966 if templ_7745c5c3_Err != nil {
3912 return templ_7745c5c3_Err3967 return templ_7745c5c3_Err
3913 }3968 }
3914 }3969 }
3915- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 367, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")3970+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 373, "<section aria-labelledby=\"r-cli\"><h2 id=\"r-cli\">From a terminal</h2>")
3916 if templ_7745c5c3_Err != nil {3971 if templ_7745c5c3_Err != nil {
3917 return templ_7745c5c3_Err3972 return templ_7745c5c3_Err
3918 }3973 }
@@ -3920,7 +3975,7 @@ func compareRail(p ComparePage) templ.Component {
3920 if templ_7745c5c3_Err != nil {3975 if templ_7745c5c3_Err != nil {
3921 return templ_7745c5c3_Err3976 return templ_7745c5c3_Err
3922 }3977 }
3923- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 368, "</section>")3978+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 374, "</section>")
3924 if templ_7745c5c3_Err != nil {3979 if templ_7745c5c3_Err != nil {
3925 return templ_7745c5c3_Err3980 return templ_7745c5c3_Err
3926 }3981 }
M internal/adapters/web/mr_test.go +18 -1
@@ -215,8 +215,25 @@ func TestMergeBoxAutoMerge(t *testing.T) {
215215 page := MRPage{Target: "main", Box: on}
216216 html := renderToString(t, mergeMenu(page))
217217 assert.Contains(t, html, "Merge when ready")
218- assert.Contains(t, html, `formaction="`+on.AutoAction+`"`)
218+ assert.Contains(t, html, `action="`+on.AutoAction+`"`)
219219 assert.NotContains(t, html, "Cancel auto-merge")
220+ // Current mergeability must only gate the immediate form. Every allowed
221+ // mode remains selectable in the separate auto-merge form.
222+ for i := range on.Modes {
223+ on.Modes[i].Disabled = true
224+ }
225+ on.CanDeleteBranch = true
226+ page.Source = "feat"
227+ html = renderToString(t, mergeMenu(page))
228+ _, autoForm, found := strings.Cut(html, `action="`+on.AutoAction+`"`)
229+ require.True(t, found)
230+ autoForm, _, _ = strings.Cut(autoForm, "</form>")
231+ assert.NotContains(t, autoForm, "delete_branch")
232+ assert.NotContains(t, autoForm, "disabled")
233+ assert.Contains(t, autoForm, `name="head_id"`)
234+ for _, mode := range on.Modes {
235+ assert.Contains(t, autoForm, `value="`+mode.Value+`"`)
236+ }
220237 page.Box = mk(false, mocks.NewRunService(t))
221238 assert.NotContains(t, renderToString(t, mergeMenu(page)), "Merge when ready")
222239
@@ -215,8 +215,25 @@ func TestMergeBoxAutoMerge(t *testing.T) {
215 page := MRPage{Target: "main", Box: on}215 page := MRPage{Target: "main", Box: on}
216 html := renderToString(t, mergeMenu(page))216 html := renderToString(t, mergeMenu(page))
217 assert.Contains(t, html, "Merge when ready")217 assert.Contains(t, html, "Merge when ready")
218- assert.Contains(t, html, `formaction="`+on.AutoAction+`"`)218+ assert.Contains(t, html, `action="`+on.AutoAction+`"`)
219 assert.NotContains(t, html, "Cancel auto-merge")219 assert.NotContains(t, html, "Cancel auto-merge")
220+ // Current mergeability must only gate the immediate form. Every allowed
221+ // mode remains selectable in the separate auto-merge form.
222+ for i := range on.Modes {
223+ on.Modes[i].Disabled = true
224+ }
225+ on.CanDeleteBranch = true
226+ page.Source = "feat"
227+ html = renderToString(t, mergeMenu(page))
228+ _, autoForm, found := strings.Cut(html, `action="`+on.AutoAction+`"`)
229+ require.True(t, found)
230+ autoForm, _, _ = strings.Cut(autoForm, "</form>")
231+ assert.NotContains(t, autoForm, "delete_branch")
232+ assert.NotContains(t, autoForm, "disabled")
233+ assert.Contains(t, autoForm, `name="head_id"`)
234+ for _, mode := range on.Modes {
235+ assert.Contains(t, autoForm, `value="`+mode.Value+`"`)
236+ }
220 page.Box = mk(false, mocks.NewRunService(t))237 page.Box = mk(false, mocks.NewRunService(t))
221 assert.NotContains(t, renderToString(t, mergeMenu(page)), "Merge when ready")238 assert.NotContains(t, renderToString(t, mergeMenu(page)), "Merge when ready")
222 239

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 42

↑↓ moveenter openesc close