Skip to content

Commit 51009e4

Browse files
committed
split deps.edn functions into c.t.deps.edn in prep for new lib
1 parent 2422732 commit 51009e4

File tree

13 files changed

+403
-266
lines changed

13 files changed

+403
-266
lines changed

deps.edn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{:paths ["src/main/clojure" "src/main/resources"]
22
:deps {
33
org.clojure/clojure {:mvn/version "1.12.4"}
4+
;;org.clojure/tools.deps.edn {:local/root "../tools.deps.edn"}
45
org.apache.maven.resolver/maven-resolver-api {:mvn/version "1.8.2"}
56
org.apache.maven.resolver/maven-resolver-spi {:mvn/version "1.8.2" :exclusions [org.apache.commons/commons-lang3]}
67
;; override for CVE

src/main/clojure/clojure/tools/deps.clj

Lines changed: 32 additions & 181 deletions
Original file line numberDiff line numberDiff line change
@@ -11,187 +11,70 @@
1111
[clojure.java.io :as jio]
1212
[clojure.set :as set]
1313
[clojure.string :as str]
14+
[clojure.tools.deps.edn :as depsedn]
1415
[clojure.tools.deps.util.concurrent :as concurrent]
1516
[clojure.tools.deps.util.dir :as dir]
1617
[clojure.tools.deps.util.io :as io]
1718
[clojure.tools.deps.util.session :as session]
18-
[clojure.tools.deps.extensions :as ext]
19-
[clojure.tools.deps.specs :as specs]
20-
[clojure.walk :as walk])
19+
[clojure.tools.deps.extensions :as ext])
2120
(:import
22-
[clojure.lang EdnReader$ReaderException]
2321
[clojure.lang PersistentQueue]
24-
[java.io File InputStreamReader BufferedReader]
22+
[java.io File]
2523
[java.lang ProcessBuilder ProcessBuilder$Redirect]
2624
[java.util List]
2725
[java.util.concurrent ConcurrentHashMap ExecutorService]))
2826

2927
;(set! *warn-on-reflection* true)
3028

31-
;;;; deps.edn reading
32-
33-
(defn- io-err
34-
^Throwable [fmt ^File f]
35-
(let [path (.getAbsolutePath f)]
36-
(ex-info (format fmt path) {:path path})))
37-
38-
(defn- slurp-edn-map
39-
"Read the file specified by the path-segments, slurp it, and read it as edn."
40-
[^File f]
41-
(let [val (try (io/slurp-edn f)
42-
(catch EdnReader$ReaderException e (throw (io-err (str (.getMessage e) " (%s)") f)))
43-
(catch RuntimeException t
44-
(if (str/starts-with? (.getMessage t) "EOF while reading")
45-
(throw (io-err "Error reading edn, delimiter unmatched (%s)" f))
46-
(throw (io-err (str "Error reading edn. " (.getMessage t) " (%s)") f)))))]
47-
(if (specs/valid-deps? val)
48-
val
49-
(throw (io-err (str "Error reading deps %s. " (specs/explain-deps val)) f)))))
50-
51-
;; all this canonicalization is deprecated and will eventually be removed
52-
53-
(defn- canonicalize-sym
54-
([s]
55-
(canonicalize-sym s nil))
56-
([s file-name]
57-
(if (simple-symbol? s)
58-
(let [cs (as-> (name s) n (symbol n n))]
59-
(io/printerrln "DEPRECATED: Libs must be qualified, change" s "=>" cs
60-
(if file-name (str "(" file-name ")") ""))
61-
cs)
62-
s)))
63-
64-
(defn- canonicalize-exclusions
65-
[{:keys [exclusions] :as coord} file-name]
66-
(if (seq (filter simple-symbol? exclusions))
67-
(assoc coord :exclusions (mapv #(canonicalize-sym % file-name) exclusions))
68-
coord))
69-
70-
(defn- canonicalize-dep-map
71-
[deps-map file-name]
72-
(when deps-map
73-
(reduce-kv (fn [acc lib coord]
74-
(let [new-lib (if (simple-symbol? lib) (canonicalize-sym lib file-name) lib)
75-
new-coord (canonicalize-exclusions coord file-name)]
76-
(assoc acc new-lib new-coord)))
77-
{} deps-map)))
78-
79-
(defn- canonicalize-all-syms
80-
([deps-edn]
81-
(canonicalize-all-syms deps-edn nil))
82-
([deps-edn file-name]
83-
(walk/postwalk
84-
(fn [x]
85-
(if (map? x)
86-
(reduce (fn [xr k]
87-
(if-let [xm (get xr k)]
88-
(assoc xr k (canonicalize-dep-map xm file-name))
89-
xr))
90-
x #{:deps :default-deps :override-deps :extra-deps :classpath-overrides})
91-
x))
92-
deps-edn)))
29+
;;;; deps.edn reading - moved to clojure.tools.deps.edn
9330

9431
(defn slurp-deps
95-
"Read a single deps.edn file from disk and canonicalize symbols,
96-
return a deps map. If the file doesn't exist, returns nil."
32+
"DEPRECATED: use clojure.tools.deps.edn/read-deps"
33+
{:deprecated "1.0"}
9734
[^File dep-file]
98-
(when (.exists dep-file)
99-
(-> dep-file slurp-edn-map (canonicalize-all-syms (.getPath dep-file)))))
35+
(depsedn/read-deps dep-file))
10036

10137
(defn root-deps
102-
"Read the root deps.edn resource from the classpath at the path
103-
clojure/tools/deps/deps.edn"
38+
"DEPRECATED: Use clojure.tools.deps.edn/root-deps"
39+
{:deprecated "1.0"}
10440
[]
105-
(let [url (jio/resource "clojure/tools/deps/deps.edn")]
106-
(io/read-edn (BufferedReader. (InputStreamReader. (.openStream url))))))
41+
(depsedn/root-deps))
10742

10843
(defn user-deps-path
109-
"Use the same logic as clj to calculate the location of the user deps.edn.
110-
Note that it's possible no file may exist at this location."
44+
"DEPRECATED: Use clojure.tools.deps.edn/user-deps-path"
45+
{:deprecated "1.0"}
11146
[]
112-
(let [config-env (System/getenv "CLJ_CONFIG")
113-
xdg-env (System/getenv "XDG_CONFIG_HOME")
114-
home (System/getProperty "user.home")
115-
config-dir (cond config-env config-env
116-
xdg-env (str xdg-env File/separator "clojure")
117-
:else (str home File/separator ".clojure"))]
118-
(str config-dir File/separator "deps.edn")))
47+
(depsedn/user-deps-path))
11948

