hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/internal/cli/clean.go
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-08-29 05:00:39 +0200
committerhachem <im@hachem.wtf>2026-08-29 05:00:39 +0200
commit25bdd381d6dcf8581b1391c1c1fa22c108913ccb (patch)
tree638f3c0aa224643da7a7f79e50686790e109d8fc /internal/cli/clean.go
parent6d44318d728da84e5018bbbdbf69dc3053ffe133 (diff)
add: clean command
Diffstat (limited to 'internal/cli/clean.go')
-rw-r--r--internal/cli/clean.go74
1 files changed, 74 insertions, 0 deletions
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
+}