From bab1c170e85f5db4dfa2ac9e6e2c5f444568601a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Wanzenb=C3=B6ck?= Date: Fri, 24 Jan 2020 22:27:56 +0100 Subject: [PATCH] fix skipping ignored directories if they have whitelisted content --- pkg/executor/composite_cache.go | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/pkg/executor/composite_cache.go b/pkg/executor/composite_cache.go index 53118397d..df1eb5ef8 100644 --- a/pkg/executor/composite_cache.go +++ b/pkg/executor/composite_cache.go @@ -60,16 +60,22 @@ func (s *CompositeCache) AddPath(p, context string) error { if err != nil { return err } - if util.ExcludeFile(p, context) { - return os.ErrNotExist - } if fi.Mode().IsDir() { - k, err := HashDir(p, context) + empty, k, err := hashDir(p, context) if err != nil { return err } - s.keys = append(s.keys, k) + + // Only add the hash of this directory to the key + // if there is any whitelisted content. + if !empty || !util.ExcludeFile(p, context) { + s.keys = append(s.keys, k) + } + return nil + } + + if util.ExcludeFile(p, context) { return nil } fh, err := util.CacheHasher()(p) @@ -85,16 +91,14 @@ func (s *CompositeCache) AddPath(p, context string) error { } // HashDir returns a hash of the directory. -func HashDir(p, context string) (string, error) { +func hashDir(p, context string) (bool, string, error) { sha := sha256.New() + empty := true if err := filepath.Walk(p, func(path string, fi os.FileInfo, err error) error { if err != nil { return err } exclude := util.ExcludeFile(path, context) - if fi.IsDir() && exclude { - return filepath.SkipDir - } if exclude { return nil } @@ -106,10 +110,11 @@ func HashDir(p, context string) (string, error) { if _, err := sha.Write([]byte(fileHash)); err != nil { return err } + empty = false return nil }); err != nil { - return "", err + return false, "", err } - return fmt.Sprintf("%x", sha.Sum(nil)), nil + return empty, fmt.Sprintf("%x", sha.Sum(nil)), nil }