/
clojure.clj
37 lines (34 loc) · 1.16 KB
/
clojure.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 antq.upgrade.clojure
(:require
[antq.upgrade :as upgrade]
[antq.util.dep :as u.dep]
[antq.util.zip :as u.zip]
[rewrite-cljc.zip :as z]))
(defn- in-deps?
[loc]
(->> loc z/up z/left z/value
(contains? #{:deps :extra-deps :replace-deps})))
(defn upgrade-dep
[loc version-checked-dep]
(let [name-set (u.dep/name-candidates (:name version-checked-dep))
version-key (if (= :git-sha (:type version-checked-dep))
:sha
:mvn/version)]
(loop [loc loc]
(if-let [loc (z/find-value loc z/next name-set)]
(recur (if (in-deps? loc)
(-> loc
; move to map
(z/right) (z/down)
; find target key
(z/find-value z/right version-key)
; replace
(z/right)
(z/replace (:latest-version version-checked-dep)))
(z/next loc)))
(u.zip/move-to-root loc)))))
(defmethod upgrade/upgrader :clojure
[version-checked-dep]
(-> (z/of-file (:file version-checked-dep))
(upgrade-dep version-checked-dep)
(z/root-string)))