feat(server): Introduce function to hash contents of a layer

This creates a cache key which can be used to check if a layer has
already been built.
This commit is contained in:
Vincent Ambo 2019-09-30 11:34:17 +01:00 committed by Vincent Ambo
parent 9c3c622403
commit e60805c9b2

View file

@ -103,9 +103,12 @@
package layers
import (
"crypto/sha1"
"fmt"
"log"
"regexp"
"sort"
"strings"
"gonum.org/v1/gonum/graph/flow"
"gonum.org/v1/gonum/graph/simple"
@ -141,6 +144,13 @@ type Layer struct {
mergeRating uint64
}
// Hash the contents of a layer to create a deterministic identifier that can be
// used for caching.
func (l *Layer) Hash() string {
sum := sha1.Sum([]byte(strings.Join(l.Contents, ":")))
return fmt.Sprintf("%x", sum)
}
func (a Layer) merge(b Layer) Layer {
a.Contents = append(a.Contents, b.Contents...)
a.mergeRating += b.mergeRating
@ -272,6 +282,9 @@ func groupLayer(dt *flow.DominatorTree, root *closure) Layer {
children = append(children, dt.DominatedBy(child.ID())...)
}
// Contents are sorted to ensure that hashing is consistent
sort.Strings(contents)
return Layer{
Contents: contents,
// TODO(tazjin): The point of this is to factor in