Use dep-key for distinct call in pom task.

group/artifact version tuple isn't enough to de-dupe correctly.

Fixes #1494.
This commit is contained in:
Phil Hagelberg 2014-04-22 15:03:34 -07:00
parent fed957c72f
commit 88181a4bbf
5 changed files with 19 additions and 13 deletions

View file

@ -288,8 +288,6 @@
#(-> % aether/repository-session #(-> % aether/repository-session
(pedantic/use-transformer ranges overrides)))) (pedantic/use-transformer ranges overrides))))
;; Exclusion(groupId, artifactId, classifier, extension)
(defn ^:internal get-dependencies [dependencies-key project & args] (defn ^:internal get-dependencies [dependencies-key project & args]
(let [ranges (atom []), overrides (atom []) (let [ranges (atom []), overrides (atom [])
session (pedantic-session project ranges overrides) session (pedantic-session project ranges overrides)

View file

@ -193,7 +193,7 @@
#"META-INF/services/.*" `[slurp str spit]} #"META-INF/services/.*" `[slurp str spit]}
:global-vars {}}) :global-vars {}})
(defn- dep-key (defn dep-key
"The unique key used to dedupe dependencies." "The unique key used to dedupe dependencies."
[dep] [dep]
(-> (dependency-map dep) (-> (dependency-map dep)

View file

@ -315,7 +315,12 @@
([_ project] ([_ project]
(let [reprofile #(-> project (project/merge-profiles %) (relativize)) (let [reprofile #(-> project (project/merge-profiles %) (relativize))
provided-project (reprofile [:provided]) provided-project (reprofile [:provided])
test-project (reprofile [:base :provided :dev :test])] test-project (reprofile [:base :provided :dev :test])
deps (concat (->> project :dependencies)
(->> provided-project :dependencies
(map (partial make-scope "provided")))
(->> test-project :dependencies
(map (partial make-scope "test"))))]
(list (list
[:project {:xsi:schemaLocation [:project {:xsi:schemaLocation
(str "http://maven.apache.org/POM/4.0.0" (str "http://maven.apache.org/POM/4.0.0"
@ -338,13 +343,7 @@
(write-scm-tag (guess-scm project) project) (write-scm-tag (guess-scm project) project)
(xml-tags :build [project test-project]) (xml-tags :build [project test-project])
(xml-tags :repositories (:repositories project)) (xml-tags :repositories (:repositories project))
(xml-tags :dependencies (xml-tags :dependencies (distinct-key project/dep-key deps))
(->> (concat (->> project :dependencies)
(->> provided-project :dependencies
(map (partial make-scope "provided")))
(->> test-project :dependencies
(map (partial make-scope "test"))))
(distinct-key (partial take 2))))
(and (:pom-addition project) (:pom-addition project))])))) (and (:pom-addition project) (:pom-addition project))]))))
(defn snapshot? [project] (defn snapshot? [project]

View file

@ -297,10 +297,17 @@
(is (re-find #"(?m)^\s+<groupId>nomnomnom</groupId>$" (is (re-find #"(?m)^\s+<groupId>nomnomnom</groupId>$"
(make-pom sample-project)))) (make-pom sample-project))))
(deftest test-snapshot-checking (deftest test-snapshot-checking
(binding [main/*exit-process?* false] (binding [main/*exit-process?* false]
(let [project (vary-meta sample-project update-in [:without-profiles] assoc (let [project (vary-meta sample-project update-in [:without-profiles] assoc
:version "1.0" :version "1.0"
:dependencies [['clojure "1.0.0-SNAPSHOT"]])] :dependencies [['clojure "1.0.0-SNAPSHOT"]])]
(is (thrown? Exception (pom project)))))) (is (thrown? Exception (pom project))))))
(deftest test-classifier-kept
(let [xml (xml/parse-str (make-pom lthelper/native-project))]
(is (= [["gdx-platform" nil] ["gdx-platform" "natives-desktop"]]
(for [dep (deep-content xml [:project :dependencies])
:let [artifact (first-in dep [:dependency :artifactId])]
:when (= "gdx-platform" artifact)]
[artifact (first-in dep [:dependency :classifier])])))))

View file

@ -4,6 +4,8 @@
:dependencies [[org.clojure/clojure "1.4.0"] :dependencies [[org.clojure/clojure "1.4.0"]
[serial-port "1.0.7"] [serial-port "1.0.7"]
[penumbra/lwjgl "2.4.2"] [penumbra/lwjgl "2.4.2"]
[com.badlogicgames.gdx/gdx-platform "0.9.9"]
[com.badlogicgames.gdx/gdx-platform "0.9.9" :classifier "natives-desktop"]
[org.clojars.samaaron/rxtx "2.2.0"] [org.clojars.samaaron/rxtx "2.2.0"]
[jriengine "0.8.4"] [jriengine "0.8.4"]
[tokyocabinet "1.24.0"]]) [tokyocabinet "1.24.0"]])