/
hash.go
51 lines (42 loc) · 1.2 KB
/
hash.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package imports
import (
"crypto/sha1"
"encoding/hex"
"encoding/json"
)
type importsHashes struct {
DataObjects map[string]string
Targets map[string]string
TargetLists map[string]string
TargetMaps map[string]string
}
func ComputeImportsHash(imps *Imports) (string, error) {
impsHashes := importsHashes{}
impsHashes.DataObjects = make(map[string]string, len(imps.DataObjects))
for k, v := range imps.DataObjects {
impsHashes.DataObjects[k] = v.ComputeConfigGeneration()
}
impsHashes.Targets = make(map[string]string, len(imps.Targets))
for k, v := range imps.Targets {
impsHashes.Targets[k] = v.ComputeConfigGeneration()
}
impsHashes.TargetLists = make(map[string]string, len(imps.TargetLists))
for k, v := range imps.TargetLists {
impsHashes.TargetLists[k] = v.ComputeConfigGeneration()
}
impsHashes.TargetMaps = make(map[string]string, len(imps.TargetMaps))
for k, v := range imps.TargetMaps {
impsHashes.TargetMaps[k] = v.ComputeConfigGeneration()
}
impsHashesJson, err := json.Marshal(impsHashes)
if err != nil {
return "", err
}
h := sha1.New()
_, err = h.Write(impsHashesJson)
if err != nil {
return "", err
}
result := hex.EncodeToString(h.Sum(nil))
return result, nil
}