|
47 | 47 | (clojure.java.io/copy stream dest-file)) |
48 | 48 | (recur (.getNextEntry stream)))))) |
49 | 49 |
|
50 | | -(defn ^:private download! [^File download-path version] |
| 50 | +(defn ^:private download! [^File download-path ^File server-version-path version] |
51 | 51 | (let [platform (os-name) |
52 | 52 | arch (os-arch) |
53 | 53 | artifact-name (get-in artifacts [platform arch]) |
|
57 | 57 | (doto download-path |
58 | 58 | (.setWritable true) |
59 | 59 | (.setReadable true) |
60 | | - (.setExecutable true)))) |
| 60 | + (.setExecutable true)) |
| 61 | + (spit server-version-path version))) |
61 | 62 |
|
62 | 63 | (defn ^:private server-version [] |
63 | 64 | (string/trim (slurp (io/resource "CLOJURE_LSP_VERSION")))) |
64 | 65 |
|
65 | 66 | (defn ^:private server-path ^File [] |
66 | 67 | (io/file (global-cache-dir) "clojure-lsp")) |
67 | 68 |
|
| 69 | +(defn ^:private server-version-path ^File [] |
| 70 | + (io/file (global-cache-dir) "version.txt")) |
| 71 | + |
68 | 72 | (defn ^:private run-lsp! [^File path args] |
69 | 73 | (let [p (process/process {:cmd (concat [(.getAbsolutePath path)] args)})] |
70 | 74 | (future |
|
82 | 86 | (recur)))))) |
83 | 87 | @p)) |
84 | 88 |
|
| 89 | +(defn ^:private download-server? [server-path server-version-path version] |
| 90 | + (or (not (.exists server-path)) |
| 91 | + (not= (slurp server-version-path) version))) |
| 92 | + |
85 | 93 | (defn run! [args] |
86 | 94 | (let [server-path (server-path) |
| 95 | + server-version-path (server-version-path) |
87 | 96 | server-version (server-version)] |
88 | | - (when-not (.exists server-path) |
| 97 | + (when (download-server? server-path server-version-path server-version) |
89 | 98 | (binding [*out* *err*] |
90 | 99 | (println "Downloading and caching clojure-lsp to" (str server-path))) |
91 | 100 | (let [t (System/currentTimeMillis)] |
92 | | - (download! server-path server-version) |
| 101 | + (download! server-path server-version-path server-version) |
93 | 102 | (binding [*out* *err*] |
94 | 103 | (println (format "Downloaded clojure-lsp took %sms" (- (System/currentTimeMillis) t)))))) |
95 | 104 | (run-lsp! server-path args))) |
0 commit comments