Skip to content

Instantly share code, notes, and snippets.

@swlkr
Last active July 27, 2021 17:18
Show Gist options
  • Star 28 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • 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)
@tiagodalloca
Copy link

Nice

@chenyong
Copy link

Then probably:

mkdir src
mv switch.cljs src
clj -m switch

@ordnungswidrig
Copy link

This is so hacky but unlike it. Maybe trunk it into a lein plugin ?

@ordnungswidrig
Copy link

s/unlike/I like

@swlkr
Copy link
Author

swlkr commented Jan 10, 2018

Yeah I should make it a proper lein plugin, lein deps.edn or something like that?

@martinklepsch
Copy link

martinklepsch commented Jan 11, 2018

If you change this:

(defn -main []
  (spit-edn-deps))

into this

(spit-edn-deps)

you can run it with

curl https://gist.githubusercontent.com/swlkr/[...]/raw/[...]/switch.clj | clj -

or download the file first and run clj switch.clj

@swlkr
Copy link
Author

swlkr commented Jan 12, 2018

I just changed it, that's incredible

@Kah0ona
Copy link

Kah0ona commented Jan 18, 2018

that is, indeed, amazing. Simple yet effective. How cool.

@deas
Copy link

deas commented Feb 4, 2018

@ordnungswidrig @swlkr I'd go so far and say leiningen core should be shipping this functionality.

@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