Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@ install.cmd
/.cljs_node_repl/
/out/
/.lein-env
.inline-deps
.inline-deps
/.artifacts-cache
26 changes: 21 additions & 5 deletions src/refactor_nrepl/artifacts.clj
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,23 @@
[refactor-nrepl.ns.slam.hound.regrow :as slamhound-regrow]
[version-clj.core :as versions])
(:import java.util.Date
java.util.zip.GZIPInputStream
java.util.jar.JarFile))

(def artifacts-file ".artifacts-cache")

(defn get-last-modified-from-file
"Returns last modified time in milliseconds or nil if file does not exist."
[file]
(let [lm (.lastModified (io/file file))]
(if (zero? lm) nil lm)))

;; structure here is {"prismatic/schem" ["0.1.1" "0.2.0" ...]}
(defonce artifacts (atom {} :meta {:last-modified nil}))
(defonce artifacts (atom (if (.exists (io/as-file artifacts-file))
(-> artifacts-file slurp read-string)
{})
:meta {:last-modified
(get-last-modified-from-file artifacts-file)}))
(def millis-per-day (* 24 60 60 1000))

(defn- get-proxy-opts
Expand All @@ -27,7 +40,7 @@
(defn- stale-cache?
[]
(or (empty? @artifacts)
(if-let [last-modified (some-> artifacts meta :last-modified .getTime)]
(if-let [last-modified (some-> artifacts meta :last-modified)]
(neg? (- millis-per-day (- (.getTime (java.util.Date.)) last-modified)))
true)))

Expand All @@ -43,8 +56,9 @@
"Returns a vector of [[some/lib \"0.1\"]...]."
[]
(try
(->> "https://clojars.org/repo/all-jars.clj"
java.net.URL.
(->> "https://clojars.org/repo/all-jars.clj.gz"
io/input-stream
GZIPInputStream.
io/reader
line-seq
(keep edn-read-or-nil))
Expand Down Expand Up @@ -97,7 +111,9 @@
(let [clojars-artifacts (future (get-artifacts-from-clojars!))
maven-artifacts (future (get-artifacts-from-mvn-central!))]
(reset! artifacts (into @clojars-artifacts @maven-artifacts))
(alter-meta! artifacts update-in [:last-modified] (constantly (java.util.Date.)))))
(spit artifacts-file @artifacts)
(alter-meta! artifacts update-in [:last-modified]
(constantly (get-last-modified-from-file artifacts-file)))))

(defn artifact-list
[{:keys [force]}]
Expand Down