diff --git a/src/antq/core.clj b/src/antq/core.clj index 3d224544..90de853a 100644 --- a/src/antq/core.clj +++ b/src/antq/core.clj @@ -81,7 +81,8 @@ ["-d" "--directory=DIRECTORY" :default ["."] :assoc-fn concat-assoc-fn] [nil "--upgrade"] [nil "--verbose"] - [nil "--force"]]) + [nil "--force"] + [nil "--download"]]) (defn skip-artifacts? [dep options] @@ -254,7 +255,7 @@ (let [outdated (antq options deps)] (cond-> outdated (:upgrade options) - (upgrade/upgrade! (or (:force options) false)) + (upgrade/upgrade! options) true (exit))) diff --git a/src/antq/upgrade.clj b/src/antq/upgrade.clj index 1b2605b0..fcbdfb6e 100644 --- a/src/antq/upgrade.clj +++ b/src/antq/upgrade.clj @@ -1,5 +1,6 @@ (ns antq.upgrade (:require + [antq.download :as download] [antq.log :as log])) (defmulti upgrader @@ -37,24 +38,28 @@ (defn upgrade! "Return only non-upgraded deps" - [deps force?] - (let [version-checked-deps (filter :latest-version deps)] + [deps options] + (let [force? (or (:force options) false) + download? (or (:download options) false) + version-checked-deps (filter :latest-version deps)] (when (and (seq version-checked-deps) (not force?)) (log/info "")) - (doall - (remove - (fn [dep] - (if (confirm dep force?) - (if-let [upgraded-content (upgrader dep)] - (do (log/info (format "Upgraded %s '%s' to '%s' in %s." - (:name dep) - (:version dep) - (:latest-version dep) - (:file dep))) - (spit (:file dep) upgraded-content) - true) - false) - false)) - version-checked-deps)))) + (let [upgrade-result (group-by + (fn [dep] + (if (confirm dep force?) + (if-let [upgraded-content (upgrader dep)] + (do (log/info (format "Upgraded %s '%s' to '%s' in %s." + (:name dep) + (:version dep) + (:latest-version dep) + (:file dep))) + (spit (:file dep) upgraded-content) + true) + false) + false)) + version-checked-deps)] + (when download? + (download/download! (get upgrade-result true))) + (get upgrade-result false)))) diff --git a/test/antq/upgrade_test.clj b/test/antq/upgrade_test.clj index b7564474..0023c9c1 100644 --- a/test/antq/upgrade_test.clj +++ b/test/antq/upgrade_test.clj @@ -43,7 +43,7 @@ (t/is (every? #(= 0 (.indexOf % "before")) (map slurp temp-files))) - (sut/upgrade! [dep1 dep2] true) + (sut/upgrade! [dep1 dep2] {:force true}) (t/is (= "afterLATEST" (slurp temp1))) (t/is (= "before1" (slurp temp2))))) @@ -57,7 +57,7 @@ (let [sw (java.io.StringWriter.) err-str (binding [*err* sw] - (sut/upgrade! [dep] true) + (sut/upgrade! [dep] {:force true}) (str sw))] (t/is (not= -1 (.indexOf err-str "Not supported")))) @@ -73,7 +73,7 @@ (t/testing "input no" (let [out-str (with-out-str (with-redefs [read (constantly 'n)] - (sut/upgrade! [dep] false)))] + (sut/upgrade! [dep] {:force false})))] (t/is (not= -1 (.indexOf out-str "Do you want to upgrade")))) (t/is (= "before0" (slurp temp1)))) @@ -81,7 +81,7 @@ (t/testing "input yes" (let [out-str (with-out-str (with-redefs [read (constantly 'y)] - (sut/upgrade! [dep] false)))] + (sut/upgrade! [dep] {:force false})))] (t/is (not= -1 (.indexOf out-str "Do you want to upgrade")))) (t/is (= "afterLATEST" (slurp temp1))))))