From 25bdd381d6dcf8581b1391c1c1fa22c108913ccb Mon Sep 17 00:00:00 2001 From: hachem Date: Sat, 29 Aug 2026 05:00:39 +0200 Subject: add: clean command --- internal/cli/clean.go | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 internal/cli/clean.go (limited to 'internal/cli/clean.go') diff --git a/internal/cli/clean.go b/internal/cli/clean.go new file mode 100644 index 0000000..65e9123 --- /dev/null +++ b/internal/cli/clean.go @@ -0,0 +1,74 @@ +package cli + +import ( + "os" + "path/filepath" + "sort" + "strings" + + tea "github.com/charmbracelet/bubbletea" + + "github.com/hachem-wtf/benson/internal/config" +) + +const cleanUsage = "Usage: clean generated | clean latest | clean all" + +func runClean(m *model) tea.Cmd { + if len(m.args) == 0 { + return tea.Println(mutedStyle.Render(cleanUsage)) + } + + switch m.args[0] { + case "generated": + return tea.Println(cleanGenerated()) + case "latest": + return tea.Println(cleanLatest(m.cfg)) + case "all": + return tea.Println(cleanGenerated() + "\n" + cleanLatest(m.cfg)) + default: + return tea.Println(mutedStyle.Render(cleanUsage)) + } +} + +func cleanGenerated() string { + if _, err := os.Stat(serverDir); err != nil { + return mutedStyle.Render("Server directory doesn't exist.") + } + if err := os.RemoveAll(serverDir); err != nil { + return errorStyle.Render("Failed to remove server directory: " + err.Error()) + } + return successStyle.Render("Removed server directory.") +} + +func cleanLatest(cfg *config.Config) string { + if cfg.BackupLocation == "" { + return errorStyle.Render("backup_location must be set in config.") + } + if _, err := os.Stat(cfg.BackupLocation); err != nil { + return mutedStyle.Render("Backup directory doesn't exist.") + } + + entries, err := os.ReadDir(cfg.BackupLocation) + if err != nil { + return errorStyle.Render("Failed to read backup directory: " + err.Error()) + } + + var zips []string + for _, e := range entries { + name := e.Name() + if strings.HasPrefix(name, "backup_") && strings.HasSuffix(name, ".zip") { + zips = append(zips, name) + } + } + if len(zips) == 0 { + return mutedStyle.Render("No backup files found.") + } + + sort.Strings(zips) + latest := zips[len(zips)-1] + + if err := os.Remove(filepath.Join(cfg.BackupLocation, latest)); err != nil { + return errorStyle.Render("Failed to remove latest backup: " + err.Error()) + } + return successStyle.Render("Removed latest backup: ") + latest +} -- cgit v1.3