Skip to content

Instantly share code, notes, and snippets.

@moly
Created September 10, 2012 19:30
Show Gist options
  • Save moly/3693233 to your computer and use it in GitHub Desktop.
Save moly/3693233 to your computer and use it in GitHub Desktop.
import urllib.request, urllib.error, urllib.parse
import json
import base64
#==== configurations =======
username = "username"
password = "password"
src_repo = "AdamAtomic/flixel"
dst_repo = "FlixelCommunity/flixel"
#==== end of configurations ===
server = "api.github.com"
src_url = "https://%s/repos/%s" % (server, src_repo)
dst_url = "https://%s/repos/%s" % (server, dst_repo)
def get_milestones(url):
response = urllib.request.urlopen("%s/milestones?state=open" % url)
result = response.read()
milestones = json.loads(result.decode("utf-8"))
return milestones
def get_labels(url):
response = urllib.request.urlopen("%s/labels" % url)
result = response.read()
labels = json.loads(result.decode("utf-8"))
return labels
def get_issues(url):
issues = []
i = 1
while True:
response = urllib.request.urlopen("%s/issues?state=open&page=%d" % (url, i))
result = response.read()
newIssues = json.loads(result.decode("utf-8"))
if not newIssues:
break
issues.extend(newIssues)
i += 1
return issues
def get_comments_on_issue(issue):
if "comments" in issue \
and issue["comments"] is not None \
and issue["comments"] != 0:
response = urllib.request.urlopen("%s/comments" % issue["url"])
result = response.read()
comments = json.loads(result.decode("utf-8"))
return comments
else :
return []
def import_milestones(milestones):
for source in milestones:
dest = json.dumps({
"title": source["title"],
"state": "open",
"description": source["description"],
"due_on": source["due_on"]})
req = urllib.request.Request("%s/milestones" % dst_url, dest)
req.add_header("Authorization", "Basic " + base64.urlsafe_b64encode("%s:%s" % (username, password)))
req.add_header("Content-Type", "application/json")
req.add_header("Accept", "application/json")
res = urllib.request.urlopen(req)
data = res.read()
res_milestone = json.loads(data.decode("utf-8"))
print("Successfully created milestone %s" % res_milestone["title"])
def import_labels(labels):
for source in labels:
dest = json.dumps({
"name": source["name"],
"color": source["color"]
})
req = urllib.request.Request("%s/labels" % dst_url, dest)
req.add_header("Authorization", "Basic " + base64.urlsafe_b64encode("%s:%s" % (username, password)))
req.add_header("Content-Type", "application/json")
req.add_header("Accept", "application/json")
res = urllib.request.urlopen(req)
data = res.read()
res_label = json.loads(data.decode("utf-8"))
print("Successfully created label %s" % res_label["name"])
def import_comments(comments, issue_number):
for comment in comments:
comment_creator = comment["user"]["login"]
comment["body"] = "Comment by: [%s](http://github.com/%s)\n\n%s" % (comment_creator, comment_creator, comment["body"])
req = urllib.request.Request("%s/issues/%s/comments" % (dst_url, issue_number), json.dumps(comment))
req.add_header("Authorization", b"Basic " + base64.urlsafe_b64encode(username.encode("utf-8") + b":" + password.encode("utf-8")))
req.add_header("Content-Type", "application/json")
req.add_header("Accept", "application/json")
urllib.request.urlopen(req)
def import_pull_requests(issue, issue_number):
if "pull_request" in issue and issue["pull_request"]["html_url"] is not None:
comment = json.dumps({"body": "%s added a commit: %s" % (issue["user"]["login"], issue["pull_request"]["html_url"])})
req = urllib.request.Request("%s/issues/%s/comments" % (dst_url, issue_number), comment)
req.add_header("Authorization", b"Basic " + base64.urlsafe_b64encode(username.encode("utf-8") + b":" + password.encode("utf-8")))
req.add_header("Content-Type", "application/json")
req.add_header("Accept", "application/json")
urllib.request.urlopen(req)
def import_issues(issues, dst_milestones, dst_labels):
for issue in issues:
issue_creator = issue["user"]["login"]
issue_url = issue["html_url"]
if "body" in issue and issue["body"] is not None:
issue["body"] = "Issue by: [%s](http://github.com/%s) - %s\n\n%s" % (issue_creator, issue_creator, issue_url, issue["body"])
req = urllib.request.Request("%s/issues" % dst_url, json.dumps(issue))
req.add_header("Authorization", b"Basic " + base64.urlsafe_b64encode(username.encode("utf-8") + b":" + password.encode("utf-8")))
req.add_header("Content-Type", "application/json")
req.add_header("Accept", "application/json")
res = urllib.request.urlopen(req)
data = res.read()
res_issue = json.loads(data.decode("utf-8"))
import_pull_requests(issue, res_issue["number"])
comments = get_comments_on_issue(issue)
import_comments(comments, res_issue["number"])
print("Successfully created issue %s" % res_issue["title"].encode("utf-8"))
def main():
#get milestones and issues to import
milestones = get_milestones(src_url)
labels = get_labels(src_url)
#do import
import_milestones(milestones)
import_labels(labels)
#get imported milestones and labels
milestones = get_milestones(dst_url)
labels = get_labels(dst_url)
#process issues
issues = get_issues(src_url)
import_issues(issues, milestones, labels)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment