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"
|
|
|
|
}
|
|
|
|
|
2022-01-09 02:08:36 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2022-01-09 02:08:36 +00:00
|
|
|
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)
|
|
|
|
}
|
|
|
|
|
2022-01-09 02:08:36 +00:00
|
|
|
func (self *saver) Finalize(context *Context) error {
|
|
|
|
if !self.clean {
|
2021-05-01 22:12:50 +00:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2022-01-09 02:08:36 +00:00
|
|
|
scannedInfo := make(chan fileInfo)
|
|
|
|
go scanDir(context.goldsmith.targetDir, scannedInfo)
|
2021-05-01 22:12:50 +00:00
|
|
|
|
2022-01-09 02:08:36 +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)
|
2022-01-09 02:08:36 +00:00
|
|
|
if contained, _ := self.tokens[relPath]; !contained {
|
2021-05-01 22:12:50 +00:00
|
|
|
os.RemoveAll(info.path)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|