...

Source file src/golang.conradwood.net/go-easyops/utils/dirhash.go

Documentation: golang.conradwood.net/go-easyops/utils

     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  /*
    16  return a hash across an entire directory tree, including the contents of all files
    17  */
    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