; Utilities for git operations
-(def default-root ".")
-
(defn- has-git-repo
[dir]
(first (filter #(= ".git" %)
(filter #(has-git-repo %)
(filter #(.isDirectory %) (.listFiles (io/file root)))))
-(defn- git-pull [dir]
+(defn- git-pull
+ "Do a git pull with rebase."
+ [dir]
(p/process ["git" "-C" dir "pull" "--rebase"]))
(defn git-pull-all
- "Runs `git-pull` on all the git repositories in a directory"
+ "Runs `git-pull` on all the git repositories in a directory."
[root]
(let [dirs (list-dirs root)
pulls (->> root
p/check
:out
slurp)
- pulls)]
+ 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))]
+ (map vector dirs outputs))]
(println (str dir "\n" out)))))
(defn git-pull-rebase-branch
- "Do git pull and rebase branch with master"
+ "Do git pull and rebase branch with master."
[dir]
+ (git-pull dir)
(let [current-branch (str/trim (run-cmd ["git" "branch" "--show-current"]))]
- (git-pull dir)
(when (not (contains? #{"master" "main"} current-branch))
(run! print
(map run-cmd
- '[["git" "checkout" "master"]
- ["git" "pull" "--rebase"]
- ["git" "checkout" current-branch]
- ["git" "rebase" "master"]])))))
+ [["git" "checkout" "master"] ["git" "pull" "--rebase"]
+ ["git" "checkout" current-branch] ["git" "rebase" "master"]])))))