Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 29 additions & 3 deletions internal/cmd/db_import.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package cmd

import (
"bufio"
"errors"
"fmt"
"os"
"path/filepath"
"strings"

Expand All @@ -20,17 +22,17 @@ func init() {
}

var importCmd = &cobra.Command{
Use: "import [filename]",
Use: "import [filename] [database-name]",
Short: "Import a SQLite database file to Turso.",
Args: cobra.MaximumNArgs(1),
Args: cobra.MaximumNArgs(2),
ValidArgsFunction: noFilesArg,
PreRunE: func(cmd *cobra.Command, args []string) error {
return nil
},
RunE: func(cmd *cobra.Command, args []string) error {
cmd.SilenceUsage = true
if len(args) == 0 {
return errors.New("filename is required: 'turso db import <filename>'")
return errors.New("filename is required: 'turso db import <filename> [database-name]'")
}
filename := args[0]

Expand All @@ -48,10 +50,34 @@ var importCmd = &cobra.Command{
fromFileFlag = filename
tursoDBFlag = importTursoDBFlag
name := sanitizeDatabaseName(filename)
if len(args) > 1 {
name = args[1]
} else if isInteractive() {
input, err := promptDatabaseName(name)
if err != nil {
return err
}
name = input
}
return CreateDatabase(name)
},
}

// Ask the user for a database name, defaulting to the one derived from the filename.
func promptDatabaseName(defaultName string) (string, error) {
fmt.Printf("Database name [%s]: ", defaultName)
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
return "", err
}
input = strings.TrimSpace(input)
if input == "" {
return defaultName, nil
}
return input, nil
}

// Sanitize a SQLite database filename to be used as a cloud database name.
func sanitizeDatabaseName(filename string) string {
base := filepath.Base(filename)
Expand Down
Loading