From 34b49815e7ce980137de3d88780493f428ab731d Mon Sep 17 00:00:00 2001 From: Juan Monetta Date: Mon, 22 Jan 2024 11:29:41 -0300 Subject: [PATCH] Fix global :exclusions in profile not applying to root :dependencies --- leiningen-core/src/leiningen/core/project.clj | 21 +++++++++++++++++++ .../test/leiningen/core/test/project.clj | 9 ++++++-- test/leiningen/test/pom.clj | 2 +- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/leiningen-core/src/leiningen/core/project.clj b/leiningen-core/src/leiningen/core/project.clj index c3afee1f5..c1d6f6207 100644 --- a/leiningen-core/src/leiningen/core/project.clj +++ b/leiningen-core/src/leiningen/core/project.clj @@ -465,6 +465,26 @@ (meta dependencies))) project))) +(defn- remove-self-excluded-deps + "Remove any dependency that contains it's dependency id inside it's own + :exclusions vec." + [{:keys [dependencies] :as project}] + (if dependencies + (update project :dependencies + (fn [deps] + (when deps + (let [self-excluded? (fn [dep] + (let [{:keys [artifact-id group-id exclusions]} (dependency-map dep)] + (some (fn [{excl-art-id :artifact-id, excl-grp-id :group-id}] + (and + (= group-id excl-grp-id) + (= artifact-id excl-art-id))) + exclusions)))] + (with-meta + (remove self-excluded? deps) + (meta deps)))))) + project)) + (defn- absolutize [root path] (str (if (.isAbsolute (io/file path)) path @@ -960,6 +980,7 @@ (target-path-subdirs :native-path) (absolutize-paths) (add-global-exclusions) + (remove-self-excluded-deps) (vary-meta merge {:without-profiles project :included-profiles include-profiles :excluded-profiles exclude-profiles diff --git a/leiningen-core/test/leiningen/core/test/project.clj b/leiningen-core/test/leiningen/core/test/project.clj index 17cc670ae..aa3af7e8e 100755 --- a/leiningen-core/test/leiningen/core/test/project.clj +++ b/leiningen-core/test/leiningen/core/test/project.clj @@ -410,7 +410,8 @@ (deftest test-global-exclusions (let [project {:dependencies - '[[lancet "1.0.1"] + '[[org.clojure/clojure "1.11.1"] + [lancet "1.0.1"] [leiningen-core "2.0.0-SNAPSHOT" :exclusions [pomegranate]] [clucy "0.2.2" :exclusions [org.clojure/clojure]]] :exclusions '[org.clojure/clojure]} @@ -418,7 +419,11 @@ (is (= '[[[org.clojure/clojure]] [[org.clojure/clojure] [pomegranate/pomegranate]] [[org.clojure/clojure]]] - (map #(distinct (:exclusions (apply hash-map %))) dependencies))))) + (map #(distinct (:exclusions (apply hash-map %))) dependencies))) + (is (= '[[lancet/lancet "1.0.1" :exclusions ([org.clojure/clojure])] + [leiningen-core/leiningen-core "2.0.0-SNAPSHOT" :exclusions ([org.clojure/clojure] [pomegranate/pomegranate])] + [clucy/clucy "0.2.2" :exclusions ([org.clojure/clojure])]] + dependencies)))) (defn add-seven [project] (assoc project :seven 7)) diff --git a/test/leiningen/test/pom.clj b/test/leiningen/test/pom.clj index c6688c74c..821e0eadf 100644 --- a/test/leiningen/test/pom.clj +++ b/test/leiningen/test/pom.clj @@ -380,7 +380,7 @@ ((partial mapcat :content)))))) (deftest test-pom-handles-global-exclusions - (is (= [["clojure"] ["clojure"] ["clojure"]] + (is (= [["clojure"] ["clojure"]] (-> (make-pom (with-profile-merged sample-project ^:leaky {:exclusions '[org.clojure/clojure]})) parse-xml