/
boot.clj
51 lines (46 loc) · 1.78 KB
/
boot.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
(ns antq.dep.boot
(:require
[antq.record :as r]
[antq.util.dep :as u.dep]
[clojure.java.io :as io]
[clojure.walk :as walk]))
(def ^:private project-file "build.boot")
(defn extract-deps
[file-path build-boot-content-str]
(let [dep-form? (atom false)
repos-form? (atom false)
deps (atom [])
repos (atom [])]
(walk/prewalk (fn [form]
(cond
(keyword? form)
(do (reset! dep-form? (= :dependencies form))
(reset! repos-form? (= :repositories form)))
(and @dep-form?
(vector? form)
(vector? (first form)))
(swap! deps concat form)
(and @repos-form?
(vector? form)
(string? (first form)))
(swap! repos concat form))
form)
(read-string (str "(list " build-boot-content-str " )")))
(let [repositories (apply hash-map @repos)]
(for [[dep-name version] @deps
:when (and (string? version) (seq version))]
(r/map->Dependency {:project :boot
:type :java
:file file-path
:name (if (u.dep/qualified-symbol?' dep-name)
(str dep-name)
(str dep-name "/" dep-name))
:version version
:repositories repositories})))))
(defn load-deps
([] (load-deps "."))
([dir]
(let [file (io/file dir project-file)]
(when (.exists file)
(extract-deps (u.dep/relative-path file)
(slurp file))))))