...
1 package utils
2
3 import (
4 "crypto/sha256"
5 "fmt"
6 "hash"
7 "io/ioutil"
8 )
9
10 type DirHasher struct {
11 root string
12 hasher hash.Hash
13 }
14
15
18 func DirHash(ddir string) (string, error) {
19 if ddir == "" {
20 return "", fmt.Errorf("no config dir")
21 }
22 dh := &DirHasher{root: ddir, hasher: sha256.New()}
23 err := DirWalk(ddir, dh.AddEntry)
24 if err != nil {
25 return "", err
26 }
27 sum := fmt.Sprintf("%x", dh.hasher.Sum(nil))
28 return sum, nil
29 }
30 func (dh *DirHasher) AddEntry(root string, relname string) error {
31 _, err := dh.hasher.Write([]byte(relname))
32 if err != nil {
33 return err
34 }
35 b, err := ioutil.ReadFile(root + "/" + relname)
36 if err != nil {
37 return err
38 }
39 _, err = dh.hasher.Write(b)
40 if err != nil {
41 return err
42 }
43
44 return nil
45 }
46
View as plain text