fix compile error
[platform/upstream/docker-engine.git] / builder / remotecontext / filehash.go
1 package remotecontext
2
3 import (
4         "archive/tar"
5         "crypto/sha256"
6         "hash"
7         "os"
8
9         "github.com/docker/docker/pkg/archive"
10         "github.com/docker/docker/pkg/tarsum"
11 )
12
13 // NewFileHash returns new hash that is used for the builder cache keys
14 func NewFileHash(path, name string, fi os.FileInfo) (hash.Hash, error) {
15         var link string
16         if fi.Mode()&os.ModeSymlink != 0 {
17                 var err error
18                 link, err = os.Readlink(path)
19                 if err != nil {
20                         return nil, err
21                 }
22         }
23         hdr, err := archive.FileInfoHeader(name, fi, link)
24         if err != nil {
25                 return nil, err
26         }
27         if err := archive.ReadSecurityXattrToTarHeader(path, hdr); err != nil {
28                 return nil, err
29         }
30         tsh := &tarsumHash{hdr: hdr, Hash: sha256.New()}
31         tsh.Reset() // initialize header
32         return tsh, nil
33 }
34
35 type tarsumHash struct {
36         hash.Hash
37         hdr *tar.Header
38 }
39
40 // Reset resets the Hash to its initial state.
41 func (tsh *tarsumHash) Reset() {
42         // comply with hash.Hash and reset to the state hash had before any writes
43         tsh.Hash.Reset()
44         tarsum.WriteV1Header(tsh.hdr, tsh.Hash)
45 }