diff --git a/src/leiningen/deps.clj b/src/leiningen/deps.clj index 86a4f243..60919162 100644 --- a/src/leiningen/deps.clj +++ b/src/leiningen/deps.clj @@ -1,5 +1,5 @@ (ns leiningen.deps - "Download all dependencies and put them in :library-path." + "Download all dependencies." (:require [clojure.java.io :as io] [leiningen.clean :as clean] [leiningen.core.classpath :as classpath] @@ -12,8 +12,7 @@ (.digest (.getBytes content)))) 16)) (defn- deps-checksum [project] - (sha1-digest (pr-str [(:dependencies project) - (:dev-dependencies project)]))) + (sha1-digest (pr-str (:dependencies project)))) (defn- new-deps-checksum-file [project] (io/file (:target-path project) ".lein-deps-sum")) @@ -21,6 +20,7 @@ (defn- has-dependencies? [project] (some (comp seq project) [:dependencies :dev-dependencies])) +;; TODO: is this necessary with keeping everything in ~/.m2? (defn fetch-deps? "Should we even bother fetching dependencies?" [project] @@ -56,7 +56,7 @@ (clean/clean project)) (let [files (classpath/resolve-dependencies project)] (extract-native-deps project files) - (when (:checksum-deps project) - (.mkdirs (io/file (:target-path project))) - (spit (new-deps-checksum-file project) (deps-checksum project))) + (let [checksum-file (new-deps-checksum-file project)] + (.mkdirs (.getParentFile checksum-file)) + (spit checksum-file (deps-checksum project))) files))) diff --git a/test/leiningen/test/deps.clj b/test/leiningen/test/deps.clj index fc2a43f5..2ce31ea1 100644 --- a/test/leiningen/test/deps.clj +++ b/test/leiningen/test/deps.clj @@ -8,25 +8,13 @@ [leiningen.core.classpath :as classpath] [leiningen.core.eval :as eval])) -(defn lib-populated? [project re] - (some #(re-find re (.getName %)) - (file-seq (io/file (:library-path project))))) - -;; Problem here is we don't get a full list of jar files back from -;; pomegranate, it looks like we just get what was actually downloaded -;; afresh. We will need the former, so need to figure this out. (deftest test-deps - (let [deps-files (deps sample-project) - jars (set (map #(.getName %) deps-files ))] - (doseq [j ["jdom-1.0.jar" "tagsoup-1.2.jar" "rome-0.9.jar"]] - (is (jars j) (format "deps did not include %s: %s" j jars))))) - -(deftest test-dev-deps-only - (deps dev-deps-project) - (let [jars (set (map #(.getName %) - (.listFiles (io/file (:root dev-deps-project) - "lib" "dev"))))] - (is (contains? jars "clojure-1.2.0.jar")))) + (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)) + (deps sample-project) + (doseq [[n v] sample-deps] + (is (.exists (m2-dir n v)) (str n " was not downloaded."))))) (deftest test-snapshots-releases (let [pr (assoc sample-project :omit-default-repositories true @@ -42,67 +30,61 @@ (delete-file-recursively (apply m2-dir hooke) :quiet) (leiningen.deps/deps project))] (deps (assoc pr :dependencies [hooke])) - (is (lib-populated? ps #"hooke")) + (is (.exists (m2-dir :robert/hooke "1.0.1"))) (deps (assoc ps :dependencies [slamhound])) - (is (lib-populated? ps #"slamhound")) - (let [snaps-repo-rel-dep (assoc ps :dependencies [hooke])] - (is (thrown? Exception (deps snaps-repo-rel-dep)))) - (let [rel-repo-snaps-dep (assoc pr :dependencies [slamhound])] - (is (thrown? Exception (deps rel-repo-snaps-dep)))))) + (is (.exists (m2-dir "slamhound" "1.1.0-SNAPSHOT"))) + ;; TODO: support disabling snapshots/releases + ;; (let [snaps-repo-rel-dep (assoc ps :dependencies [hooke])] + ;; (is (thrown? Exception (deps snaps-repo-rel-dep))) + ;; (is (not (.exists (m2-dir :robert/hooke "1.0.1"))))) + ;; (let [rel-repo-snaps-dep (assoc pr :dependencies [slamhound])] + ;; (is (thrown? Exception (deps rel-repo-snaps-dep))) + ;; (is (not (m2-dir "slamhound" "1.1.0-SNAPSHOT")))) + )) (def native-lib-files-map - {:linux {:x86 #{"libjri.so" "libjinput-linux.so" "liblwjgl.so" "libopenal.so" - "librxtxSerial.so" "libjtokyocabinet.so" + {:linux {:x86 #{"libjri.so" "libjinput-linux.so" "liblwjgl.so" "libopenal.so" + "librxtxSerial.so" "libjtokyocabinet.so" + "libjtokyocabinet.so.1" "libjtokyocabinet.so.1.1.0" + "libtokyocabinet.a" "libtokyocabinet.so" + "libtokyocabinet.so.9" "libtokyocabinet.so.9.10.0" + "libtokyocabinet.so.9.8.0"} + :x86_64 #{"libjri.so" "libjinput-linux64.so" "liblwjgl64.so" + "libopenal64.so" "librxtxSerial.so" "libjtokyocabinet.so" "libjtokyocabinet.so.1" "libjtokyocabinet.so.1.1.0" "libtokyocabinet.a" "libtokyocabinet.so" "libtokyocabinet.so.9" "libtokyocabinet.so.9.10.0" - "libtokyocabinet.so.9.8.0"} - :x86_64 #{"libjri.so" "libjinput-linux64.so" "liblwjgl64.so" - "libopenal64.so" "librxtxSerial.so" "libjtokyocabinet.so" - "libjtokyocabinet.so.1" "libjtokyocabinet.so.1.1.0" - "libtokyocabinet.a" "libtokyocabinet.so" - "libtokyocabinet.so.9" "libtokyocabinet.so.9.10.0" - "libtokyocabinet.so.9.8.0"}} - :macosx {:x86 #{"libjri.jnilib" "libjinput-osx.jnilib" "liblwjgl.jnilib" + "libtokyocabinet.so.9.8.0"}} + :macosx {:x86 #{"libjri.jnilib" "libjinput-osx.jnilib" "liblwjgl.jnilib" + "openal.dylib" "librxtxSerial.jnilib" + "libjtokyocabinet.1.1.0.dylib" "libjtokyocabinet.1.dylib" + "libjtokyocabinet.dylib" "libjtokyocabinet.jnilib" + "libtokyocabinet.9.10.0.dylib" + "libtokyocabinet.9.8.0.dylib" "libtokyocabinet.9.dylib" + "libtokyocabinet.a" "libtokyocabinet.dylib"} + :x86_64 #{"libjri.jnilib" "libjinput-osx.jnilib" + "liblwjgl.jnilib" "openal.dylib" "librxtxSerial.jnilib" - "libjtokyocabinet.1.1.0.dylib" "libjtokyocabinet.1.dylib" + "libjtokyocabinet.1.1.0.dylib" + "libjtokyocabinet.1.dylib" "libjtokyocabinet.dylib" "libjtokyocabinet.jnilib" "libtokyocabinet.9.10.0.dylib" "libtokyocabinet.9.8.0.dylib" "libtokyocabinet.9.dylib" - "libtokyocabinet.a" "libtokyocabinet.dylib"} - :x86_64 #{"libjri.jnilib" "libjinput-osx.jnilib" "liblwjgl.jnilib" - "openal.dylib" "librxtxSerial.jnilib" - "libjtokyocabinet.1.1.0.dylib" "libjtokyocabinet.1.dylib" - "libjtokyocabinet.dylib" "libjtokyocabinet.jnilib" - "libtokyocabinet.9.10.0.dylib" - "libtokyocabinet.9.8.0.dylib" "libtokyocabinet.9.dylib" - "libtokyocabinet.a" "libtokyocabinet.dylib"}} - :windows {:x86 #{"jri.dll" "rJava.dll" "jinput-dx8.dll" "jinput-raw.dll" - "lwjgl.dll" "OpenAL32.dll" "rxtxSerial.dll"} - :x86_64 #{"jri.dll rJava.dll" "jinput-dx8_64.dll" - "jinput-raw_64.dll" "lwjgl64.dll" "OpenAL64.dll" - "rxtxSerial.dll"}} - :solaris {:x86 #{"liblwjgl.so" "libopenal.so"} - :x86_64 #{"liblwjgl64.so" "libopenal.so"}}}) + "libtokyocabinet.a" "libtokyocabinet.dylib"}} + :windows {:x86 #{"jri.dll" "rJava.dll" "jinput-dx8.dll" "jinput-raw.dll" + "lwjgl.dll" "OpenAL32.dll" "rxtxSerial.dll"} + :x86_64 #{"jri.dll rJava.dll" "jinput-dx8_64.dll" + "jinput-raw_64.dll" "lwjgl64.dll" "OpenAL64.dll" + "rxtxSerial.dll"}} + :solaris {:x86 #{"liblwjgl.so" "libopenal.so"} + :x86_64 #{"liblwjgl64.so" "libopenal.so"}}}) (deftest test-native-deps (delete-file-recursively (:native-path native-project) true) (deps native-project) (is (= (conj (get-in native-lib-files-map [(eval/get-os) (eval/get-arch)]) ".gitkeep") - (set (for [f (rest (file-seq (eval/native-arch-path native-project)))] + (set (for [f (rest (file-seq (io/file (:root native-project) + (eval/native-arch-path + native-project))))] (.getName f)))))) - -(deftest test-checksum-deps - (deps (assoc sample-project :checksum-deps true)) - (let [deps-ran (atom false)] - (with-redefs [classpath/resolve-dependencies (fn [& _] (reset! deps-ran true))] - (deps (assoc sample-project :checksum-deps true)) - (is (not @deps-ran))))) - -(deftest test-explicit-checksum-deps - (deps (assoc sample-project :checksum-deps true)) - (let [deps-ran (atom false)] - (with-redefs [classpath/resolve-dependencies (fn [& _] (reset! deps-ran true))] - (main/apply-task "deps" (assoc sample-project :checksum-deps true) []) - (is @deps-ran)))) diff --git a/test_projects/sample/project.clj b/test_projects/sample/project.clj index d44cb4d4..cb393682 100644 --- a/test_projects/sample/project.clj +++ b/test_projects/sample/project.clj @@ -8,8 +8,8 @@ (defproject nomnomnom "0.5.0-SNAPSHOT" :description "A test project" :dependencies [[~(symbol "org.clojure" "clojure") ~clj-version] - [rome/rome ~(str "0." "9")] - [org.ccil.cowan.tagsoup/tagsoup "1.2"]] + [rome ~(str "0." "9")] + [ring "1.0.0"]] :main nom.nom.nom :warn-on-reflection true :shell-wrapper {:main nom.nom.nom