mirror of https://github.com/mongodb/mongo
40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
"""Tools for detecting changes inside of Evergreen."""
|
|
from typing import List
|
|
|
|
from git import Repo
|
|
from requests import HTTPError
|
|
import yaml
|
|
|
|
from evergreen import EvergreenApi
|
|
|
|
from buildscripts.patch_builds.change_data import RevisionMap, generate_revision_map
|
|
|
|
|
|
def generate_revision_map_from_manifest(repos: List[Repo], task_id: str,
|
|
evg_api: EvergreenApi) -> RevisionMap:
|
|
"""
|
|
Generate a revision map for the given repositories using the revisions from the manifest.
|
|
|
|
:param repos: Repositories to generate map for.
|
|
:param task_id: Id of evergreen task running.
|
|
:param evg_api: Evergreen API object.
|
|
:return: Map of repositories to revisions
|
|
"""
|
|
try:
|
|
manifest = evg_api.manifest_for_task(task_id)
|
|
revisions_data = {
|
|
module_name: module.revision
|
|
for module_name, module in manifest.modules.items()
|
|
}
|
|
revisions_data["mongo"] = manifest.revision
|
|
return generate_revision_map(repos, revisions_data)
|
|
except HTTPError as err:
|
|
# Manifest unavailable from Evergreen? Just make a fake one:
|
|
if err.response.status_code == 404:
|
|
with open("../expansions.yml") as file_handle:
|
|
return generate_revision_map(repos,
|
|
{"mongo": yaml.safe_load(file_handle)["revision"]})
|
|
# Some other Evergreen error? Raise it up the stack!
|
|
else:
|
|
raise err
|