;;; -*- 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] (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"}}))