diff --git a/src/namenu/deps_diff.clj b/src/namenu/deps_diff.clj index 4599a5a..14efcf8 100644 --- a/src/namenu/deps_diff.clj +++ b/src/namenu/deps_diff.clj @@ -34,15 +34,21 @@ (output/cli data)) (defn diff* + "Returns a map of :removed, :added and :modified dependencies. + Each key is a dependency name and the value is a map of :from and :to versions" [deps-from deps-to] (let [key-set (comp set keys) - - [removed-deps added-deps common-deps] (data/diff (key-set deps-from) (key-set deps-to))] - ;; don't need to sort here - {:removed (into (sorted-map) (select-keys deps-from removed-deps)) - :added (into (sorted-map) (select-keys deps-to added-deps)) - :modified (into (sorted-map) (set/difference (set (select-keys deps-to common-deps)) - (select-keys deps-from common-deps)))})) + [removed-deps added-deps common-deps] (data/diff (key-set deps-from) (key-set deps-to)) + removed (map (fn [k] [k {:from (get deps-from k)}]) removed-deps) + added (map (fn [k] [k {:to (get deps-to k)}]) added-deps) + modified-keys (keys (set/difference (set (select-keys deps-to common-deps)) + (select-keys deps-from common-deps))) + modified (map (fn [k] [k {:from (get deps-from k) + :to (get deps-to k)}]) + modified-keys)] + {:removed (into {} removed) + :added (into {} added) + :modified (into {} modified)})) (defn diff " diff --git a/src/namenu/deps_diff/output.clj b/src/namenu/deps_diff/output.clj index ed6007d..cf2d468 100644 --- a/src/namenu/deps_diff/output.clj +++ b/src/namenu/deps_diff/output.clj @@ -15,8 +15,18 @@ :added "https://img.shields.io/badge/Added-green" :modified "https://img.shields.io/badge/Modified-blue"}) +(defn ver-string + "Creates a version string from a map of :from and :to version data. + + Handles the case where only :to or :from is precent (because of adding/removing a dependency)." + [{:keys [from to] :as ver}] + (cond + (and (some? from) (some? to)) (str (make-ver from) " -> " (make-ver to)) + (some? to) (make-ver to) + (some? from) (make-ver from))) + (defn make-row [operation [dep ver]] - (str "| ![](" (get assets-url operation) ") | `" dep "` | " (make-ver ver) " |")) + (str "| ![](" (get assets-url operation) ") | `" dep "` | " (ver-string ver) " |")) (defn markdown [{:keys [removed added modified]}] @@ -49,7 +59,7 @@ name " "] [:yellow - (make-ver ver)])) + (ver-string ver)])) removed) (run! (fn [[name ver]] @@ -63,7 +73,7 @@ name " "] [:yellow - (make-ver ver)])) + (ver-string ver)])) added) (run! (fn [[name ver]] @@ -77,7 +87,7 @@ name " "] [:yellow - (make-ver ver)])) + (ver-string ver)])) modified)))) (comment @@ -110,4 +120,4 @@ :pad :right} "Modified"] " " [{:font :yellow} - "2.0"]))) \ No newline at end of file + "1.0 -> 2.0"])))