From 2fa448fd3678d7915205768ea01a76ef5a8998ac Mon Sep 17 00:00:00 2001 From: liquidz Date: Sun, 3 Dec 2023 07:26:34 +0900 Subject: [PATCH] fix: Fix clojure upgrader to work with destructed version cf. #241 --- src/antq/upgrade/clojure.clj | 12 +++++- test/antq/dep/clojure_test.clj | 8 +++- test/antq/upgrade/clojure_test.clj | 62 ++++++++++++++++++++++++++++++ test/resources/dep/test_deps.edn | 7 ++++ 4 files changed, 87 insertions(+), 2 deletions(-) diff --git a/src/antq/upgrade/clojure.clj b/src/antq/upgrade/clojure.clj index 3e124183..d22fad56 100644 --- a/src/antq/upgrade/clojure.clj +++ b/src/antq/upgrade/clojure.clj @@ -31,6 +31,16 @@ (and (in-deps? loc) (not (ignoring-meta? (z/right loc))))) +(defn- down-considering-namespaced-map + "cf. https://github.com/clj-commons/rewrite-clj/blob/main/doc/01-user-guide.adoc#impact-of-namespaced-map-context-on-keywords-and-symbols" + [loc] + (if (z/namespaced-map? loc) + (-> loc + (z/down) + (z/rightmost) + (z/down)) + (z/down loc))) + (defmulti replace-versions (fn [_loc version-checked-dep] (:type version-checked-dep))) @@ -87,7 +97,7 @@ (z/right) ;; TODO check antq/ignore (skip-meta) - (z/down) + (down-considering-namespaced-map) (replace-versions version-checked-dep)) (z/next loc)) (z/next loc))) diff --git a/test/antq/dep/clojure_test.clj b/test/antq/dep/clojure_test.clj index 285cc9e5..a77d632b 100644 --- a/test/antq/dep/clojure_test.clj +++ b/test/antq/dep/clojure_test.clj @@ -72,7 +72,13 @@ :repositories nil}) (java-dependency {:name "local/nested-core" :version "8.8.8" :file (.getAbsolutePath (io/file (io/resource "dep/local/nested/test_deps.edn"))) - :repositories nil})} + :repositories nil}) + (java-dependency {:name "namespaced/mvn" :version "1.0.0"}) + (git-sha-dependency {:name "namespaced/sha" :version "1234567890abcdefghijklmnopqrstuvwxyz1234" + :extra {:url "https://github.com/example/git-sha.git"}}) + (git-tag-dependency {:name "namespaced/tag-and-sha" :version "v1.2.3" + :extra {:url "https://github.com/example/tag-short.git" + :sha "123abcd"}})} (set deps)))))) (t/deftest extract-deps-cross-project-configuration-test diff --git a/test/antq/upgrade/clojure_test.clj b/test/antq/upgrade/clojure_test.clj index ed4cba2e..1771d891 100644 --- a/test/antq/upgrade/clojure_test.clj +++ b/test/antq/upgrade/clojure_test.clj @@ -68,6 +68,28 @@ :latest-version "9.9.9" :file (io/resource "dep/test_deps.edn")})) +(def ^:private dummy-namespaced-mvn-dep + (r/map->Dependency {:project :clojure + :type :java + :name "namespaced/mvn" + :latest-version "9.0.0" + :file (io/resource "dep/test_deps.edn")})) + +(def ^:private dummy-namespaced-sha-dep + (r/map->Dependency {:project :clojure + :type :git-sha + :name "namespaced/sha" + :latest-version "new-sha" + :file (io/resource "dep/test_deps.edn")})) + +(def ^:private dummy-namespaced-tag-and-sha-dep + (r/map->Dependency {:project :clojure + :type :git-tag-and-sha + :name "namespaced/tag-and-sha" + :latest-version "v9.9.9" + :file (io/resource "dep/test_deps.edn") + :extra {:sha "123abcd"}})) + (t/deftest upgrade-dep-test (t/testing "java" (let [from-deps (->> dummy-java-dep @@ -169,6 +191,46 @@ (t/is (= #{{:name "full-meta/full-meta" :version {:- "2.6.9" :+ "9.0.0"}}} (h/diff-deps from-deps to-deps))))) + (t/testing "namespaced mvn" + (let [from-deps (->> dummy-namespaced-mvn-dep + :file + (slurp) + (dep.clj/extract-deps "")) + to-deps (->> dummy-namespaced-mvn-dep + (upgrade/upgrader) + (dep.clj/extract-deps ""))] + (t/is (= #{{:name "namespaced/mvn" :version {:- "1.0.0" :+ "9.0.0"}}} + (h/diff-deps from-deps to-deps))))) + + (t/testing "namespaced git-sha" + (let [from-deps (->> dummy-namespaced-sha-dep + :file + (slurp) + (dep.clj/extract-deps "")) + to-deps (->> dummy-namespaced-sha-dep + (upgrade/upgrader) + (dep.clj/extract-deps ""))] + (t/is (= #{{:name "namespaced/sha" + :url "https://github.com/example/git-sha.git" + :version {:- "1234567890abcdefghijklmnopqrstuvwxyz1234" + :+ "new-sha"}}} + (h/diff-deps from-deps to-deps))))) + + (t/testing "namespaced git-tag-and-sha" + (with-redefs [u.git/tag-sha-by-ls-remote (constantly "9876543210abcdefghijklmnopqrstuvwxyz1234")] + (let [from-deps (->> dummy-namespaced-tag-and-sha-dep + :file + (slurp) + (dep.clj/extract-deps "")) + to-deps (->> dummy-namespaced-tag-and-sha-dep + (upgrade/upgrader) + (dep.clj/extract-deps ""))] + (t/is (= #{{:name "namespaced/tag-and-sha" + :url "https://github.com/example/tag-short.git" + :version {:- "v1.2.3" :+ "v9.9.9"} + :sha {:- "123abcd" :+ "9876543"}}} + (h/diff-deps from-deps to-deps)))))) + (t/testing "no corresponding value" (let [from-deps (->> dummy-no-version-dep :file diff --git a/test/resources/dep/test_deps.edn b/test/resources/dep/test_deps.edn index ae2e9a77..9ce58e56 100644 --- a/test/resources/dep/test_deps.edn +++ b/test/resources/dep/test_deps.edn @@ -24,6 +24,13 @@ short-meta ^:foo/bar {:mvn/version "2.5.8"} full-meta ^{:foo/bar true} {:mvn/version "2.6.9"} + ;; namespaced map + namespaced/mvn #:mvn{:version "1.0.0"} + namespaced/sha #:git{:url "https://github.com/example/git-sha.git" + :sha "1234567890abcdefghijklmnopqrstuvwxyz1234"} + namespaced/tag-and-sha #:git{:url "https://github.com/example/tag-short.git" + :tag "v1.2.3" :sha "123abcd"} + ;; should be ignored local-repo/non-existing {:local/root "/path/to/non-existing-local/repo"} meta-ignore ^:antq/exclude {:mvn/version "3.5.8"}