/
checksumcalculator.go
62 lines (56 loc) · 2.07 KB
/
checksumcalculator.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
52
53
54
55
56
57
58
59
60
61
62
package checksumcalculator
import (
"fmt"
"os"
"talisman/gitrepo"
"talisman/talismanrc"
"talisman/utility"
yaml "gopkg.in/yaml.v2"
)
type ChecksumCalculator struct {
fileNamePatterns []string
}
//NewChecksumCalculator returns new instance of the CheckSumDetector
func NewChecksumCalculator(patterns []string) *ChecksumCalculator {
cc := ChecksumCalculator{fileNamePatterns: patterns}
return &cc
}
//SuggestTalismanRC returns the suggestion for .talismanrc format
func (cc *ChecksumCalculator) SuggestTalismanRC() string {
wd, _ := os.Getwd()
repo := gitrepo.RepoLocatedAt(wd)
gitTrackedFilesAsAdditions := repo.TrackedFilesAsAdditions()
//Adding staged files for calculation
gitTrackedFilesAsAdditions = append(gitTrackedFilesAsAdditions, repo.StagedAdditions()...)
var fileIgnoreConfigs []talismanrc.FileIgnoreConfig
result := ""
for _, pattern := range cc.fileNamePatterns {
collectiveChecksum := cc.calculateCollectiveChecksumForPattern(pattern, gitTrackedFilesAsAdditions)
if collectiveChecksum != "" {
fileIgnoreConfig := talismanrc.FileIgnoreConfig{FileName: pattern, Checksum: collectiveChecksum, IgnoreDetectors: []string{}}
fileIgnoreConfigs = append(fileIgnoreConfigs, fileIgnoreConfig)
}
}
if len(fileIgnoreConfigs) != 0 {
result = result + fmt.Sprintf("\n\x1b[33m.talismanrc format for given file names / patterns\x1b[0m\n")
talismanRCConfig := talismanrc.TalismanRC{FileIgnoreConfig: fileIgnoreConfigs}
m, _ := yaml.Marshal(&talismanRCConfig)
result = result + string(m)
}
return result
}
func (cc *ChecksumCalculator) calculateCollectiveChecksumForPattern(fileNamePattern string, additions []gitrepo.Addition) string {
var patternpaths []string
currentCollectiveChecksum := ""
for _, addition := range additions {
if addition.Matches(fileNamePattern) {
patternpaths = append(patternpaths, string(addition.Path))
}
}
// Calculate current collective checksum
patternpaths = utility.UniqueItems(patternpaths)
if len(patternpaths) != 0 {
currentCollectiveChecksum = utility.CollectiveSHA256Hash(patternpaths)
}
return currentCollectiveChecksum
}