]> njoseph.me Git - babashka-scripts.git/blobdiff - git-pull-all
Remove .clj suffix for scripts
[babashka-scripts.git] / git-pull-all
diff --git a/git-pull-all b/git-pull-all
new file mode 100755 (executable)
index 0000000..6b0de16
--- /dev/null
@@ -0,0 +1,30 @@
+#! /usr/bin/env bb
+; -*- mode: clojure -*-
+
+; Runs `git pull` on all the git repositories in a directory
+
+(require '[babashka.process :as p] '[clojure.java.io :as io])
+
+(def default-root ".")
+
+(defn list-dirs [root] (filter #(.isDirectory %) (.listFiles (io/file root))))
+
+(defn git-pull [dir] (p/process ["git" "-C" dir "pull" "--rebase"]))
+
+(when (= *file* (System/getProperty "babashka.file"))
+  (let [root (get (into [] *command-line-args*) 0 default-root)
+        dirs (list-dirs root)
+        pulls (->> root
+                   list-dirs
+                   (map git-pull)
+                   doall)
+        outputs (map #(->> %
+                           p/check
+                           :out
+                           slurp)
+                  pulls)]
+    ;; Print corresponding directory name when pulling
+    ;; Skip printing already up to date repos
+    (doseq [[dir out] (filter #(not (.contains (second %) "is up to date."))
+                        (map vector dirs outputs))]
+      (println (str dir "\n" out)))))