Implement special flags for dump and reset db
This commit is contained in:
31
main.go
31
main.go
@@ -62,6 +62,15 @@ func main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
workdone, err := HandleSpecialArgs(args, err, db)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("Failed to handle special args: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if workdone {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// The plan is:
|
// The plan is:
|
||||||
// Load all commands
|
// Load all commands
|
||||||
commands, err := utils.LoadCommands(args)
|
commands, err := utils.LoadCommands(args)
|
||||||
@@ -268,6 +277,28 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func HandleSpecialArgs(args []string, err error, db utils.DB) (bool, error) {
|
||||||
|
switch args[0] {
|
||||||
|
case "reset":
|
||||||
|
err = utils.ResetAllFiles(db)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("Failed to reset all files: %v", err)
|
||||||
|
return true, err
|
||||||
|
}
|
||||||
|
logger.Info("All files reset")
|
||||||
|
return true, nil
|
||||||
|
case "dump":
|
||||||
|
err = db.RemoveAllFiles()
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("Failed to remove all files from database: %v", err)
|
||||||
|
return true, err
|
||||||
|
}
|
||||||
|
logger.Info("All files removed from database")
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
func CreateExampleConfig() {
|
func CreateExampleConfig() {
|
||||||
commands := []utils.ModifyCommand{
|
commands := []utils.ModifyCommand{
|
||||||
{
|
{
|
||||||
|
25
utils/db.go
25
utils/db.go
@@ -15,6 +15,8 @@ type DB interface {
|
|||||||
Raw(sql string, args ...any) *gorm.DB
|
Raw(sql string, args ...any) *gorm.DB
|
||||||
SaveFile(filePath string, fileData []byte) error
|
SaveFile(filePath string, fileData []byte) error
|
||||||
GetFile(filePath string) ([]byte, error)
|
GetFile(filePath string) ([]byte, error)
|
||||||
|
GetAllFiles() ([]FileSnapshot, error)
|
||||||
|
RemoveAllFiles() error
|
||||||
}
|
}
|
||||||
|
|
||||||
type FileSnapshot struct {
|
type FileSnapshot struct {
|
||||||
@@ -93,3 +95,26 @@ func (db *DBWrapper) GetFile(filePath string) ([]byte, error) {
|
|||||||
log.Debug("File found in database")
|
log.Debug("File found in database")
|
||||||
return fileSnapshot.FileData, nil
|
return fileSnapshot.FileData, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (db *DBWrapper) GetAllFiles() ([]FileSnapshot, error) {
|
||||||
|
log := cylogger.Default.WithPrefix("GetAllFiles")
|
||||||
|
log.Debug("Getting all files from database")
|
||||||
|
var fileSnapshots []FileSnapshot
|
||||||
|
err := db.db.Model(&FileSnapshot{}).Find(&fileSnapshots).Error
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
log.Debug("Found %d files in database", len(fileSnapshots))
|
||||||
|
return fileSnapshots, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *DBWrapper) RemoveAllFiles() error {
|
||||||
|
log := cylogger.Default.WithPrefix("RemoveAllFiles")
|
||||||
|
log.Debug("Removing all files from database")
|
||||||
|
err := db.db.Exec("DELETE FROM file_snapshots").Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Debug("All files removed from database")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@@ -71,3 +71,23 @@ func ResetWhereNecessary(associations map[string]FileCommandAssociation, db DB)
|
|||||||
log.Debug("Done")
|
log.Debug("Done")
|
||||||
return nil
|
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
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user