Don't exit after eval in repl task either.

This commit is contained in:
Phil Hagelberg 2010-11-24 18:26:17 -08:00
parent 94790ce255
commit aed1a4b0c2
2 changed files with 17 additions and 14 deletions

View file

@ -28,7 +28,8 @@
(let [[reader writer socket] (connect)] (let [[reader writer socket] (connect)]
(.write writer (str (pr-str form) "\n" '(.close *in*) "\n")) (.write writer (str (pr-str form) "\n" '(.close *in*) "\n"))
(.flush writer) (.flush writer)
(try (eval-client-loop reader writer (make-array Character/TYPE 100) socket) (try (eval-client-loop reader writer
(make-array Character/TYPE 1000) socket)
0 0
(catch Exception e (catch Exception e
(.printStackTrace e) 1) (.printStackTrace e) 1)
@ -56,12 +57,12 @@
(let [[port host] (repl-socket-on project)] (let [[port host] (repl-socket-on project)]
(println welcome) (println welcome)
(future (future
(eval-in-project project `(do ~(repl-server project host port (binding [*exit-when-done* false]
:prompt '(constantly "")) (eval-in-project project `(do ~(repl-server project host port :silently
(symbol "")))) :prompt '(constantly ""))
(symbol "")))))
(let [connect #(poll-repl-connection port 0 vector)] (let [connect #(poll-repl-connection port 0 vector)]
(binding [eval-in-project (partial eval-in-repl connect) (binding [eval-in-project (partial eval-in-repl connect)
*exit-when-done* false
exit (fn [_] (println "\n"))] exit (fn [_] (println "\n"))]
(task-repl project))) (task-repl project)))
(exit))) (exit)))

View file

@ -2,12 +2,12 @@
"Start a repl session either with the current project or standalone." "Start a repl session either with the current project or standalone."
(:require [clojure.main]) (:require [clojure.main])
(:use [leiningen.core :only [exit]] (:use [leiningen.core :only [exit]]
[leiningen.compile :only [eval-in-project]] [leiningen.compile :only [eval-in-project *exit-when-done*]]
[clojure.java.io :only [copy]]) [clojure.java.io :only [copy]])
(:import [java.net Socket] (:import [java.net Socket]
[java.io OutputStreamWriter InputStreamReader File])) [java.io OutputStreamWriter InputStreamReader File]))
(defn repl-server [project host port & repl-options] (defn repl-server [project host port silently & repl-options]
(let [init-form [:init `#(let [is# ~(:repl-init-script project) (let [init-form [:init `#(let [is# ~(:repl-init-script project)
mn# '~(:main project)] mn# '~(:main project)]
(when (and is# (.exists (File. (str is#)))) (when (and is# (.exists (File. (str is#))))
@ -53,7 +53,8 @@
(.printStackTrace e#))) (.printStackTrace e#)))
(recur))) (recur)))
.start) .start)
(format "REPL started; server listening on %s:%s." ~host ~port))))) (when-not ~silently
(println "REPL started; server listening on" ~host ":" ~port))))))
(defn copy-out-loop [reader] (defn copy-out-loop [reader]
(let [buffer (make-array Character/TYPE 1000)] (let [buffer (make-array Character/TYPE 1000)]
@ -105,12 +106,13 @@ Running outside a project directory will start a standalone repl session."
([] (repl {})) ([] (repl {}))
([project] ([project]
(let [[port host] (repl-socket-on project) (let [[port host] (repl-socket-on project)
server-form (apply repl-server project host port server-form (apply repl-server project host port false
(:repl-options project))] (:repl-options project))]
(future (try (if (empty? project) (future (binding [*exit-when-done* false]
(clojure.main/with-bindings (try (if (empty? project)
(println (eval server-form))) (clojure.main/with-bindings
(eval-in-project project server-form)) (println (eval server-form)))
(catch Exception _))) (eval-in-project project server-form))
(catch Exception _))))
(poll-repl-connection port) (poll-repl-connection port)
(exit)))) (exit))))