in dev/merge_spark_pr.py [0:0]
def choose_jira_assignee(issue):
"""
Prompt the user to choose who to assign the issue to in jira, given a list of candidates,
including the original reporter and all commentators
"""
while True:
try:
reporter = issue.fields.reporter
commentators = list(map(lambda x: x.author, issue.fields.comment.comments))
candidates = set(commentators)
candidates.add(reporter)
candidates = list(candidates)
print("JIRA is unassigned, choose assignee")
for idx, author in enumerate(candidates):
if author.key == "apachespark":
continue
annotations = ["Reporter"] if author == reporter else []
if author in commentators:
annotations.append("Commentator")
print("[%d] %s (%s)" % (idx, author.displayName, ",".join(annotations)))
raw_assignee = bold_input(
"Enter number of user, or userid, to assign to (blank to leave unassigned):"
)
if raw_assignee == "":
return None
else:
try:
id = int(raw_assignee)
assignee = candidates[id]
except BaseException:
# assume it's a user id, and try to assign (might fail, we just prompt again)
assignee = asf_jira.user(raw_assignee)
try:
assign_issue(issue.key, assignee.name)
except Exception as e:
if (
e.__class__.__name__ == "JIRAError"
and ("'%s' cannot be assigned" % assignee.name)
in getattr(e, "response").text
):
continue_maybe(
"User '%s' cannot be assigned, add to contributors role and try again?"
% assignee.name
)
grant_contributor_role(assignee.name)
assign_issue(issue.key, assignee.name)
else:
raise e
return assignee
except KeyboardInterrupt:
raise
except BaseException:
traceback.print_exc()
print("Error assigning JIRA, try again (or leave blank and fix manually)")