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]
|
(defn add-auth [repositories]
|
||||||
(map add-repo-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
|
(defn resolve-dependencies
|
||||||
"Simply delegate regular dependencies to pomegranate. This will
|
"Simply delegate regular dependencies to pomegranate. This will
|
||||||
ensure they are downloaded into ~/.m2/repositories and that native
|
ensure they are downloaded into ~/.m2/repositories and that native
|
||||||
|
@ -85,19 +98,18 @@
|
||||||
|
|
||||||
Returns a set of the dependencies' files."
|
Returns a set of the dependencies' files."
|
||||||
[dependencies-key {:keys [repositories native-path] :as project}
|
[dependencies-key {:keys [repositories native-path] :as project}
|
||||||
& {:keys [add-classpath?]}]
|
& rest]
|
||||||
{:pre [(every? vector? (project dependencies-key))]}
|
|
||||||
(doto (set (aether/dependency-files
|
(doto (set (aether/dependency-files
|
||||||
((if add-classpath?
|
(apply get-dependencies dependencies-key project rest)))
|
||||||
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)))
|
|
||||||
(extract-native-deps native-path)))
|
(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]
|
(defn- normalize-path [root path]
|
||||||
(let [f (io/file path)]
|
(let [f (io/file path)]
|
||||||
(.getAbsolutePath (if (.isAbsolute f) f (io/file root path)))))
|
(.getAbsolutePath (if (.isAbsolute f) f (io/file root path)))))
|
||||||
|
|
|
@ -29,6 +29,17 @@
|
||||||
"commons-fileupload-1.2.1.jar"))}
|
"commons-fileupload-1.2.1.jar"))}
|
||||||
(resolve-dependencies :dependencies project))))
|
(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
|
(def directories
|
||||||
["/tmp/lein-sample-project/test"
|
["/tmp/lein-sample-project/test"
|
||||||
"/tmp/lein-sample-project/src"
|
"/tmp/lein-sample-project/src"
|
||||||
|
|
|
@ -1,10 +1,16 @@
|
||||||
(ns leiningen.deps
|
(ns leiningen.deps
|
||||||
"Download all dependencies."
|
"Download all dependencies."
|
||||||
(:require [leiningen.core.classpath :as classpath]))
|
(:require [leiningen.core.classpath :as classpath]
|
||||||
|
[clojure.pprint :as pp]))
|
||||||
|
|
||||||
(defn deps
|
(defn deps
|
||||||
"Download all dependencies.
|
"Download all dependencies.
|
||||||
|
|
||||||
You should never need to invoke this manually."
|
You should never need to invoke this manually."
|
||||||
[project]
|
([project]
|
||||||
(classpath/resolve-dependencies :dependencies 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]
|
(doseq [[n v] sample-deps]
|
||||||
(is (.exists (m2-dir n v)) (str n " was not downloaded.")))))
|
(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
|
(deftest ^:online test-snapshots-releases
|
||||||
(let [pr (assoc sample-project :omit-default-repositories true
|
(let [pr (assoc sample-project :omit-default-repositories true
|
||||||
:repositories {"clojars" {:url "http://clojars.org/repo/"
|
:repositories {"clojars" {:url "http://clojars.org/repo/"
|
||||||
|
|
Loading…
Reference in a new issue