Skip to content

Instantly share code, notes, and snippets.

@borkdude
Last active September 30, 2021 19:37

Revisions

  1. borkdude revised this gist Jan 8, 2021. 1 changed file with 1 addition and 3 deletions.
    4 changes: 1 addition & 3 deletions api_diff.clj
    Original file line number Diff line number Diff line change
    @@ -1,14 +1,12 @@
    #!/usr/bin/env bash
    #_" -*- mode: clojure; -*-"
    #_(
    "exec" "clojure" "-Sdeps" "{:deps {clj-kondo/clj-kondo {:mvn/version \"2020.12.12\"} org.clojure/tools.deps.alpha {:mvn/version \"0.9.857\"} lambdaisland/deep-diff2 {:mvn/version \"2.0.108\"} juji/editscript {:mvn/version \"0.5.4\"}}}" "-M" "$0" "$@"
    "exec" "clojure" "-Sdeps" "{:deps {clj-kondo/clj-kondo {:mvn/version \"2020.12.12\"} org.clojure/tools.deps.alpha {:mvn/version \"0.9.857\"} org.slf4j/slf4j-nop {:mvn/version \"1.7.30\"} lambdaisland/deep-diff2 {:mvn/version \"2.0.108\"} juji/editscript {:mvn/version \"0.5.4\"}}}" "-M" "$0" "$@"
    )

    ;; Example usage:
    ;; api_diff.clj org.clojure/clojure "1.8.0" "1.10.1" > /tmp/diff.txt

    ;; Also check out the babashka version: https://gist.github.com/borkdude/ba372c8cee311e31020b04063d88e1be

    (require '[clj-kondo.core :as clj-kondo])
    (require '[clojure.edn :as edn])

  2. borkdude revised this gist Jan 8, 2021. No changes.
  3. borkdude revised this gist Jan 8, 2021. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions api_diff.clj
    Original file line number Diff line number Diff line change
    @@ -7,6 +7,8 @@
    ;; Example usage:
    ;; api_diff.clj org.clojure/clojure "1.8.0" "1.10.1" > /tmp/diff.txt

    ;; Also check out the babashka version: https://gist.github.com/borkdude/ba372c8cee311e31020b04063d88e1be

    (require '[clj-kondo.core :as clj-kondo])
    (require '[clojure.edn :as edn])

  4. borkdude revised this gist Jan 8, 2021. 1 changed file with 30 additions and 7 deletions.
    37 changes: 30 additions & 7 deletions api_diff.clj
    Original file line number Diff line number Diff line change
    @@ -30,24 +30,47 @@
    [f coll]
    (persistent! (reduce #(assoc! %1 (f %2) %2) (transient {}) coll)))

    (defn clean [vars]
    (defn group [vars]
    (->> vars
    (map #(select-keys % [:ns :name :fixed-arities :varargs-min-arity]))
    (index-by (juxt :ns :name))))

    (defn vars [lib]
    (-> (clj-kondo/run! {:lint [lib] :config {:output {:analysis true :format :edn}}})
    :analysis :var-definitions clean))
    :analysis :var-definitions #_ clean))

    (def vars-1 (vars path1))
    (def vars-2 (vars path2))

    #_(require '[lambdaisland.deep-diff2 :as ddiff])
    #_(ddiff/pretty-print (ddiff/diff vars-1 vars-2))

    (require '[editscript.core :as c])
    (require '[editscript.edit :as e])
    (def d (c/diff vars-1 vars-2))
    ;; (require '[editscript.core :as c])
    ;; (require '[editscript.edit :as e])
    ;; (def d (c/diff vars-1 vars-2))

    (require '[clojure.pprint :refer [pprint]])
    (pprint (e/get-edits d))
    ;; (require '[clojure.pprint :refer [pprint]])
    ;; (pprint (e/get-edits d))

    (defn var-symbol [[k v]]
    (str k "/" v))

    (def compare-group-1 (group vars-1))
    (def compare-group-2 (group vars-2))

    (def lookup-1 (index-by (juxt :ns :name) vars-1))

    (doseq [[k var-1] compare-group-1]
    (if-let [var-2 (get compare-group-2 k)]
    (let [fixed-arities-v1 (:fixed-arities var-1)
    fixed-arities-v2 (:fixed-arities var-2)
    varargs-min-arity (:varargs-min-arity var-2)]
    (doseq [arity fixed-arities-v1]
    (when-not (or (contains? fixed-arities-v2 arity)
    (and varargs-min-arity (>= arity varargs-min-arity)))
    (let [{:keys [:filename :row :col :private]} (get lookup-1 k)]
    (println (str filename ":" row ":" col ":") (str (if private "warning" "error") ":")
    "Arity" arity "of" (var-symbol k) "was removed.")))))
    (let [{:keys [:filename :row :col :private]} (get lookup-1 k)]
    (println (str filename ":" row ":" col ":") (str (if private "warning" "error") ":")
    (var-symbol k) "was removed."))))
  5. borkdude revised this gist Jan 7, 2021. 1 changed file with 15 additions and 7 deletions.
    22 changes: 15 additions & 7 deletions api_diff.clj
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    #!/usr/bin/env bash
    #_" -*- mode: clojure; -*-"
    #_(
    "exec" "clojure" "-Sdeps" "{:deps {clj-kondo/clj-kondo {:mvn/version \"2020.12.12\"} org.clojure/tools.deps.alpha {:mvn/version \"0.9.857\"} lambdaisland/deep-diff2 {:mvn/version \"2.0.108\"}}}" "-M" "$0" "$@"
    "exec" "clojure" "-Sdeps" "{:deps {clj-kondo/clj-kondo {:mvn/version \"2020.12.12\"} org.clojure/tools.deps.alpha {:mvn/version \"0.9.857\"} lambdaisland/deep-diff2 {:mvn/version \"2.0.108\"} juji/editscript {:mvn/version \"0.5.4\"}}}" "-M" "$0" "$@"
    )

    ;; Example usage:
    @@ -15,11 +15,13 @@
    (def v2 (nth *command-line-args* 2))

    (require '[clojure.tools.deps.alpha :as tda])
    (require '[clojure.tools.deps.alpha.util.maven :as mvn])

    (defn path [lib v]
    (-> (tda/resolve-deps `{:deps {~lib {:mvn/version ~v}}} {})
    (get lib)
    :paths first))
    (let [deps `{:deps {~lib {:mvn/version ~v}} :mvn/repos ~mvn/standard-repos}]
    (-> (tda/resolve-deps deps {})
    (get lib)
    :paths first)))

    (def path1 (path lib v1))
    (def path2 (path lib v2))
    @@ -37,9 +39,15 @@
    (-> (clj-kondo/run! {:lint [lib] :config {:output {:analysis true :format :edn}}})
    :analysis :var-definitions clean))

    (require '[lambdaisland.deep-diff2 :as ddiff])

    (def vars-1 (vars path1))
    (def vars-2 (vars path2))

    (ddiff/pretty-print (ddiff/diff vars-1 vars-2))
    #_(require '[lambdaisland.deep-diff2 :as ddiff])
    #_(ddiff/pretty-print (ddiff/diff vars-1 vars-2))

    (require '[editscript.core :as c])
    (require '[editscript.edit :as e])
    (def d (c/diff vars-1 vars-2))

    (require '[clojure.pprint :refer [pprint]])
    (pprint (e/get-edits d))
  6. borkdude revised this gist Jan 7, 2021. 1 changed file with 18 additions and 6 deletions.
    24 changes: 18 additions & 6 deletions api_diff.clj
    Original file line number Diff line number Diff line change
    @@ -1,16 +1,28 @@
    #!/usr/bin/env bash
    #_" -*- mode: clojure; -*-"
    #_(
    "exec" "clojure" "-Sdeps" "{:deps {clj-kondo/clj-kondo {:mvn/version \"2020.12.12\"} lambdaisland/deep-diff2 {:mvn/version \"2.0.108\"}}}" "-M" "$0" "$@"
    "exec" "clojure" "-Sdeps" "{:deps {clj-kondo/clj-kondo {:mvn/version \"2020.12.12\"} org.clojure/tools.deps.alpha {:mvn/version \"0.9.857\"} lambdaisland/deep-diff2 {:mvn/version \"2.0.108\"}}}" "-M" "$0" "$@"
    )

    ;; Example usage:
    ;; api_diff.clj ~/.m2/repository/org/clojure/clojure/1.8.0/clojure-1.8.0.jar ~/.m2/repository/org/clojure/clojure/1.10.1/clojure-1.10.1.jar > /tmp/diff.txt
    ;; api_diff.clj org.clojure/clojure "1.8.0" "1.10.1" > /tmp/diff.txt

    (require '[clj-kondo.core :as clj-kondo])
    (require '[clojure.edn :as edn])

    (def lib-1 (first *command-line-args*))
    (def lib-2 (second *command-line-args*))
    (def lib (edn/read-string (first *command-line-args*)))
    (def v1 (second *command-line-args*))
    (def v2 (nth *command-line-args* 2))

    (require '[clojure.tools.deps.alpha :as tda])

    (defn path [lib v]
    (-> (tda/resolve-deps `{:deps {~lib {:mvn/version ~v}}} {})
    (get lib)
    :paths first))

    (def path1 (path lib v1))
    (def path2 (path lib v2))

    (defn index-by
    [f coll]
    @@ -27,7 +39,7 @@

    (require '[lambdaisland.deep-diff2 :as ddiff])

    (def vars-1 (vars lib-1))
    (def vars-2 (vars lib-2))
    (def vars-1 (vars path1))
    (def vars-2 (vars path2))

    (ddiff/pretty-print (ddiff/diff vars-1 vars-2))
  7. borkdude revised this gist Jan 7, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion api_diff.clj
    Original file line number Diff line number Diff line change
    @@ -5,7 +5,7 @@
    )

    ;; Example usage:
    ;; api_diff.clj ~/.m2/repository/org/clojure/clojure/1.8.0/clojure-1.8.0.jar ~/.m2/repository/org/clojure/clojure/1.10.1/clojure-1.10.1.jar
    ;; api_diff.clj ~/.m2/repository/org/clojure/clojure/1.8.0/clojure-1.8.0.jar ~/.m2/repository/org/clojure/clojure/1.10.1/clojure-1.10.1.jar > /tmp/diff.txt

    (require '[clj-kondo.core :as clj-kondo])

  8. borkdude created this gist Jan 7, 2021.
    33 changes: 33 additions & 0 deletions api_diff.clj
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,33 @@
    #!/usr/bin/env bash
    #_" -*- mode: clojure; -*-"
    #_(
    "exec" "clojure" "-Sdeps" "{:deps {clj-kondo/clj-kondo {:mvn/version \"2020.12.12\"} lambdaisland/deep-diff2 {:mvn/version \"2.0.108\"}}}" "-M" "$0" "$@"
    )

    ;; Example usage:
    ;; api_diff.clj ~/.m2/repository/org/clojure/clojure/1.8.0/clojure-1.8.0.jar ~/.m2/repository/org/clojure/clojure/1.10.1/clojure-1.10.1.jar

    (require '[clj-kondo.core :as clj-kondo])

    (def lib-1 (first *command-line-args*))
    (def lib-2 (second *command-line-args*))

    (defn index-by
    [f coll]
    (persistent! (reduce #(assoc! %1 (f %2) %2) (transient {}) coll)))

    (defn clean [vars]
    (->> vars
    (map #(select-keys % [:ns :name :fixed-arities :varargs-min-arity]))
    (index-by (juxt :ns :name))))

    (defn vars [lib]
    (-> (clj-kondo/run! {:lint [lib] :config {:output {:analysis true :format :edn}}})
    :analysis :var-definitions clean))

    (require '[lambdaisland.deep-diff2 :as ddiff])

    (def vars-1 (vars lib-1))
    (def vars-2 (vars lib-2))

    (ddiff/pretty-print (ddiff/diff vars-1 vars-2))