mirror of
https://github.com/go-task/task.git
synced 2026-07-02 08:58:41 +00:00
refactor: taskfile/ast package (#1450)
* refactor: ast package * feat: read -> taskfile * refactor: taskfile.Taskfile -> taskfile.Read * refactor: move merge function back into taskfile package * refactor: rename taskfile.go to read.go
This commit is contained in:
58
taskfile/cache.go
Normal file
58
taskfile/cache.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package taskfile
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Cache struct {
|
||||
dir string
|
||||
}
|
||||
|
||||
func NewCache(dir string) (*Cache, error) {
|
||||
dir = filepath.Join(dir, "remote")
|
||||
if err := os.MkdirAll(dir, 0o755); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Cache{
|
||||
dir: dir,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func checksum(b []byte) string {
|
||||
h := sha256.New()
|
||||
h.Write(b)
|
||||
return fmt.Sprintf("%x", h.Sum(nil))
|
||||
}
|
||||
|
||||
func (c *Cache) write(node Node, b []byte) error {
|
||||
return os.WriteFile(c.cacheFilePath(node), b, 0o644)
|
||||
}
|
||||
|
||||
func (c *Cache) read(node Node) ([]byte, error) {
|
||||
return os.ReadFile(c.cacheFilePath(node))
|
||||
}
|
||||
|
||||
func (c *Cache) writeChecksum(node Node, checksum string) error {
|
||||
return os.WriteFile(c.checksumFilePath(node), []byte(checksum), 0o644)
|
||||
}
|
||||
|
||||
func (c *Cache) readChecksum(node Node) string {
|
||||
b, _ := os.ReadFile(c.checksumFilePath(node))
|
||||
return string(b)
|
||||
}
|
||||
|
||||
func (c *Cache) key(node Node) string {
|
||||
return strings.TrimRight(checksum([]byte(node.Location())), "=")
|
||||
}
|
||||
|
||||
func (c *Cache) cacheFilePath(node Node) string {
|
||||
return filepath.Join(c.dir, fmt.Sprintf("%s.yaml", c.key(node)))
|
||||
}
|
||||
|
||||
func (c *Cache) checksumFilePath(node Node) string {
|
||||
return filepath.Join(c.dir, fmt.Sprintf("%s.checksum", c.key(node)))
|
||||
}
|
||||
Reference in New Issue
Block a user