             [cljs.compiler :as comp]
             [cljs.repl :as repl]
             [cljs.closure :as closure]
-            [clojure.data.json :as json]
-            [clojure.java.shell :as shell])
+            [clojure.data.json :as json])
   (:import java.net.Socket
            java.lang.StringBuilder
            [java.io File BufferedReader BufferedWriter IOException]


(defn sh
  "Executes a shell process. Allows up to timeout to complete, returning process
  exit code. Otherwise forcibly terminates process and returns timeout-exit-value."
  [timeout timeout-exit-value & args]
  {:pre [(number? timeout) (every? string? args)]}
  (let [process (.exec (Runtime/getRuntime) (string/join " " args))]
    (loop [time-remaining timeout]
      (Thread/sleep 100)
      (or
        (try
          (.exitValue process)
          (catch IllegalThreadStateException _
            nil))
        (if (pos? time-remaining)
          (recur (- time-remaining 100))
          (do
            (.destroy process)
            timeout-exit-value))))))

(defn- ip-address->inet-addr
  "Take a string representation of an IP address and returns a Java InetAddress

  {:pre [(keyword? os) (is-ambly-bonjour-name? bonjour-name)
         (string? endpoint-address) (number? endpoint-port)]}
  (let [webdav-endpoint (create-http-url endpoint-address endpoint-port)
        shell-result (sh 30000 "" true "net" "use" "*" webdav-endpoint)]
   (or
     (extract-drive-letter (subs shell-result 0 (min 28 (count shell-result))))
     (throw (IOException. shell-result)))))

(defmethod mount-webdav :unknown
  [os bonjour-name endpoint-address endpoint-port]
