diff --git a/CHANGELOG.md b/CHANGELOG.md index d2890cc1..78b7e7a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Unreleased * [#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. ## 2.4.0 diff --git a/src/refactor_nrepl/artifacts.clj b/src/refactor_nrepl/artifacts.clj index fceeb7f0..aa453ba6 100644 --- a/src/refactor_nrepl/artifacts.clj +++ b/src/refactor_nrepl/artifacts.clj @@ -31,6 +31,14 @@ (neg? (- millis-per-day (- (.getTime (java.util.Date.)) last-modified))) true))) +(defn- edn-read-or-nil + "Read a form `s`. Return nil if it cannot be parsed." + [s] + (try (edn/read-string s) + (catch Exception _ + ;; Ignore artifact if not readable. See #255 + nil))) + (defn get-clojars-artifacts! "Returns a vector of [[some/lib \"0.1\"]...]." [] @@ -39,7 +47,7 @@ java.net.URL. io/reader line-seq - (map edn/read-string)) + (keep edn-read-or-nil)) (catch Exception _ ;; In the event clojars is down just return an empty vector. See #136. []))) diff --git a/test/refactor_nrepl/artifacts_test.clj b/test/refactor_nrepl/artifacts_test.clj index af19ae69..1ce6a249 100644 --- a/test/refactor_nrepl/artifacts_test.clj +++ b/test/refactor_nrepl/artifacts_test.clj @@ -46,3 +46,10 @@ (reset! artifacts/artifacts {"org.clojure/clojure" clojure-versions}) (is (= sorted-clojure-versions (artifacts/artifact-versions {:artifact "org.clojure/clojure"})))))) + +(deftest ignores-invalid-artifact-forms + (let [bad-form "[bad/1.1 \"funky\"]" + good-form "[foo/bar \"1.1\"]"] + (is (nil? (#'artifacts/edn-read-or-nil bad-form))) + (is (= 'foo/bar (first (#'artifacts/edn-read-or-nil good-form)))) + (is (= "1.1" (second (#'artifacts/edn-read-or-nil good-form))))))