From 8d5b8698bd3686182947772c017cd4828a62c321 Mon Sep 17 00:00:00 2001 From: Phil Hagelberg Date: Mon, 18 Jun 2012 20:09:51 -0700 Subject: [PATCH] Honor :classifier and :extension when de-duping deps. Fixes #645. --- leiningen-core/src/leiningen/core/project.clj | 9 +++++++-- leiningen-core/test/leiningen/core/test/project.clj | 9 +++++++++ todo.org | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/leiningen-core/src/leiningen/core/project.clj b/leiningen-core/src/leiningen/core/project.clj index 3bff72df6..b308d888a 100755 --- a/leiningen-core/src/leiningen/core/project.clj +++ b/leiningen-core/src/leiningen/core/project.clj @@ -71,8 +71,13 @@ (for [[id repo] repositories] [id (if (map? repo) repo {:url repo})])))) +(defn- without-version [[id version & other]] + (-> (apply hash-map other) + (select-keys [:classifier :extension]) + (assoc :id id))) + (defn- dedupe-step [[deps seen] x] - (if (seen (first x)) + (if (seen (without-version x)) ;; this would be so much cleaner if we could just re-use profile-merge ;; logic, but since :dependencies are a vector, the :replace/:displace ;; calculations don't apply to nested vectors inside :dependencies. @@ -80,7 +85,7 @@ (if (or (:displace (meta seen-dep)) (:replace (meta x))) [(assoc deps (.indexOf deps seen-dep) x) seen] [deps seen])) - [(conj deps x) (conj seen (first x))])) + [(conj deps x) (conj seen (without-version x))])) (defn- dedupe-deps [deps] (first (reduce dedupe-step [[] #{}] deps))) diff --git a/leiningen-core/test/leiningen/core/test/project.clj b/leiningen-core/test/leiningen/core/test/project.clj index d2206f4e3..61c524aaf 100755 --- a/leiningen-core/test/leiningen/core/test/project.clj +++ b/leiningen-core/test/leiningen/core/test/project.clj @@ -155,3 +155,12 @@ :c {:C 3}}} (merge-profiles [:a :b :c {:D 4}]) (unmerge-profiles [:b {:D 4}])))))) + +(deftest test-dedupe-deps + (is (= '[[org.clojure/clojure "1.4.0"] + [org.clojure/clojure "1.3.0" :classifier "sources"]] + (-> {:dependencies '[[org.clojure/clojure "1.4.0"] + [org.clojure/clojure "1.3.0" :classifier "sources"] + [org.clojure/clojure "1.3.0"]]} + (normalize-deps) + (:dependencies))))) \ No newline at end of file diff --git a/todo.org b/todo.org index 2f6ef5ef8..6162a08d6 100644 --- a/todo.org +++ b/todo.org @@ -13,9 +13,9 @@ See also https://github.com/technomancy/leiningen/issues - [X] Address chaining issues in with-profile (#632) - [X] Address gpg agent issues (#615) - [X] Stale directory clutter (#589) + - [X] Fix de-dupe with :classifier/:extension (#645) - [ ] Allow jars to be signed, document in deploying guide. (#519) - [ ] Mirror support (#271) - - [ ] Fix de-dupe with :classifier/:extension (#645) - [ ] Warn when isn't in pom (#641) - [ ] Check project for :scm (#640) ** preview4