aboutsummaryrefslogtreecommitdiff
path: root/dev/github_jira_sync.py
diff options
context:
space:
mode:
Diffstat (limited to 'dev/github_jira_sync.py')
-rwxr-xr-xdev/github_jira_sync.py86
1 files changed, 46 insertions, 40 deletions
diff --git a/dev/github_jira_sync.py b/dev/github_jira_sync.py
index 287f0ca24a..acc9aeabbb 100755
--- a/dev/github_jira_sync.py
+++ b/dev/github_jira_sync.py
@@ -27,8 +27,8 @@ import urllib2
try:
import jira.client
except ImportError:
- print "This tool requires the jira-python library"
- print "Install using 'sudo pip install jira'"
+ print("This tool requires the jira-python library")
+ print("Install using 'sudo pip install jira'")
sys.exit(-1)
# User facing configs
@@ -48,16 +48,19 @@ MIN_COMMENT_PR = int(os.environ.get("MIN_COMMENT_PR", "1496"))
# the state of JIRA's that are tied to PR's we've already looked at.
MAX_FILE = ".github-jira-max"
+
def get_url(url):
try:
return urllib2.urlopen(url)
- except urllib2.HTTPError as e:
- print "Unable to fetch URL, exiting: %s" % url
+ except urllib2.HTTPError:
+ print("Unable to fetch URL, exiting: %s" % url)
sys.exit(-1)
+
def get_json(urllib_response):
return json.load(urllib_response)
+
# Return a list of (JIRA id, JSON dict) tuples:
# e.g. [('SPARK-1234', {.. json ..}), ('SPARK-5687', {.. json ..})}
def get_jira_prs():
@@ -65,83 +68,86 @@ def get_jira_prs():
has_next_page = True
page_num = 0
while has_next_page:
- page = get_url(GITHUB_API_BASE + "/pulls?page=%s&per_page=100" % page_num)
- page_json = get_json(page)
-
- for pull in page_json:
- jiras = re.findall(JIRA_PROJECT_NAME + "-[0-9]{4,5}", pull['title'])
- for jira in jiras:
- result = result + [(jira, pull)]
-
- # Check if there is another page
- link_header = filter(lambda k: k.startswith("Link"), page.info().headers)[0]
- if not "next"in link_header:
- has_next_page = False
- else:
- page_num = page_num + 1
+ page = get_url(GITHUB_API_BASE + "/pulls?page=%s&per_page=100" % page_num)
+ page_json = get_json(page)
+
+ for pull in page_json:
+ jiras = re.findall(JIRA_PROJECT_NAME + "-[0-9]{4,5}", pull['title'])
+ for jira in jiras:
+ result = result + [(jira, pull)]
+
+ # Check if there is another page
+ link_header = filter(lambda k: k.startswith("Link"), page.info().headers)[0]
+ if "next" not in link_header:
+ has_next_page = False
+ else:
+ page_num += 1
return result
+
def set_max_pr(max_val):
f = open(MAX_FILE, 'w')
f.write("%s" % max_val)
f.close()
- print "Writing largest PR number seen: %s" % max_val
+ print("Writing largest PR number seen: %s" % max_val)
+
def get_max_pr():
if os.path.exists(MAX_FILE):
result = int(open(MAX_FILE, 'r').read())
- print "Read largest PR number previously seen: %s" % result
+ print("Read largest PR number previously seen: %s" % result)
return result
else:
return 0
+
jira_client = jira.client.JIRA({'server': JIRA_API_BASE},
- basic_auth=(JIRA_USERNAME, JIRA_PASSWORD))
+ basic_auth=(JIRA_USERNAME, JIRA_PASSWORD))
jira_prs = get_jira_prs()
previous_max = get_max_pr()
-print "Retrieved %s JIRA PR's from Github" % len(jira_prs)
+print("Retrieved %s JIRA PR's from Github" % len(jira_prs))
jira_prs = [(k, v) for k, v in jira_prs if int(v['number']) > previous_max]
-print "%s PR's remain after excluding visted ones" % len(jira_prs)
+print("%s PR's remain after excluding visted ones" % len(jira_prs))
num_updates = 0
considered = []
-for issue, pr in sorted(jira_prs, key=lambda (k, v): int(v['number'])):
+for issue, pr in sorted(jira_prs, key=lambda kv: int(kv[1]['number'])):
if num_updates >= MAX_UPDATES:
- break
+ break
pr_num = int(pr['number'])
- print "Checking issue %s" % issue
+ print("Checking issue %s" % issue)
considered = considered + [pr_num]
url = pr['html_url']
- title = "[Github] Pull Request #%s (%s)" % (pr['number'], pr['user']['login'])
+ title = "[Github] Pull Request #%s (%s)" % (pr['number'], pr['user']['login'])
try:
- existing_links = map(lambda l: l.raw['object']['url'], jira_client.remote_links(issue))
+ existing_links = map(lambda l: l.raw['object']['url'], jira_client.remote_links(issue))
except:
- print "Failure reading JIRA %s (does it exist?)" % issue
- print sys.exc_info()[0]
- continue
+ print("Failure reading JIRA %s (does it exist?)" % issue)
+ print(sys.exc_info()[0])
+ continue
if url in existing_links:
continue
- icon = {"title": "Pull request #%s" % pr['number'],
- "url16x16": "https://assets-cdn.github.com/favicon.ico"}
+ icon = {"title": "Pull request #%s" % pr['number'],
+ "url16x16": "https://assets-cdn.github.com/favicon.ico"}
destination = {"title": title, "url": url, "icon": icon}
# For all possible fields see:
- # https://developer.atlassian.com/display/JIRADEV/Fields+in+Remote+Issue+Links
- # application = {"name": "Github pull requests", "type": "org.apache.spark.jira.github"}
+ # https://developer.atlassian.com/display/JIRADEV/Fields+in+Remote+Issue+Links
+ # application = {"name": "Github pull requests", "type": "org.apache.spark.jira.github"}
jira_client.add_remote_link(issue, destination)
-
+
comment = "User '%s' has created a pull request for this issue:" % pr['user']['login']
- comment = comment + ("\n%s" % pr['html_url'])
+ comment += "\n%s" % pr['html_url']
if pr_num >= MIN_COMMENT_PR:
jira_client.add_comment(issue, comment)
-
- print "Added link %s <-> PR #%s" % (issue, pr['number'])
- num_updates = num_updates + 1
+
+ print("Added link %s <-> PR #%s" % (issue, pr['number']))
+ num_updates += 1
if len(considered) > 0:
set_max_pr(max(considered))