|
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