12049
(defn find-edn-maps
121-
"Finds and returns standard deps edn maps in a map with keys
122-
:root-edn, :user-edn, :project-edn
123-
If no project-edn is supplied, use the deps.edn in current directory"
50+
"DEPRECATED: Use clojure.tools.deps.edn/create-edn-maps (note api differs)"
51+
{:deprecated "1.0"}
12452
([]
12553
(find-edn-maps nil))
12654
([project-edn-file]
127-
(let [user-loc (jio/file (user-deps-path))
128-
project-loc (jio/file (if project-edn-file project-edn-file (str dir/*the-dir* File/separator "deps.edn")))]
129-
(cond-> {:root-edn (root-deps)}
130-
(.exists user-loc) (assoc :user-edn (slurp-deps user-loc))
131-
(.exists project-loc) (assoc :project-edn (slurp-deps project-loc))))))
132-
133-
(defn- merge-or-replace
134-
"If maps, merge, otherwise replace"
135-
[& vals]
136-
(when (some identity vals)
137-
(reduce (fn [ret val]
138-
(if (and (map? ret) (map? val))
139-
(merge ret val)
140-
(or val ret)))
141-
nil vals)))
55+
(let [key-adapter {:root :root-edn, :user :user-edn, :project :project-edn}]
56+
(-> (depsedn/create-edn-maps {:project project-edn-file})
57+
(update-keys key-adapter)))))
58+
59+
(defn create-edn-maps
60+
"DEPRECATED - use clojure.tools.deps.edn/create-edn-maps"
61+
{:deprecated "1.0"}
62+
[params]
63+
(depsedn/create-edn-maps params))
14264

14365
(defn merge-edns
144-
"Merge multiple deps edn maps from left to right into a single deps edn map."
66+
"DEPRECATED: Use clojure.tools.deps.edn/merge-edns"
67+
{:deprecated "1.0"}
14568
[deps-edn-maps]
146-
(apply merge-with merge-or-replace (remove nil? deps-edn-maps)))
69+
(depsedn/merge-edns deps-edn-maps))
14770

14871
;;;; Aliases
14972

150-
;; per-key binary merge-with rules
151-
152-
(def ^:private last-wins (comp last #(remove nil? %) vector))
153-
(def ^:private append (comp vec concat))
154-
(def ^:private append-unique (comp vec distinct concat))
155-
156-
(def ^:private merge-alias-rules
157-
{:deps merge ;; FUTURE: remove
158-
:replace-deps merge ;; formerly :deps
159-
:extra-deps merge
160-
:override-deps merge
161-
:default-deps merge
162-
:classpath-overrides merge
163-
:paths append-unique ;; FUTURE: remove
164-
:replace-paths append-unique ;; formerly :paths
165-
:extra-paths append-unique
166-
:jvm-opts append
167-
:main-opts last-wins
168-
:exec-fn last-wins
169-
:exec-args merge-or-replace
170-
:ns-aliases merge
171-
:ns-default last-wins})
172-
173-
(defn- choose-rule [alias-key val]
174-
(or (merge-alias-rules alias-key)
175-
(if (map? val)
176-
merge
177-
(fn [_v1 v2] v2))))
178-
179-
(defn- merge-alias-maps
180-
"Like merge-with, but using custom per-alias-key merge function"
181-
[& ms]
182-
(reduce
183-
#(reduce
184-
(fn [m [k v]] (update m k (choose-rule k v) v))
185-
%1 %2)
186-
{} ms))
187-
18873
(defn combine-aliases
189-
"Find, read, and combine alias maps identified by alias keywords from
190-
a deps edn map into a single args map."
74+
"DEPRECATED: Use clojure.tools.deps.edn/combine-aliases"
75+
{:deprecated "1.0"}
19176
[edn-map alias-kws]
192-
(->> alias-kws
193-
(map #(get-in edn-map [:aliases %]))
194-
(apply merge-alias-maps)))
77+
(depsedn/combine-aliases edn-map alias-kws))
19578

19679
(defn lib-location
19780
"Find the file path location of where a lib/coord would be located if procured
@@ -767,38 +650,6 @@
767650
cp (make-classpath-map merged-edn libs classpath-args)]
768651
(merge merged-edn {:libs libs} cp)))))
769652

770-
;(defn runtime-basis
771-
; "Load the runtime execution basis context and return it."
772-
; []
773-
; (when-let [f (jio/file (System/getProperty "clojure.basis"))]
774-
; (if (and f (.exists f))
775-
; {:basis (slurp-deps f)}
776-
; (throw (IllegalArgumentException. "No basis declared in clojure.basis system property")))))
777-
778-
(defn- choose-deps
779-
[requested standard-fn]
780-
(cond
781-
(= :standard requested) (standard-fn)
782-
(string? requested) (-> requested jio/file dir/canonicalize slurp-deps)
783-
(or (nil? requested) (map? requested)) requested
784-
:else (throw (ex-info (format "Unexpected dep source: %s" (pr-str requested))
785-
{:requested requested}))))
786-
787-
(defn create-edn-maps
788-
"Create a set of edn maps from the standard dep sources and return
789-
them in a map with keys :root :user :project :extra"
790-
[{:keys [root user project extra] :as params
791-
:or {root :standard, user :standard, project :standard}}]
792-
(let [root-edn (choose-deps root #(root-deps))
793-
user-edn (choose-deps user #(-> (user-deps-path) jio/file dir/canonicalize slurp-deps))
794-
project-edn (choose-deps project #(-> "deps.edn" jio/file dir/canonicalize slurp-deps))
795-
extra-edn (choose-deps extra (constantly nil))]
796-
(cond-> {}
797-
root-edn (assoc :root root-edn)
798-
user-edn (assoc :user user-edn)
799-
project-edn (assoc :project project-edn)
800-
extra-edn (assoc :extra extra-edn))))
801-
802653
(defn create-basis
803654
"Create a basis from a set of deps sources and a set of aliases. By default, use
804655
root, user, and project deps and no argmaps (essentially the same classpath you get by
@@ -851,10 +702,10 @@
851702
argmap-data (->> aliases
852703
(remove nil?)
853704
(map #(get alias-data %)))
854-
argmap (apply merge-alias-maps (concat argmap-data [args]))
705+
argmap (apply depsedn/merge-alias-maps (concat argmap-data [args]))
855706

856707
project-tooled-edn (tool project-edn argmap)
857-
merged-edn (merge-edns [root-edn user-edn project-tooled-edn extra-edn])
708+
merged-edn (depsedn/merge-edns [root-edn user-edn project-tooled-edn extra-edn])
858709
basis (if (:skip-cp argmap) ;; UNSUPPORTED, USE AT YOUR OWN RISK
859710
(assoc merged-edn :argmap argmap)
860711
(calc-basis merged-edn {:resolve-args argmap, :classpath-args argmap}))]

0 commit comments

Comments
 (0)