/
env.clj
38 lines (30 loc) · 1.11 KB
/
env.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
(ns lein-tools-deps.env
(:require [clojure.java.shell :as shell]
[clojure.java.io :as io])
(:import (java.io File)))
(defmulti exists? class)
(defmethod exists? String [file-path]
(.exists (io/file file-path)))
(defmethod exists? File [file]
(.exists file))
(def default-clojure-executables ["/usr/local/bin/clojure"])
(defn- clojure-exe
[{:keys [clojure-executables]}]
(let [clojure-paths (or clojure-executables default-clojure-executables)
exe (->> clojure-paths
(filter exists?)
first)]
(or exe (throw (ex-info "Could not find clojure executable" {:tried-paths clojure-paths})))))
(defn- scrape-clojure-env
[{:keys [root] config :lein-tools-deps/config}]
(shell/with-sh-dir
root
(let [exe (clojure-exe config)
{:keys [out exit] :as result} (shell/sh exe "-Sdescribe")]
(if (zero? exit)
(read-string out)
(throw (ex-info "Unable to locate Clojure's edn files" result))))))
(def clojure-env
"Returns a map describing the environment known to clj/clojure:
{:config-files [ ... ]}"
(memoize scrape-clojure-env))