expand-deps dynamically binds
clojure.tools.deps.alpha.util.dir/the-dir before submitting worker
threads. While hard to reproduce, this empirically breaks the
canonicalization of file paths from :local/root dependencies.
Per the Clojure docs for push-thread-bindings:
WARNING: This is a low-level function. Prefer high-level macros like
binding where ever possible. [...] Each call MUST be
accompanied by a matching call to pop-thread-bindings wrapped in a
try-finally!
bound-fn* ensures that dynamically are properly pushed and popped. Using
it from submit-task removes the :local/root canonicalization issues.
.../clojure/clojure/tools/deps/alpha/util/concurrent.clj | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/src/main/clojure/clojure/tools/deps/alpha/util/concurrent.clj b/src/main/clojure/clojure/tools/deps/alpha/util/concurrent.clj
index b1508c10..814e0190 100644
--- a/src/main/clojure/clojure/tools/deps/alpha/util/concurrent.clj
+++ b/src/main/clojure/clojure/tools/deps/alpha/util/concurrent.clj
@@ -29,11 +29,7 @@
(defn submit-task
^Future [^ExecutorService executor f]
- (let [bindings (get-thread-bindings)
- task #(do
- (push-thread-bindings bindings)
- (f))]
- (.submit executor ^Callable task)))
+ (.submit executor ^Callable (bound-fn* f)))
(defn shutdown-on-error
[^ExecutorService executor]