1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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))
|