@@ -42,106 +42,86 @@ type diffSection struct {
4242 newKnownSize int64
4343}
4444
45- func newDiffResult (newResult , oldResult * commonResult ) diffResult {
46- ret := diffResult {
47- Packages : make ([]diffPackage , 0 ),
48- Sections : make ([]diffSection , 0 ),
49- }
50-
51- // diff packages
52- for k , v := range newResult .Packages {
53- if oldV , ok := oldResult .Packages [k ]; ok {
54- if v .Size != oldV .Size {
55- ret .Packages = append (ret .Packages , diffPackage {
56- diffBase : diffBase {
57- Name : k ,
58- From : oldV .Size ,
59- To : v .Size ,
60- ChangeType : changeTypeChange ,
61- },
62- })
45+ func processPackages (newPackages , oldPackages map [string ]commonPackage ) (ret []diffPackage ) {
46+ for k , v := range newPackages {
47+ typ := changeTypeAdd
48+ fromSize := int64 (0 )
49+ if oldV , ok := oldPackages [k ]; ok {
50+ if v .Size == oldV .Size {
51+ continue
6352 }
64- } else {
65- ret .Packages = append (ret .Packages , diffPackage {
66- diffBase : diffBase {
67- Name : k ,
68- From : 0 ,
69- To : v .Size ,
70- ChangeType : changeTypeAdd ,
71- },
72- })
53+ typ = changeTypeChange
54+ fromSize = oldV .Size
7355 }
56+ ret = append (ret , diffPackage {
57+ diffBase : diffBase {Name : k , From : fromSize , To : v .Size , ChangeType : typ },
58+ })
7459 }
7560
76- for k , v := range oldResult .Packages {
77- if _ , ok := newResult .Packages [k ]; ! ok {
78- ret .Packages = append (ret .Packages , diffPackage {
79- diffBase : diffBase {
80- Name : k ,
81- From : v .Size ,
82- To : 0 ,
83- ChangeType : changeTypeRemove ,
84- },
61+ for k , v := range oldPackages {
62+ if _ , ok := newPackages [k ]; ! ok {
63+ ret = append (ret , diffPackage {
64+ diffBase : diffBase {Name : k , From : v .Size , To : 0 , ChangeType : changeTypeRemove },
8565 })
8666 }
8767 }
8868
89- // diff sections
90- newSections := make (map [string ]commonSection )
91- oldSections := make (map [string ]commonSection )
69+ return
70+ }
71+
72+ func processSections (newSections , oldSections []commonSection ) (ret []diffSection ) {
73+ newSectionsMap := make (map [string ]commonSection )
74+ oldSectionsMap := make (map [string ]commonSection )
9275
93- for _ , v := range newResult . Sections {
94- newSections [v .Name ] = v
76+ for _ , v := range newSections {
77+ newSectionsMap [v .Name ] = v
9578 }
96- for _ , v := range oldResult . Sections {
97- oldSections [v .Name ] = v
79+ for _ , v := range oldSections {
80+ oldSectionsMap [v .Name ] = v
9881 }
9982
100- for k , v := range newSections {
101- if oldV , ok := oldSections [k ]; ok {
102- if v .UnknownSize () != oldV .UnknownSize () {
103- ret .Sections = append (ret .Sections , diffSection {
104- diffBase : diffBase {
105- Name : k ,
106- From : oldV .FileSize ,
107- To : v .FileSize ,
108- ChangeType : changeTypeChange ,
109- },
110- oldFileSize : oldV .FileSize ,
111- oldKnownSize : oldV .KnownSize ,
112- newFileSize : v .FileSize ,
113- newKnownSize : v .KnownSize ,
114- })
83+ for k , v := range newSectionsMap {
84+ typ := changeTypeAdd
85+ fromSize := int64 (0 )
86+ fromFileSize := int64 (0 )
87+ fromKnownSize := int64 (0 )
88+ if oldV , ok := oldSectionsMap [k ]; ok {
89+ if v .UnknownSize () == oldV .UnknownSize () {
90+ continue
11591 }
116- } else {
117- ret .Sections = append (ret .Sections , diffSection {
118- diffBase : diffBase {
119- Name : k ,
120- From : 0 ,
121- To : v .FileSize ,
122- ChangeType : changeTypeAdd ,
123- },
124- newFileSize : v .FileSize ,
125- newKnownSize : v .KnownSize ,
126- })
92+ typ = changeTypeChange
93+ fromSize = oldV .UnknownSize ()
94+ fromFileSize = oldV .FileSize
95+ fromKnownSize = oldV .KnownSize
12796 }
97+ ret = append (ret , diffSection {
98+ diffBase : diffBase {Name : k , From : fromSize , To : v .UnknownSize (), ChangeType : typ },
99+ oldFileSize : fromFileSize ,
100+ oldKnownSize : fromKnownSize ,
101+ newFileSize : v .FileSize ,
102+ newKnownSize : v .KnownSize ,
103+ })
128104 }
129105
130- for k , v := range oldSections {
131- if _ , ok := newSections [k ]; ! ok {
132- ret .Sections = append (ret .Sections , diffSection {
133- diffBase : diffBase {
134- Name : k ,
135- From : v .FileSize ,
136- To : 0 ,
137- ChangeType : changeTypeRemove ,
138- },
106+ for k , v := range oldSectionsMap {
107+ if _ , ok := newSectionsMap [k ]; ! ok {
108+ ret = append (ret , diffSection {
109+ diffBase : diffBase {Name : k , From : v .UnknownSize (), To : 0 , ChangeType : changeTypeRemove },
139110 oldFileSize : v .FileSize ,
140111 oldKnownSize : v .KnownSize ,
141112 })
142113 }
143114 }
144115
116+ return
117+ }
118+
119+ func newDiffResult (newResult , oldResult * commonResult ) diffResult {
120+ ret := diffResult {
121+ Packages : processPackages (newResult .Packages , oldResult .Packages ),
122+ Sections : processSections (newResult .Sections , oldResult .Sections ),
123+ }
124+
145125 slices .SortFunc (ret .Packages , func (a , b diffPackage ) int {
146126 return diffBaseCmp (a .diffBase , b .diffBase )
147127 })
0 commit comments