- commit
- b023fc7
- parent
- a1d2ffa
- author
- Eric Bower
- date
- 2024-12-26 00:07:14 -0500 EST
refactor: return range diff header This will allow us to generate different outputs directly in our templates using the RangeDiffHeader struct
2 files changed,
+68,
-16
M
web.go
+67,
-15
1@@ -32,7 +32,7 @@ func NewPatchRange(patch *Patch) *PatchRange {
2 }
3
4 type RangeDiffOutput struct {
5- Header string
6+ Header *RangeDiffHeader
7 Order int
8 Diff []diffmatchpatch.Diff
9 Type string
10@@ -42,10 +42,11 @@ func output(a []*PatchRange, b []*PatchRange) []*RangeDiffOutput {
11 outputs := []*RangeDiffOutput{}
12 for i, patchA := range a {
13 if patchA.Matching == -1 {
14+ hdr := NewRangeDiffHeader(patchA, nil, i+1, -1)
15 outputs = append(
16 outputs,
17 &RangeDiffOutput{
18- Header: outputPairHeader(patchA, nil, i+1, -1),
19+ Header: hdr,
20 Type: "rm",
21 Order: i + 1,
22 },
23@@ -55,10 +56,11 @@ func output(a []*PatchRange, b []*PatchRange) []*RangeDiffOutput {
24
25 for j, patchB := range b {
26 if patchB.Matching == -1 {
27+ hdr := NewRangeDiffHeader(nil, patchB, -1, j+1)
28 outputs = append(
29 outputs,
30 &RangeDiffOutput{
31- Header: outputPairHeader(nil, patchB, -1, j+1),
32+ Header: hdr,
33 Type: "add",
34 Order: j + 1,
35 },
36@@ -67,26 +69,23 @@ func output(a []*PatchRange, b []*PatchRange) []*RangeDiffOutput {
37 }
38 patchA := a[patchB.Matching]
39 if patchB.ContentSha == patchA.ContentSha {
40+ hdr := NewRangeDiffHeader(patchA, patchB, patchB.Matching+1, patchA.Matching+1)
41 outputs = append(
42 outputs,
43 &RangeDiffOutput{
44- Header: outputPairHeader(patchA, patchB, patchB.Matching+1, patchA.Matching+1),
45+ Header: hdr,
46 Type: "equal",
47 Order: patchA.Matching + 1,
48 },
49 )
50 } else {
51- header := fmt.Sprintf(
52- "%d: %s ! %d: %s %s",
53- patchA.Matching+1, truncateSha(patchA.CommitSha),
54- patchB.Matching+1, truncateSha(patchB.CommitSha), patchB.Title,
55- )
56+ hdr := NewRangeDiffHeader(patchA, patchB, patchB.Matching+1, patchA.Matching+1)
57 diff := outputDiff(patchA, patchB)
58 outputs = append(
59 outputs,
60 &RangeDiffOutput{
61 Order: patchA.Matching + 1,
62- Header: header,
63+ Header: hdr,
64 Diff: diff,
65 Type: "diff",
66 },
67@@ -132,14 +131,67 @@ func outputDiff(patchA, patchB *PatchRange) []diffmatchpatch.Diff {
68 return diffs
69 }
70
71-func outputPairHeader(a *PatchRange, b *PatchRange, aIndex, bIndex int) string {
72+// RangeDiffHeader is a header combining old and new change pairs.
73+type RangeDiffHeader struct {
74+ OldIdx int
75+ OldSha string
76+ NewIdx int
77+ NewSha string
78+ Title string
79+ ContentEqual bool
80+}
81+
82+func NewRangeDiffHeader(a *PatchRange, b *PatchRange, aIndex, bIndex int) *RangeDiffHeader {
83+ hdr := &RangeDiffHeader{}
84 if a == nil {
85- return fmt.Sprintf("-: ------- > %d: %s %s\n", bIndex, truncateSha(b.CommitSha), b.Title)
86+ hdr.NewIdx = bIndex
87+ hdr.NewSha = b.CommitSha
88+ hdr.Title = b.Title
89+ return hdr
90 }
91 if b == nil {
92- return fmt.Sprintf("%d: %s < -: ------- %s\n", aIndex, truncateSha(a.CommitSha), a.Title)
93+ hdr.OldIdx = aIndex
94+ hdr.OldSha = a.CommitSha
95+ hdr.Title = a.Title
96+ return hdr
97+ }
98+
99+ hdr.OldIdx = aIndex
100+ hdr.NewIdx = bIndex
101+ hdr.OldSha = a.CommitSha
102+ hdr.NewSha = b.CommitSha
103+
104+ if a.ContentSha == b.ContentSha {
105+ hdr.Title = a.Title
106+ hdr.ContentEqual = true
107+ } else {
108+ hdr.Title = b.Title
109+ }
110+
111+ return hdr
112+}
113+
114+func (hdr *RangeDiffHeader) String() string {
115+ if hdr.OldIdx == 0 {
116+ return fmt.Sprintf("-: ------- > %d: %s %s\n", hdr.NewIdx, truncateSha(hdr.NewSha), hdr.Title)
117+ }
118+ if hdr.NewIdx == 0 {
119+ return fmt.Sprintf("%d: %s < -: ------- %s\n", hdr.OldIdx, truncateSha(hdr.OldSha), hdr.Title)
120+ }
121+ if hdr.ContentEqual {
122+ return fmt.Sprintf(
123+ "%d: %s = %d: %s %s\n",
124+ hdr.OldIdx, truncateSha(hdr.OldSha),
125+ hdr.NewIdx, truncateSha(hdr.NewSha),
126+ hdr.Title,
127+ )
128 }
129- return fmt.Sprintf("%d: %s = %d: %s %s\n", aIndex, truncateSha(a.CommitSha), bIndex, truncateSha(b.CommitSha), a.Title)
130+ return fmt.Sprintf(
131+ "%d: %s ! %d: %s %s",
132+ hdr.OldIdx, truncateSha(hdr.OldSha),
133+ hdr.NewIdx, truncateSha(hdr.NewSha),
134+ hdr.Title,
135+ )
136 }
137
138 func RangeDiff(a []*Patch, b []*Patch) []*RangeDiffOutput {
139@@ -159,7 +211,7 @@ func RangeDiff(a []*Patch, b []*Patch) []*RangeDiffOutput {
140 func RangeDiffToStr(diffs []*RangeDiffOutput) string {
141 output := ""
142 for _, diff := range diffs {
143- output += diff.Header
144+ output += diff.Header.String()
145 for _, d := range diff.Diff {
146 switch d.Type {
147 case diffmatchpatch.DiffEqual:
M
web.go
+1,
-1
1@@ -612,7 +612,7 @@ func createPrDetail(page string) http.HandlerFunc {
2 if rdiff.Type == "add" {
3 for _, patch := range patches {
4 commSha := truncateSha(patch.CommitSha)
5- if strings.Contains(rdiff.Header, commSha) {
6+ if strings.Contains(rdiff.Header.String(), commSha) {
7 reviewIDs = append(reviewIDs, patch.ID)
8 break
9 }