From f4b7a7fef91837fe5812616463705a8920642105 Mon Sep 17 00:00:00 2001 From: Yann Vanhalewyn Date: Sun, 6 Oct 2019 22:52:51 +0200 Subject: [PATCH 1/3] Fallback to Clojars for finding artifact version --- src/refactor_nrepl/artifacts.clj | 11 ++++++++++- test/refactor_nrepl/artifacts_test.clj | 19 +++++++++++++------ test/resources/aero-versions.edn | 25 +++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 test/resources/aero-versions.edn diff --git a/src/refactor_nrepl/artifacts.clj b/src/refactor_nrepl/artifacts.clj index 0899933b..aad11bcb 100644 --- a/src/refactor_nrepl/artifacts.clj +++ b/src/refactor_nrepl/artifacts.clj @@ -101,6 +101,14 @@ (map #(vector (str group-id "/" %) nil)))) group-ids))) +(defn get-clojars-versions! + "Fetches all the versions of particular artifact from Clojars." + [for-artifact] + (let [{:keys [body status]} @(http/get (str "https://clojars.org/api/artifacts/" + for-artifact))] + (when (= 200 status) + (map :version (:recent_versions (json/parse-string body true)))))) + (defn- get-artifacts-from-clojars! [] (reduce #(update %1 (str (first %2)) conj (second %2)) @@ -125,7 +133,8 @@ (defn artifact-versions [{:keys [artifact]}] (->> (or (get @artifacts artifact) - (get-mvn-versions! artifact)) + (seq (get-mvn-versions! artifact)) + (get-clojars-versions! artifact)) distinct versions/version-sort reverse diff --git a/test/refactor_nrepl/artifacts_test.clj b/test/refactor_nrepl/artifacts_test.clj index 1ce6a249..c90bfb0f 100644 --- a/test/refactor_nrepl/artifacts_test.clj +++ b/test/refactor_nrepl/artifacts_test.clj @@ -5,22 +5,24 @@ [clojure.java.io :as io] [refactor-nrepl.artifacts :as artifacts])) -(def clojure-versions (-> (io/resource "resources/clojure-versions.edn") - slurp - edn/read-string)) +(defn- resource [filename] + (edn/read-string (slurp (io/resource filename)))) + +(def clojure-versions (resource "clojure-versions.edn")) +(def aero-versions (resource "aero-versions.edn")) + (def sorted-clojure-versions (vector "1.7.0-alpha1" "1.6.0" "1.6.0-RC1" "1.6.0-beta1" "1.6.0-alpha1" "1.5.1" "1.5.0")) (def clojure-artifacts ["clojure"]) -(def clojars-artifacts (-> (io/resource "resources/clojars-artifacts.edn") - slurp - edn/read-string)) +(def clojars-artifacts (resource "clojars-artifacts.edn")) (deftest creates-a-map-of-artifacts (reset! artifacts/artifacts {}) (with-redefs [artifacts/get-clojars-artifacts! (constantly clojars-artifacts) + artifacts/get-clojars-versions! (constantly aero-versions) artifacts/get-mvn-artifacts! (constantly clojure-artifacts) artifacts/get-mvn-versions! (constantly clojure-versions)] @@ -38,6 +40,11 @@ (is (= (count (artifacts/artifact-versions {:artifact "org.clojure/clojure"})) (count clojure-versions)))) + (testing "Fetches version from Clojars when Maven has no results" + (with-redefs [artifacts/get-mvn-versions! (constantly (list))] + (is (= (set aero-versions) + (set (artifacts/artifact-versions {:artifact "aero"})))))) + (testing "Contains artifacts from clojars" (is (contains? @artifacts/artifacts "alembic")) (is (some #{"0.3.1"} (get-in @artifacts/artifacts ["alembic"])))) diff --git a/test/resources/aero-versions.edn b/test/resources/aero-versions.edn new file mode 100644 index 00000000..4f88743c --- /dev/null +++ b/test/resources/aero-versions.edn @@ -0,0 +1,25 @@ +( + "1.1.3" + "1.1.2" + "1.1.1" + "1.1.0" + "1.0.3" + "1.0.2" + "1.0.1" + "1.0.0" + "1.0.0-beta5" + "1.0.0-beta4" + "1.0.0-beta3" + "1.0.0-beta2" + "1.0.0-beta1" + "0.2.3" + "0.2.2" + "0.2.1" + "0.2.0" + "0.1.5" + "0.1.4" + "0.1.3" + "0.1.2" + "0.1.1" + "0.1.0" + ) From e70b04643f6118b55d7da4d4cc0a769f457c49cb Mon Sep 17 00:00:00 2001 From: Yann Vanhalewyn Date: Sun, 6 Oct 2019 23:15:38 +0200 Subject: [PATCH 2/3] Update Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4376fa35..25e7bbf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * [#251](https://github.com/clojure-emacs/refactor-nrepl/pull/251) `clean-ns` support extra message key `relative-path`, which will be used if `path` does not exist. * [#256](https://github.com/clojure-emacs/refactor-nrepl/pull/256) ignore malformed artifact coordinates when fetching from Clojars. * [#264](https://github.com/clojure-emacs/refactor-nrepl/pull/264) less bandwidth used to fetch artifacts from Clojars +* [#268](https://github.com/clojure-emacs/refactor-nrepl/pull/268) added support for fetching artifact versions from Clojars ## 2.4.0 From afcd1e03e4a06dc5b4a05b81c23e5a3380f27419 Mon Sep 17 00:00:00 2001 From: Yann Vanhalewyn Date: Tue, 8 Oct 2019 12:44:54 +0200 Subject: [PATCH 3/3] Add docstring and rename 'for-artifact argument --- src/refactor_nrepl/artifacts.clj | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/refactor_nrepl/artifacts.clj b/src/refactor_nrepl/artifacts.clj index aad11bcb..68e6f32c 100644 --- a/src/refactor_nrepl/artifacts.clj +++ b/src/refactor_nrepl/artifacts.clj @@ -79,8 +79,8 @@ (defn- get-mvn-versions! "Fetches all the versions of particular artifact from maven repository." - [for-artifact] - (let [[group-id artifact] (str/split for-artifact #"/") + [artifact] + (let [[group-id artifact] (str/split artifact #"/") search-prefix "http://search.maven.org/solrsearch/select?q=g:%22" {:keys [_ _ body _]} @(http/get (str search-prefix group-id @@ -103,9 +103,9 @@ (defn get-clojars-versions! "Fetches all the versions of particular artifact from Clojars." - [for-artifact] + [artifact] (let [{:keys [body status]} @(http/get (str "https://clojars.org/api/artifacts/" - for-artifact))] + artifact))] (when (= 200 status) (map :version (:recent_versions (json/parse-string body true)))))) @@ -131,6 +131,9 @@ (->> @artifacts keys list*)) (defn artifact-versions + "Returns a sorted list of artifact version strings. The list can either come + from the artifacts cache, the maven search api or the clojars search api in + that order." [{:keys [artifact]}] (->> (or (get @artifacts artifact) (seq (get-mvn-versions! artifact))