Special-case repl for trampolining since it needs raw i/o. (WIP)
This commit is contained in:
parent
2f2a105b95
commit
ac08c6e60e
2 changed files with 13 additions and 8 deletions
|
@ -4,6 +4,7 @@
|
|||
(:use [leiningen.core :only [exit user-settings]]
|
||||
[leiningen.compile :only [eval-in-project]]
|
||||
[leiningen.deps :only [find-jars deps]]
|
||||
[leiningen.trampoline :only [*trampoline?*]]
|
||||
[clojure.java.io :only [copy]])
|
||||
(:import (java.net Socket InetAddress ServerSocket SocketException)
|
||||
(java.io OutputStreamWriter InputStreamReader File PrintWriter)
|
||||
|
@ -73,7 +74,9 @@
|
|||
(recur)))
|
||||
.start)
|
||||
(symbol (format "REPL started; server listening on %s:%s."
|
||||
~host ~port)))))
|
||||
~host ~port)))
|
||||
(if ~*trampoline?*
|
||||
(clojure.main/repl ~@options))))
|
||||
|
||||
(defn copy-out-loop [reader]
|
||||
(let [buffer (make-array Character/TYPE 1000)]
|
||||
|
@ -137,8 +140,10 @@ directory will start a standalone repl session."
|
|||
retries (- *retry-limit* (or (project :repl-retry-limit)
|
||||
((user-settings) :repl-retry-limit)
|
||||
*retry-limit*))]
|
||||
(future (if (empty? project)
|
||||
(clojure.main/with-bindings (println (eval server-form)))
|
||||
(eval-in-project project server-form)))
|
||||
(poll-repl-connection port retries repl-client)
|
||||
(exit))))
|
||||
(if *trampoline?*
|
||||
(eval-in-project project server-form)
|
||||
(do (future (if (empty? project)
|
||||
(clojure.main/with-bindings (println (eval server-form)))
|
||||
(eval-in-project project server-form)))
|
||||
(poll-repl-connection port retries repl-client)
|
||||
(exit))))))
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
[leiningen.classpath :only [get-classpath-string]])
|
||||
(:require [clojure.string :as string]))
|
||||
|
||||
(def *trampoline* false)
|
||||
(def *trampoline?* false)
|
||||
|
||||
(defn escape [form-string]
|
||||
(format "\"%s\"" (.replaceAll form-string "\"" "\\\\\"")))
|
||||
|
@ -39,7 +39,7 @@ ALPHA: subject to change without warning."
|
|||
eval-args (atom nil)]
|
||||
(when (:eval-in-leiningen project)
|
||||
(println "Warning: trampoline has no effect with :eval-in-leiningen."))
|
||||
(binding [*trampoline* true
|
||||
(binding [*trampoline?* true
|
||||
eval-in-project (fn [project form & [_ _ init]]
|
||||
(prep project true)
|
||||
(reset! eval-args [form init]) 0)]
|
||||
|
|
Loading…
Reference in a new issue