57 lines
1.6 KiB
Clojure
57 lines
1.6 KiB
Clojure
;;; -*- mode:clojure -*-
|
||
;;;
|
||
;;; USAGE:
|
||
;;;
|
||
;;; bb -cp . -m override-deps -- [DEP-NAME INFO]…
|
||
;;;
|
||
;;; This script takes a series of deps substitutions on the command
|
||
;;; line, applies them to a deps.edn file (read on stdin), and spits
|
||
;;; the result to stdout.
|
||
;;;
|
||
;;; It is used to build the Doerg server with Nix, since Clj-nix does
|
||
;;; not resolve the local deps itself.
|
||
|
||
(ns override-deps
|
||
(:require [rewrite-clj.zip :as z]
|
||
[babashka.fs :as fs]
|
||
[clojure.edn :as edn]))
|
||
|
||
(defn apply-overrides [zloc overrides]
|
||
(loop [os (seq overrides)
|
||
loc zloc]
|
||
(if-some [[[k v] & xs] os]
|
||
(do (binding [*out* *err*]
|
||
(printf "override dep %s with %s\n"
|
||
(pr-str k) (pr-str v)))
|
||
(recur xs (z/assoc loc k v)))
|
||
loc)))
|
||
|
||
(defn args->overrides [args]
|
||
(assert (even? (count args)))
|
||
(->> args (map edn/read-string) (apply hash-map)))
|
||
|
||
(defn -main [& args]
|
||
(let [zloc (-> (slurp *in*) z/of-string)
|
||
overrides (args->overrides args)]
|
||
(-> zloc
|
||
z/down
|
||
(z/find-value :deps) z/right
|
||
(apply-overrides overrides)
|
||
z/root-string
|
||
print)))
|
||
|
||
|
||
|
||
(comment
|
||
"Example overrides"
|
||
(def overrides '{net.deertopia/doerg "blah!!!!"
|
||
ring/ring-defaults {:mvn/version "xxxxx"}}))
|
||
|
||
(comment
|
||
"Behaviour of `args->overrides`."
|
||
(= (args->overrides ["net.deertopia/doerg" "{:mvn/version \"abc\"}"
|
||
"ring/ring-defaults" "{:local/root \"/path/to/jar\"}"])
|
||
'{ring/ring-defaults {:local/root "/path/to/jar"}
|
||
net.deertopia/doerg {:mvn/version "abc"}}))
|
||
|