summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2012-02-26 05:13:37 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2012-02-26 05:13:37 +0100
commitd76c5561b9b13dee6bd9a8bfe0672938f15201eb (patch)
tree6891586a2da0d121f921894b612c51a1c66748f8
parentRemove origin if it already exists. (diff)
downloadGitTools-d76c5561b9b13dee6bd9a8bfe0672938f15201eb.tar.xz
GitTools-d76c5561b9b13dee6bd9a8bfe0672938f15201eb.zip
Add crufty github sync script.
-rwxr-xr-xsync-github.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/sync-github.py b/sync-github.py
new file mode 100755
index 0000000..8cb9c9f
--- /dev/null
+++ b/sync-github.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+import github2.client
+import sys
+import os.path
+
+class LocalRepo:
+ def __init__(self, name, description, homepage, path):
+ self.name = name
+ self.description = description
+ self.homepage = homepage
+ self.path = path
+ def __repr__(self):
+ return "%s @ %s: %s" % (self.name, self.homepage, self.description)
+
+def localRepos(repo_list, repo_base_dir, url_base, blacklist):
+ repo_names = open(repo_list, "r")
+ repos = []
+ for repo_name in repo_names:
+ repo_name = repo_name.rstrip()
+ repo_dir = os.path.join(repo_base_dir, repo_name)
+ description = os.path.join(repo_dir, "description")
+ if os.path.exists(description):
+ description = open(description, "r").read().strip()
+ else:
+ description = None
+ homepage = os.path.join(repo_dir, "homepage")
+ if os.path.exists(homepage):
+ homepage = open(homepage, "r").read().strip()
+ else:
+ homepage = url_base + repo_name[:-4]
+ repo = LocalRepo(repo_name[:-4], description, homepage, repo_dir)
+ if repo.name not in blacklist:
+ repos.append(repo)
+ return repos
+
+def main(argv):
+ if len(sys.argv) < 6:
+ return 1
+ user = argv[1]
+ token = argv[2]
+ repo_list = argv[3]
+ repo_dir_base = argv[4]
+ url_base = argv[5]
+
+ github = github2.client.Github(username=user, api_token=token, requests_per_second=1)
+
+ print "[#] Collecting local repositories."
+ local_repos = localRepos(repo_list, repo_dir_base, url_base, argv[6:])
+
+ print "[#] Collecting remote repositories."
+ remote_repos = github.repos.list()
+
+ for repo in local_repos:
+ if repo.name not in [remote.name for remote in remote_repos]:
+ print "[+] Adding repository %s." % repo.name
+ github.repos.create(repo.name, repo.description, repo.homepage, public=True)
+
+ for repo in remote_repos:
+ if repo.name not in [local.name for local in local_repos]:
+ print "[-] Deleting repository %s." % repo.name
+ github.repos.delete(repo.name)
+
+ for repo in local_repos:
+ print "[^] Mirroring repository %s." % repo.name
+ os.system("cd \"%s\"; git push --mirror git@github.com:%s/%s.git" % (repo.path, user, repo.name))
+
+ return 0
+
+if __name__ == "__main__":
+ sys.exit(main(sys.argv))