94 lines
2.5 KiB
Go
94 lines
2.5 KiB
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"git.site.quack-lab.dev/dave/cylogger"
|
|
)
|
|
|
|
func CleanPath(path string) string {
|
|
log := cylogger.Default.WithPrefix(fmt.Sprintf("CleanPath: %q", path))
|
|
log.Trace("Start")
|
|
path = filepath.Clean(path)
|
|
path = strings.ReplaceAll(path, "\\", "/")
|
|
log.Trace("Done: %q", path)
|
|
return path
|
|
}
|
|
|
|
func ToAbs(path string) string {
|
|
log := cylogger.Default.WithPrefix(fmt.Sprintf("ToAbs: %q", path))
|
|
log.Trace("Start")
|
|
if filepath.IsAbs(path) {
|
|
log.Trace("Path is already absolute: %q", path)
|
|
return CleanPath(path)
|
|
}
|
|
cwd, err := os.Getwd()
|
|
if err != nil {
|
|
log.Error("Error getting cwd: %v", err)
|
|
return CleanPath(path)
|
|
}
|
|
log.Trace("Cwd: %q", cwd)
|
|
return CleanPath(filepath.Join(cwd, path))
|
|
}
|
|
|
|
func ResetWhereNecessary(associations map[string]FileCommandAssociation, db DB) error {
|
|
log := cylogger.Default.WithPrefix("ResetWhereNecessary")
|
|
log.Debug("Start")
|
|
dirtyFiles := make(map[string]struct{})
|
|
for _, association := range associations {
|
|
for _, command := range association.Commands {
|
|
log.Debug("Checking command %q for file %q", command.Name, association.File)
|
|
if command.Reset {
|
|
log.Debug("Command %q requires reset for file %q", command.Name, association.File)
|
|
dirtyFiles[association.File] = struct{}{}
|
|
}
|
|
}
|
|
for _, command := range association.IsolateCommands {
|
|
log.Debug("Checking isolate command %q for file %q", command.Name, association.File)
|
|
if command.Reset {
|
|
log.Debug("Isolate command %q requires reset for file %q", command.Name, association.File)
|
|
dirtyFiles[association.File] = struct{}{}
|
|
}
|
|
}
|
|
}
|
|
log.Debug("Dirty files: %v", dirtyFiles)
|
|
for file := range dirtyFiles {
|
|
log.Debug("Resetting file %q", file)
|
|
fileData, err := db.GetFile(file)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
log.Debug("Writing file %q to disk", file)
|
|
err = os.WriteFile(file, fileData, 0644)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
log.Debug("File %q written to disk", file)
|
|
}
|
|
log.Debug("Done")
|
|
return nil
|
|
}
|
|
|
|
func ResetAllFiles(db DB) error {
|
|
log := cylogger.Default.WithPrefix("ResetAllFiles")
|
|
log.Debug("Start")
|
|
fileSnapshots, err := db.GetAllFiles()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
log.Debug("Found %d files in database", len(fileSnapshots))
|
|
for _, fileSnapshot := range fileSnapshots {
|
|
log.Debug("Resetting file %q", fileSnapshot.FilePath)
|
|
err = os.WriteFile(fileSnapshot.FilePath, fileSnapshot.FileData, 0644)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
log.Debug("File %q written to disk", fileSnapshot.FilePath)
|
|
}
|
|
log.Debug("Done")
|
|
return nil
|
|
}
|