Special-case repl for trampolining since it needs raw i/o. (WIP)

This commit is contained in:
Phil Hagelberg 2011-06-25 20:58:20 -07:00
parent 2f2a105b95
commit ac08c6e60e
2 changed files with 13 additions and 8 deletions

View file

@ -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))))))

View file

@ -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)]