Skip to content

Commit 12bae32

Browse files
committed
Calculate digest after we filter files for rebuild
Signed-off-by: egibs <[email protected]>
1 parent dc01f36 commit 12bae32

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

pkg/cli/rebuild.go

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"io"
1212
"os"
1313
"path/filepath"
14+
"sort"
1415
"strings"
1516
"time"
1617

@@ -186,13 +187,12 @@ func getConfig(fn string) (*config.Configuration, *goapk.PackageInfo, *spdx.Pack
186187
}
187188

188189
func diffAPKs(old, new string) error {
189-
oldh, newh := sha256.New(), sha256.New()
190190
oldf, err := os.Open(old)
191191
if err != nil {
192192
return fmt.Errorf("failed to open old APK %s: %v", old, err)
193193
}
194194
defer oldf.Close()
195-
oldgr, err := gzip.NewReader(io.TeeReader(oldf, oldh))
195+
oldgr, err := gzip.NewReader(oldf)
196196
if err != nil {
197197
return fmt.Errorf("failed to create gzip reader for old APK %s: %v", old, err)
198198
}
@@ -207,11 +207,11 @@ func diffAPKs(old, new string) error {
207207
return fmt.Errorf("failed to open new APK %s: %v", new, err)
208208
}
209209
defer newf.Close()
210-
newgr, err := gzip.NewReader(io.TeeReader(newf, newh))
210+
newgr, err := gzip.NewReader(newf)
211211
if err != nil {
212-
return fmt.Errorf("failed to create gzip reader for old APK %s: %v", old, err)
212+
return fmt.Errorf("failed to create gzip reader for new APK %s: %v", new, err)
213213
}
214-
defer oldgr.Close()
214+
defer newgr.Close()
215215
newm, err := filemap(tar.NewReader(newgr))
216216
if err != nil {
217217
return fmt.Errorf("failed to create file map for new APK %s: %v", new, err)
@@ -224,7 +224,7 @@ func diffAPKs(old, new string) error {
224224
} else if o != n {
225225
errs = append(errs, fmt.Errorf("changed: %s: digests %s -> %s", k, o.digest, n.digest))
226226
if o.contents != n.contents {
227-
errs = append(errs, fmt.Errorf("contents diff: %s (-old,new):\n%s", k, cmp.Diff(o.contents, n.contents)))
227+
errs = append(errs, fmt.Errorf("contents diff: %s (-old,+new):\n%s", k, cmp.Diff(o.contents, n.contents)))
228228
}
229229
}
230230
}
@@ -234,6 +234,26 @@ func diffAPKs(old, new string) error {
234234
}
235235
}
236236

237+
oldh, newh := sha256.New(), sha256.New()
238+
239+
var keys []string
240+
for k := range oldm {
241+
keys = append(keys, k)
242+
}
243+
sort.Strings(keys)
244+
for _, k := range keys {
245+
fmt.Fprintf(oldh, "%s:%s:", k, oldm[k].digest)
246+
}
247+
248+
keys = keys[:0] // reuse slice
249+
for k := range newm {
250+
keys = append(keys, k)
251+
}
252+
sort.Strings(keys)
253+
for _, k := range keys {
254+
fmt.Fprintf(newh, "%s:%s:", k, newm[k].digest)
255+
}
256+
237257
oldd, newd := fmt.Sprintf("%x", oldh.Sum(nil)), fmt.Sprintf("%x", newh.Sum(nil))
238258
if oldd != newd {
239259
errs = append(errs, fmt.Errorf("APK digest diff: %s -> %s", oldd, newd))

0 commit comments

Comments
 (0)