Skip to content

Instantly share code, notes, and snippets.

@wilkes
Created April 26, 2010 19:34
Show Gist options
  • Save wilkes/379774 to your computer and use it in GitHub Desktop.
Save wilkes/379774 to your computer and use it in GitHub Desktop.
(ns backup-user
(:use github-clj
[clojure.contrib.pprint :only [pprint]]
[clojure.contrib.shell-out :only [sh]])
(:import [java.io File]))
(defn clone-repo [repo dir]
(sh "git" "clone"
(format "[email protected]:%s/%s.git"
(:owner repo) (:name repo))
:return-map true
:dir dir))
(defn pull-repo [repo dir]
(sh "git" "pull" "--rebase"
:dir (File. dir (:name repo))
:return-map true))
(defn sync-repo [repo dir]
(if (.exists (File. dir (:name repo)))
(pull-repo repo dir)
(clone-repo repo dir)))
(defn backup-repos
"Clone or pull and rebase all the repositories of a user (defaults to *login*)
to the given directory"
([dir]
(backup-repos (login) dir))
([user dir]
(doseq [repo (list-all-repos user)
:let [result (sync-repo repo dir)]]
(print "Syncing" (:name repo) "... ")
(print (if (= 0 (:exit result))
(:out result)
(:err result))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment