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:
parent
9c3c622403
commit
e60805c9b2
1 changed files with 13 additions and 0 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue