def handle_pending_github_updates(logger, dbconn): """Attempt to post updates to github""" gh = github.connect() if not gh: return cursor = dbconn.cursor() query = """ select id,ghuser,repo,pullrequest,destination,landed,result,pingback_url from MozreviewPullRequest where landed is not NULL and pullrequest_updated is NULL limit %(limit)s """ cursor.execute(query, {'limit': GITHUB_COMMENT_LIMIT}) updated = [] for row in cursor.fetchall(): ghuser = row[1] repo = row[2] pullrequest = row[3] landed = row[5] result = row[6] pingback_url = row[7] if landed: message = 'Your new review request is available at: %s' % result else: message = 'Something went wrong importing to mozreview: %s' % result logger.info('attempting to add comment to pullrequest for request: %s' % row[0]) worked = github.add_issue_comment(gh, ghuser, repo, pullrequest, message) if worked: updated.append([row[0]]) else: logger.info('commenting on pull request failed') if updated: query = """ update MozreviewPullRequest set pullrequest_updated=TRUE where id=%s """ cursor.executemany(query, updated) dbconn.commit()
def handle_pending_mozreview_pullrequests(logger, dbconn): gh = github.connect() if not gh: return bzurl = config.get('bugzilla')['url'] cursor = dbconn.cursor() query = """ select id,ghuser,repo,pullrequest,destination,bzuserid,bzcookie,bugid, pingback_url from MozreviewPullRequest where landed is null """ cursor.execute(query) finished_revisions = [] mozreview_updates = [] for row in cursor.fetchall(): (transplant_id, ghuser, repo, pullrequest, destination, bzuserid, bzcookie, bugid, pingback_url) = row logger.info('attempting to import pullrequest: %s' % transplant_id) # see if we can extract the bug from the commit message if bugid is None: title, body = github.retrieve_issue(gh, ghuser, repo, pullrequest) bugs = parse_bugs(title) if bugs: bugid = bugs[0] logger.info('using bug %s from issue title' % bugid) finished_revisions.append([bugid, None, None, transplant_id]) # still no luck, attempt to autofile a bug on the user's behalf if bugid is None: logger.info('attempting to autofile bug for: %s' % transplant_id) b = bugsy.Bugsy(userid=bzuserid, cookie=bzcookie, bugzilla_url=bzurl) if not b: logger.info('could not connect to bugzilla instance at %s for ' 'pullrequest id %s' % (bzurl, transplant_id)) error = 'could not connect to bugzilla. bad credentials?' else: bug = bugsy.Bug() # Summary is required, the rest have defaults or are optional bug.summary = title if config.testing(): bug.product = 'TestProduct' bug.component = 'TestComponent' else: # TODO: determine a better product & component than the # defaults provided by Bugsy pass pr_url = github.url_for_pullrequest(ghuser,repo, pullrequest) bug.add_comment('%s\n\nImported from: %s' % (body, pr_url)) try: b.put(bug) bugid = bug.id logger.info('created bug: %s ' % bugid) finished_revisions.append([bugid, None, None, transplant_id]) except bugsy.BugsyException as e: logger.info('transplant failed: could not create new bug: %s ' % e.msg) finished_revisions.append([None, False, e.msg, transplant_id]) # set up data to be posted back to mozreview data = { 'request_id': transplant_id, 'bugid': None, 'landed': False, 'error_msg': 'could not create new bug: ' + e.msg, 'result': '' } mozreview_updates.append([transplant_id, pingback_url, json.dumps(data)]) landed, result = transplant.transplant_to_mozreview(gh, destination, ghuser, repo, pullrequest, bzuserid, bzcookie, bugid) if landed: logger.info(('transplanted from' ' https://github.com/%s/%s/pull/%s' ' to destination: %s new revision: %s') % (ghuser, repo, pullrequest, destination, result)) else: logger.info(('transplant failed' ' https://github.com/%s/%s/pull/%s' ' destination: %s error: %s') % (ghuser, repo, pullrequest, destination, result)) finished_revisions.append([bugid, landed, result, transplant_id]) # set up data to be posted back to mozreview data = { 'request_id': transplant_id, 'bugid': bugid, 'landed': landed, 'error_msg': '', 'result': '' } if landed: data['result'] = result else: data['error_msg'] = result mozreview_updates.append([transplant_id, pingback_url, json.dumps(data)]) if finished_revisions: query = """ update MozreviewPullRequest set bugid=%s,landed=%s,result=%s where id=%s """ cursor.executemany(query, finished_revisions) dbconn.commit() if mozreview_updates: query = """ insert into MozreviewUpdate(request_id,pingback_url,data) values(%s,%s,%s) """ cursor.executemany(query, mozreview_updates) dbconn.commit()