|
16 | 16 | [nrepl.transport :as transport]
|
17 | 17 | [orchard.misc :as u]))
|
18 | 18 |
|
19 |
| -(defonce ^:private refresh-tracker (agent (track/tracker))) |
| 19 | +(defonce ^:private refresh-tracker (volatile! (track/tracker))) |
20 | 20 |
|
21 | 21 | (defn- user-refresh-dirs
|
22 | 22 | "Directories to watch and reload, as configured by the user.
|
|
122 | 122 | :before before}))
|
123 | 123 |
|
124 | 124 | (let [resolved? (resolve-and-invoke before msg)]
|
125 |
| - |
126 | 125 | (transport/send
|
127 | 126 | transport
|
128 | 127 | (response-for msg
|
|
143 | 142 | :after after}))
|
144 | 143 |
|
145 | 144 | (let [resolved? (resolve-and-invoke after msg)]
|
146 |
| - |
147 | 145 | (transport/send
|
148 | 146 | transport
|
149 | 147 | (response-for msg {:status (if resolved?
|
|
155 | 153 | (error-reply {:error e} msg)))))
|
156 | 154 |
|
157 | 155 | (defn- refresh-reply
|
158 |
| - [{:keys [dirs transport] :as msg}] |
159 |
| - (send-off refresh-tracker |
160 |
| - (fn [tracker] |
161 |
| - (try |
162 |
| - (before-reply msg) |
163 |
| - |
164 |
| - (-> tracker |
165 |
| - (dir/scan-dirs (or (seq dirs) (user-refresh-dirs)) |
166 |
| - (select-keys msg [:platform :add-all?])) |
167 |
| - (remove-disabled) |
168 |
| - (doto (reloading-reply msg)) |
169 |
| - (reload/track-reload) |
170 |
| - (doto (result-reply msg)) |
171 |
| - (doto (after-reply msg))) |
172 |
| - |
173 |
| - (catch Throwable e |
174 |
| - (error-reply {:error e} msg) |
175 |
| - tracker) |
176 |
| - |
177 |
| - (finally |
178 |
| - (transport/send |
179 |
| - transport |
180 |
| - (response-for msg {:status :done}))))))) |
| 156 | + [{:keys [dirs transport session id] :as msg}] |
| 157 | + (let [{:keys [exec]} (meta session)] |
| 158 | + (exec id |
| 159 | + (fn [] |
| 160 | + (locking refresh-tracker |
| 161 | + (vswap! refresh-tracker |
| 162 | + (fn [tracker] |
| 163 | + (try |
| 164 | + (before-reply msg) |
| 165 | + |
| 166 | + (-> tracker |
| 167 | + (dir/scan-dirs (or (seq dirs) (user-refresh-dirs)) |
| 168 | + (select-keys msg [:platform :add-all?])) |
| 169 | + (remove-disabled) |
| 170 | + (doto (reloading-reply msg)) |
| 171 | + (reload/track-reload) |
| 172 | + (doto (result-reply msg)) |
| 173 | + (doto (after-reply msg))) |
| 174 | + |
| 175 | + (catch Throwable e |
| 176 | + (error-reply {:error e} msg) |
| 177 | + tracker)))))) |
| 178 | + (fn [] |
| 179 | + (transport/send transport (response-for msg {:status :done})))))) |
181 | 180 |
|
182 | 181 | (defn- clear-reply
|
183 |
| - [{:keys [transport] :as msg}] |
184 |
| - (send-off refresh-tracker (constantly (track/tracker))) |
185 |
| - (transport/send |
186 |
| - transport |
187 |
| - (response-for msg {:status :done}))) |
| 182 | + [{:keys [transport session id] :as msg}] |
| 183 | + (let [{:keys [exec]} (meta session)] |
| 184 | + (exec id |
| 185 | + (fn [] |
| 186 | + (locking refresh-tracker |
| 187 | + (vreset! refresh-tracker (track/tracker)))) |
| 188 | + (fn [] |
| 189 | + (transport/send transport (response-for msg {:status :done})))))) |
188 | 190 |
|
189 | 191 | (defn handle-refresh [handler msg]
|
190 | 192 | (case (:op msg)
|
|
0 commit comments