goldsmith/saver.go

50 lines
966 B
Go
Raw Normal View History

2021-05-01 22:12:50 +00:00
package goldsmith
import (
"os"
"path/filepath"
)
type saver struct {
clean bool
tokens map[string]bool
}
func (*saver) Name() string {
return "saver"
}
func (self *saver) Initialize(context *Context) error {
self.tokens = make(map[string]bool)
2021-05-01 22:12:50 +00:00
context.Threads(1)
return nil
}
func (self *saver) Process(context *Context, file *File) error {
for token := cleanPath(file.relPath); token != "."; token = filepath.Dir(token) {
self.tokens[token] = true
2021-05-01 22:12:50 +00:00
}
return file.export(context.goldsmith.targetDir)
}
func (self *saver) Finalize(context *Context) error {
if !self.clean {
2021-05-01 22:12:50 +00:00
return nil
}
scannedInfo := make(chan fileInfo)
go scanDir(context.goldsmith.targetDir, scannedInfo)
2021-05-01 22:12:50 +00:00
for info := range scannedInfo {
2021-05-01 22:12:50 +00:00
if info.path != context.goldsmith.targetDir {
relPath, _ := filepath.Rel(context.goldsmith.targetDir, info.path)
if contained, _ := self.tokens[relPath]; !contained {
2021-05-01 22:12:50 +00:00
os.RemoveAll(info.path)
}
}
}
return nil
}