From 5b376d45eb346463c3c1846e690b45c27e249865 Mon Sep 17 00:00:00 2001
From: Thomas Heller
Date: Fri, 23 Mar 2018 14:33:00 +0100
Subject: [PATCH] add fallback when the shadow-cljs CLI fails to connect
if the server is dead but didn't clean up its files it should
just continue starting a new process instead of doing nothing.
---
src/main/shadow/cljs/npm/cli.cljs | 22 ++++++++++++++--------
src/main/shadow/cljs/npm/client.cljs | 8 +++++---
2 files changed, 19 insertions(+), 11 deletions(-)
diff --git a/src/main/shadow/cljs/npm/cli.cljs b/src/main/shadow/cljs/npm/cli.cljs
index feec7de2..4d2e8ddc 100644
--- a/src/main/shadow/cljs/npm/cli.cljs
+++ b/src/main/shadow/cljs/npm/cli.cljs
@@ -601,6 +601,17 @@
false
)))))
+(defn do-start [project-root config args opts]
+ (cond
+ (:deps config)
+ (run-clojure project-root config args opts)
+
+ (:lein config)
+ (run-lein project-root config args opts)
+
+ :else
+ (run-standalone project-root config args opts)))
+
(defn ^:export main [args]
;; https://github.com/tapjs/signal-exit
@@ -686,16 +697,11 @@
(server-start project-root config args opts))
server-running?
- (client/run project-root config server-port-file opts args)
-
- (:deps config)
- (run-clojure project-root config args opts)
-
- (:lein config)
- (run-lein project-root config args opts)
+ (client/run project-root config server-port-file opts args
+ #(do-start project-root config args opts))
:else
- (run-standalone project-root config args opts)
+ (do-start project-root config args opts)
))))))))
(catch :default ex
(print-error ex)
diff --git a/src/main/shadow/cljs/npm/client.cljs b/src/main/shadow/cljs/npm/client.cljs
index b793d1e9..1f0881f4 100644
--- a/src/main/shadow/cljs/npm/client.cljs
+++ b/src/main/shadow/cljs/npm/client.cljs
@@ -166,7 +166,9 @@
(js/process.stdin.removeListener "close" stop!)
))))
-(defn run [project-root config server-port-file opts args]
+(defn run
+ "attempts to connect to running server. if the connect fails calls callback"
+ [project-root config server-port-file opts args fallback]
(let [cli-repl
(-> (util/slurp server-port-file)
(js/parseInt 10))]
@@ -190,6 +192,6 @@
(.on socket "error"
(fn [err]
(println "shadow-cljs - socket connect failed, server process dead?")
- (js/process.exit 1)))
- ))))
+ (fallback err)
+ ))))))