Let deps :tree print a dependency tree
This commit is contained in:
parent
f28018a075
commit
d633fad0b6
4 changed files with 69 additions and 13 deletions
|
@ -76,6 +76,19 @@
|
|||
(defn add-auth [repositories]
|
||||
(map add-repo-auth repositories))
|
||||
|
||||
(defn- get-dependencies
|
||||
[dependencies-key {:keys [repositories native-path] :as project}
|
||||
& {:keys [add-classpath?]}]
|
||||
{:pre [(every? vector? (project dependencies-key))]}
|
||||
((if add-classpath?
|
||||
pomegranate/add-dependencies
|
||||
aether/resolve-dependencies)
|
||||
:local-repo (:local-repo project)
|
||||
:offline? (:offline project)
|
||||
:repositories (add-auth repositories)
|
||||
:coordinates (project dependencies-key)
|
||||
:transfer-listener :stdout))
|
||||
|
||||
(defn resolve-dependencies
|
||||
"Simply delegate regular dependencies to pomegranate. This will
|
||||
ensure they are downloaded into ~/.m2/repositories and that native
|
||||
|
@ -85,19 +98,18 @@
|
|||
|
||||
Returns a set of the dependencies' files."
|
||||
[dependencies-key {:keys [repositories native-path] :as project}
|
||||
& {:keys [add-classpath?]}]
|
||||
{:pre [(every? vector? (project dependencies-key))]}
|
||||
& rest]
|
||||
(doto (set (aether/dependency-files
|
||||
((if add-classpath?
|
||||
pomegranate/add-dependencies
|
||||
aether/resolve-dependencies)
|
||||
:local-repo (:local-repo project)
|
||||
:offline? (:offline project)
|
||||
:repositories (add-auth repositories)
|
||||
:coordinates (project dependencies-key)
|
||||
:transfer-listener :stdout)))
|
||||
(apply get-dependencies dependencies-key project rest)))
|
||||
(extract-native-deps native-path)))
|
||||
|
||||
(defn dependency-hierarchy
|
||||
"Returns a graph of the project's dependencies."
|
||||
[dependencies-key project]
|
||||
(aether/dependency-hierarchy
|
||||
(project dependencies-key)
|
||||
(get-dependencies dependencies-key project)))
|
||||
|
||||
(defn- normalize-path [root path]
|
||||
(let [f (io/file path)]
|
||||
(.getAbsolutePath (if (.isAbsolute f) f (io/file root path)))))
|
||||
|
|
|
@ -29,6 +29,17 @@
|
|||
"commons-fileupload-1.2.1.jar"))}
|
||||
(resolve-dependencies :dependencies project))))
|
||||
|
||||
(deftest test-dependency-hierarchy
|
||||
(doseq [f (reverse (file-seq (io/file (:root project))))]
|
||||
(when (.exists f) (io/delete-file f)))
|
||||
(is (= '{[org.clojure/clojure "1.3.0"] nil
|
||||
[ring/ring-core "1.0.0-RC1"
|
||||
:exclusions [[commons-codec]]]
|
||||
{[commons-fileupload "1.2.1"] nil
|
||||
[commons-io "1.4"] nil
|
||||
[javax.servlet/servlet-api "2.5"] nil}}
|
||||
(dependency-hierarchy :dependencies project))))
|
||||
|
||||
(def directories
|
||||
["/tmp/lein-sample-project/test"
|
||||
"/tmp/lein-sample-project/src"
|
||||
|
|
|
@ -1,10 +1,16 @@
|
|||
(ns leiningen.deps
|
||||
"Download all dependencies."
|
||||
(:require [leiningen.core.classpath :as classpath]))
|
||||
(:require [leiningen.core.classpath :as classpath]
|
||||
[clojure.pprint :as pp]))
|
||||
|
||||
(defn deps
|
||||
"Download all dependencies.
|
||||
|
||||
You should never need to invoke this manually."
|
||||
[project]
|
||||
(classpath/resolve-dependencies :dependencies project))
|
||||
([project]
|
||||
(deps project nil))
|
||||
([project tree]
|
||||
(if (= tree ":tree")
|
||||
(do (pp/pprint (classpath/dependency-hierarchy :dependencies project))
|
||||
(flush))
|
||||
(classpath/resolve-dependencies :dependencies project))))
|
||||
|
|
|
@ -16,6 +16,33 @@
|
|||
(doseq [[n v] sample-deps]
|
||||
(is (.exists (m2-dir n v)) (str n " was not downloaded.")))))
|
||||
|
||||
(deftest ^:online test-dependency-hierarchy
|
||||
(let [sample-deps [["ring" "1.0.0"] ["rome" "0.9"] ["jdom" "1.0"]]]
|
||||
(doseq [[n v] sample-deps]
|
||||
(delete-file-recursively (m2-dir n v) :silently))
|
||||
(is (= (with-out-str
|
||||
(clojure.pprint/pprint
|
||||
'{[org.clojure/clojure "1.1.0"] nil
|
||||
[ring "1.0.0"]
|
||||
{[ring/ring-core "1.0.0"]
|
||||
{[commons-codec "1.4"] nil
|
||||
[commons-fileupload "1.2.1"] nil
|
||||
[commons-io "1.4"] nil
|
||||
[javax.servlet/servlet-api "2.5"] nil}
|
||||
[ring/ring-devel "1.0.0"]
|
||||
{[clj-stacktrace "0.2.2"] nil
|
||||
[hiccup "0.3.7"] nil
|
||||
[ns-tracker "0.1.1"]
|
||||
{[org.clojure/tools.namespace "0.1.0"]
|
||||
{[org.clojure/java.classpath "0.1.0"] nil}}}
|
||||
[ring/ring-jetty-adapter "1.0.0"]
|
||||
{[org.mortbay.jetty/jetty-util "6.1.25"] nil
|
||||
[org.mortbay.jetty/jetty "6.1.25"]
|
||||
{[org.mortbay.jetty/servlet-api "2.5-20081211"] nil}}
|
||||
[ring/ring-servlet "1.0.0"] nil}
|
||||
[rome "0.9"] {[jdom "1.0"] nil}}))
|
||||
(with-out-str (deps sample-project ":tree"))))))
|
||||
|
||||
(deftest ^:online test-snapshots-releases
|
||||
(let [pr (assoc sample-project :omit-default-repositories true
|
||||
:repositories {"clojars" {:url "http://clojars.org/repo/"
|
||||
|
|
Loading…
Reference in a new issue