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)]
(.write writer (str (pr-str form) "\n" '(.close *in*) "\n"))
(.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
(catch Exception e
(.printStackTrace e) 1)
@ -56,12 +57,12 @@
(let [[port host] (repl-socket-on project)]
(println welcome)
(future
(eval-in-project project `(do ~(repl-server project host port
:prompt '(constantly ""))
(symbol ""))))
(binding [*exit-when-done* false]
(eval-in-project project `(do ~(repl-server project host port :silently
:prompt '(constantly ""))
(symbol "")))))
(let [connect #(poll-repl-connection port 0 vector)]
(binding [eval-in-project (partial eval-in-repl connect)
*exit-when-done* false
exit (fn [_] (println "\n"))]
(task-repl project)))
(exit)))

View file

@ -2,12 +2,12 @@
"Start a repl session either with the current project or standalone."
(:require [clojure.main])
(: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]])
(:import [java.net Socket]
[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)
mn# '~(:main project)]
(when (and is# (.exists (File. (str is#))))
@ -53,7 +53,8 @@
(.printStackTrace e#)))
(recur)))
.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]
(let [buffer (make-array Character/TYPE 1000)]
@ -105,12 +106,13 @@ Running outside a project directory will start a standalone repl session."
([] (repl {}))
([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))]
(future (try (if (empty? project)
(clojure.main/with-bindings
(println (eval server-form)))
(eval-in-project project server-form))
(catch Exception _)))
(future (binding [*exit-when-done* false]
(try (if (empty? project)
(clojure.main/with-bindings
(println (eval server-form)))
(eval-in-project project server-form))
(catch Exception _))))
(poll-repl-connection port)
(exit))))