X-Git-Url: https://njoseph.me/gitweb/babashka-scripts.git/blobdiff_plain/ead73d37568631a52a3759179a8fde48939d4afa..57e618f2b43f69a280d1e73cb06cb470bec24e56:/git-pull-all diff --git a/git-pull-all b/git-pull-all new file mode 100755 index 0000000..6b0de16 --- /dev/null +++ b/git-pull-all @@ -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)))))