Browse Source

add -y flag to skip interactive prompts and .db conflict check for multi-instance deployments

Danilo Fragoso 1 tháng trước cách đây
mục cha
commit
39d0ebd93a
2 tập tin đã thay đổi với 21 bổ sung12 xóa
  1. 14 11
      main.go
  2. 7 1
      pkg/runtime/runtime.go

+ 14 - 11
main.go

@@ -36,6 +36,7 @@ var (
 	kvAddr          = flag.String("kvaddr", "", "PizzaKV server address (default: auto-connect to managed instance)")
 	kvLaunch        = flag.Bool("kv", false, "Launch PizzaKV automatically")
 	kvFlags         = flag.String("kvflags", "", "Flags to pass to PizzaKV (e.g., \"-iwal\")")
+	forceYes        = flag.Bool("y", false, "Auto-accept prompts (skip interactive confirmation)")
 	database        = flag.String("db", "pizzasql", "Database name")
 	poolSize        = flag.Int("pool", 100, "Connection pool size")
 	timeout         = flag.Duration("timeout", 120*time.Second, "Query timeout")
@@ -70,7 +71,7 @@ func main() {
 	flag.Parse()
 
 	// Warn if other pizzasql instances are running; prompt to continue.
-	if err := pizzaruntime.CheckExistingInstances(); err != nil {
+	if err := pizzaruntime.CheckExistingInstances(*forceYes); err != nil {
 		fmt.Fprintf(os.Stderr, "%v\n", err)
 		os.Exit(1)
 	}
@@ -1076,17 +1077,19 @@ func runServers() {
 // launchPizzaKV starts a dedicated PizzaKV instance for this pizzasql process.
 func launchPizzaKV() error {
 	if _, err := os.Stat(".db"); err == nil {
-		if live := pizzaruntime.LiveInstances(); len(live) > 0 {
-			inst := live[0]
-			kvAddr := "<addr>"
-			if inst.PizzaKV != nil {
-				kvAddr = inst.PizzaKV.Addr
+		if !*forceYes {
+			if live := pizzaruntime.LiveInstances(); len(live) > 0 {
+				inst := live[0]
+				kvAddr := "<addr>"
+				if inst.PizzaKV != nil {
+					kvAddr = inst.PizzaKV.Addr
+				}
+				return fmt.Errorf(".db file already exists and another pizzasql instance is running (PID %d)\n"+
+					"  To connect to its pizzakv:      pizzasql -kvaddr=%s\n"+
+					"  To start fresh (removes data):  rm .db && pizzasql -kv\n"+
+					"  To run a separate instance:     cd /other/dir && pizzasql -kv",
+					inst.PizzaSQL.PID, kvAddr)
 			}
-			return fmt.Errorf(".db file already exists and another pizzasql instance is running (PID %d)\n"+
-				"  To connect to its pizzakv:      pizzasql -kvaddr=%s\n"+
-				"  To start fresh (removes data):  rm .db && pizzasql -kv\n"+
-				"  To run a separate instance:     cd /other/dir && pizzasql -kv",
-				inst.PizzaSQL.PID, kvAddr)
 		}
 	}
 

+ 7 - 1
pkg/runtime/runtime.go

@@ -129,7 +129,7 @@ func LiveInstances() []*Info {
 
 // CheckExistingInstances warns about live instances and prompts the user.
 // Returns an error only if the user declines to continue.
-func CheckExistingInstances() error {
+func CheckExistingInstances(force bool) error {
 	live := LiveInstances()
 	if len(live) == 0 {
 		return nil
@@ -149,6 +149,12 @@ func CheckExistingInstances() error {
 		}
 		fmt.Fprintf(os.Stderr, "  PID %d%s\n", info.PizzaSQL.PID, extra)
 	}
+
+	if force {
+		fmt.Fprintf(os.Stderr, "Auto-continuing (-y flag set)\n")
+		return nil
+	}
+
 	fmt.Fprintf(os.Stderr, "Continue anyway? [y/N] ")
 
 	reader := bufio.NewReader(os.Stdin)