From a1fabf4c2715ba97f1df5552c821298504c55897 Mon Sep 17 00:00:00 2001 From: bashbunni <15822994+bashbunni@users.noreply.github.com> Date: Tue, 30 May 2023 14:28:45 -0700 Subject: [PATCH] feat: add command to delete a database (#37) * feat: add command to delete a database * refactor: accept DB as @db-name for deletion * fix: return don't print err * feat: add warning style to confirmation * fix: show input in 'not found' msg --- main.go | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/main.go b/main.go index 179aa39..0c1a1ce 100755 --- a/main.go +++ b/main.go @@ -12,6 +12,7 @@ import ( "github.com/charmbracelet/charm/cmd" "github.com/charmbracelet/charm/kv" "github.com/charmbracelet/charm/ui/common" + "github.com/charmbracelet/lipgloss" "github.com/dgraph-io/badger/v3" mcobra "github.com/muesli/mango-cobra" "github.com/muesli/roff" @@ -28,6 +29,8 @@ var ( showBinary bool delimiterIterate string + warningStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("#FD5B5B")) + rootCmd = &cobra.Command{ Use: "skate", Short: "Skate, a personal key value store.", @@ -74,6 +77,14 @@ var ( RunE: listDbs, } + deleteDbCmd = &cobra.Command{ + Use: "delete-db [@DB]", + Hidden: false, + Short: "Delete a database", + Args: cobra.MinimumNArgs(1), + RunE: deleteDb, + } + syncCmd = &cobra.Command{ Use: "sync [@DB]", Short: "Sync local db with latest Charm Cloud db.", @@ -172,6 +183,47 @@ func listDbs(cmd *cobra.Command, args []string) error { return nil } +func deleteDb(cmd *cobra.Command, args []string) error { + n, err := nameFromArgs(args) + if err != nil { + return err + } + cc, err := client.NewClientWithDefaults() + if err != nil { + return err + } + dd, err := cc.DataPath() + if err != nil { + return err + } + dbs, err := os.ReadDir(filepath.Join(dd, "kv")) + if err != nil { + return err + } + + var found bool + for _, d := range dbs { + if d.IsDir() && d.Name() == n { + found = true + var confirmation string + fmt.Println(warningStyle.Render("are you sure you want to delete " + d.Name() + " and all its contents? (y/n)")) + fmt.Scanln(&confirmation) + if confirmation == "y" { + err := os.RemoveAll(filepath.Join(dd, "kv", d.Name())) + if err != nil { + return err + } + } else { + fmt.Println("did not delete " + d.Name()) + } + } + } + if !found { + fmt.Println(args[0] + " does not exist") + } + return nil +} + func list(cmd *cobra.Command, args []string) error { var k string var pf string @@ -328,6 +380,7 @@ func init() { deleteCmd, listCmd, listDbsCmd, + deleteDbCmd, syncCmd, resetCmd, cmd.LinkCmd("skate"),