def get_commit_history()

in treeherder/push_health/compare.py [0:0]


def get_commit_history(repository, revision, push):
    from mozci.errors import ParentPushNotFound
    from mozci.push import Push as MozciPush

    mozci_push = MozciPush([revision], repository.name)
    parent = None
    parent_sha = None
    parent_repo = None
    parent_push = None

    try:
        parent = mozci_push.parent
    except ParentPushNotFound:
        pass

    if parent:
        parent_sha = parent.revs[-1]
        parents = Push.objects.filter(repository__name=parent.branch, revision=parent_sha)
        parent_repo = Repository.objects.get(name=parent.branch)
        parent_push = parents[0] if len(parents) else None

    resp = {
        "parentSha": parent_sha,
        "exactMatch": False,
        "parentPushRevision": None,
        "parentRepository": not parent_repo or RepositorySerializer(parent_repo).data,
        "id": None,
        "jobCounts": None,
        "revisions": [
            CommitSerializer(commit).data for commit in push.commits.all().order_by("-id")
        ],
        "revisionCount": push.commits.count(),
        "currentPush": PushSerializer(push).data,
    }
    if parent_push:
        resp.update(
            {
                # This will be the revision of the Parent, as long as we could find a Push in
                # Treeherder for it.
                "parentPushRevision": parent_push.revision,
                "id": parent_push.id,
                "jobCounts": parent_push.get_status(),
                "exactMatch": parent_sha == parent_push.revision,
            }
        )

    return resp