Exemple #1
0
def on_created(installation: Installation, repository: Repository,
               pull_request: PullRequest):
    logger.info(
        f"Created pull request: {pull_request.remote_id} on {repository.full_name}"
    )
    # refresh files and commits

    refresh_commits(installation, repository, pull_request)
    rules.evaluate(repository, PR_CREATED, {"pull_request": pull_request})
Exemple #2
0
def on_source_change(installation: Installation, repository: Repository,
                     name: str, sha: str):
    for pull_request in (repository.pull_requests.filter(
            base_branch_name=name).filter(~Q(base_sha=sha)).all()
                         ):  # type: PullRequest
        logger.info(
            f"PR's base branch updated, updating pull request: {pull_request.remote_id} "
            f"on {repository.full_name}")
        rules.evaluate(repository, BASE_BRANCH_UPDATED,
                       {"pull_request": pull_request})
Exemple #3
0
def refresh(installation: Installation, repository: Repository):
    for pull_request in installation.client.get_pull_requests(repository):
        for context, state in installation.client.get_statuses(
                repository.identifier, pull_request.source_sha):
            status = PullRequestStatus.objects.create(
                pull_request=pull_request, context=context, state=state)
            rules.evaluate(repository, STATUS_UPDATED, {
                "pull_request": pull_request,
                "status": status
            })

        refresh_commits(installation, repository, pull_request)

        rules.evaluate(repository, PR_CREATED, {"pull_request": pull_request})
Exemple #4
0
def update_status(installation: Installation, repository: Repository,
                  context: str, state: CheckStatus, sha: str):
    for pr in repository.pull_requests.filter(
            source_sha=sha).all():  # type: PullRequest
        status = pr.statuses.filter(context=context).first()
        if status:
            dirty = dirty_set_all(status, dict(state=str(state)))
        else:
            status = PullRequestStatus.objects.create(pull_request=pr,
                                                      context=context,
                                                      state=state)
            dirty = True
        if dirty:
            logger.info(
                f"Updated check {status.context} to {status.state} for pull request: {pr.remote_id} "
                f"on {repository.full_name}")
            rules.evaluate(repository, STATUS_UPDATED, {
                "pull_request": pr,
                "status": status
            })
Exemple #5
0
def update_review(
    installation: Installation,
    repository: Repository,
    pull_request: PullRequest,
    reviewer: ExternalUser,
    state: ReviewState,
):
    review: PullRequestReviewer = pull_request.reviewers.filter(
        user=reviewer).first()
    if review:
        dirty = dirty_set_all(review, dict(state=state))
        if dirty:
            logger.info(
                f"Updated review {reviewer.remote_id} to {state} for pull request: {pull_request.remote_id} "
                f"on {repository.full_name}")
            rules.evaluate(repository, REVIEW_UPDATED, {
                "pull_request": pull_request,
                "reviewer": review
            })
    else:
        logger.error(
            f"Missing existing pr reviewer for user {reviewer.id} on pr {pull_request.id}"
        )