Skip to content

Instantly share code, notes, and snippets.

@swlkr
Last active July 27, 2021 17:18
Show Gist options
  • Save swlkr/3f346c66410e5c60c59530c4413a248e to your computer and use it in GitHub Desktop.
Save swlkr/3f346c66410e5c60c59530c4413a248e to your computer and use it in GitHub Desktop.
(ns switch
(:require [clojure.pprint :as pprint]))
(defn project-clj-map [filename]
(->> (slurp filename)
(read-string)
(drop 1)
(partition 2)
(map vec)
(into {})))
(defn lein-deps [filename]
(let [project-clj (project-clj-map filename)]
(get project-clj :dependencies)))
(defn edn-dep [lein-dep]
(let [[id version] lein-dep]
{id {:mvn/version version}}))
(defn edn-deps [lein-deps]
(let [deps (into {} (map edn-dep lein-deps))]
{:deps deps}))
(defn pprint-write [out-file m]
(with-open [w (clojure.java.io/writer out-file)]
(binding [*out* w]
(pprint/write m))))
(defn spit-edn-deps []
(->> (lein-deps "project.clj")
(edn-deps)
(pprint-write "deps.edn")))
(spit-edn-deps)
@AndreaCrotti
Copy link

FYI with a couple of minor changes I made this script work with babaksha https://github.com/borkdude/babashka which makes it run reaaally fast

#!/usr/bin/env bb

(defn project-clj-map [filename]
  (->> (slurp filename)
       (read-string)
       (drop 1)
       (partition 2)
       (map vec)
       (into {})))

(defn lein-deps [filename]
  (let [project-clj (project-clj-map filename)]
    (get project-clj :dependencies)))

(defn edn-dep [lein-dep]
  (let [[id version] lein-dep]
    {id {:mvn/version version}}))

(defn edn-deps [lein-deps]
  (let [deps (into {} (map edn-dep lein-deps))]
    {:deps deps}))

(defn pprint-write [out-file m]
  (with-open [w (clojure.java.io/writer out-file)]
    (binding [*out* w]
      (clojure.pprint/pprint m))))

(defn spit-edn-deps []
  (->> (lein-deps "project.clj")
       (edn-deps)
       (pprint-write "deps.edn")))


(spit-edn-deps)

@swlkr
Copy link
Author

swlkr commented Mar 30, 2020

nice! babashka is incredible

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment