Skip to content

Commit

Permalink
SERVER-50595: Don't require evergreen.py for local lint runs
Browse files Browse the repository at this point in the history
  • Loading branch information
dbradf authored and Evergreen Agent committed Apr 23, 2021
1 parent 1852f29 commit 1b9f63c
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 43 deletions.
3 changes: 2 additions & 1 deletion buildscripts/evergreen_burn_in_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
from buildscripts.burn_in_tests import RepeatConfig, BurnInExecutor, TaskInfo, FileChangeDetector, \
DEFAULT_REPO_LOCATIONS, BurnInOrchestrator
from buildscripts.ciconfig.evergreen import parse_evergreen_file, EvergreenProjectConfig
from buildscripts.patch_builds.change_data import RevisionMap, generate_revision_map_from_manifest
from buildscripts.patch_builds.change_data import RevisionMap
from buildscripts.patch_builds.evg_change_data import generate_revision_map_from_manifest
from buildscripts.patch_builds.task_generation import TimeoutInfo, resmoke_commands, \
validate_task_generation_limit
from buildscripts.util.fileops import write_file
Expand Down
5 changes: 3 additions & 2 deletions buildscripts/linter/git.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@

import itertools
import os
from pathlib import Path
import re
from typing import Callable, List

from buildscripts.linter import git_base as _git
from buildscripts import moduleconfig
from buildscripts.resmokelib.utils import globstar

# Path to the modules in the mongodb source tree
# Has to match the string in SConstruct
Expand Down Expand Up @@ -147,7 +147,8 @@ def get_working_tree_candidates(self, filter_function):
def expand_file_string(glob_pattern):
# type: (str) -> List[str]
"""Expand a string that represents a set of files."""
return [os.path.abspath(f) for f in globstar.iglob(glob_pattern)]
current_path = Path(".")
return [str(glob_match.resolve()) for glob_match in current_path.glob(glob_pattern)]


def get_files_to_check_working_tree(filter_function):
Expand Down
21 changes: 0 additions & 21 deletions buildscripts/patch_builds/change_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

import structlog
from git import DiffIndex, Repo
from evergreen import EvergreenApi

LOGGER = structlog.get_logger(__name__)

Expand Down Expand Up @@ -36,26 +35,6 @@ def generate_revision_map(repos: List[Repo], revisions_data: Dict[str, str]) ->
return {k: v for k, v in revision_map.items() if v}


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
"""
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)


def _paths_for_iter(diff, iter_type):
"""
Get the set for all the files in the given diff for the specified type.
Expand Down
27 changes: 27 additions & 0 deletions buildscripts/patch_builds/evg_change_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
"""Tools for detecting changes inside of Evergreen."""
from typing import List

from git import Repo
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
"""
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)
4 changes: 2 additions & 2 deletions buildscripts/selected_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
from evergreen.api import EvergreenApi, RetryingEvergreenApi

# Get relative imports to work when the package is not installed on the PYTHONPATH.
from buildscripts.patch_builds.change_data import find_changed_files_in_repos, \
generate_revision_map_from_manifest
from buildscripts.patch_builds.change_data import find_changed_files_in_repos
from buildscripts.patch_builds.evg_change_data import generate_revision_map_from_manifest

if __name__ == "__main__" and __package__ is None:
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
Expand Down
17 changes: 0 additions & 17 deletions buildscripts/tests/patch_builds/test_change_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,20 +72,3 @@ def test_missing_repos_are_not_returned(self):

self.assertEqual(revision_map[mock_repo_list[0].git_dir], revision_data["mongo"])
self.assertEqual(len(revision_map), 1)


class TestGenerateRevisionMapFromManifest(unittest.TestCase):
def test_map_can_be_created_from_evergreen_api(self):
mock_repo_list = [create_mock_repo(os.getcwd()), create_mock_repo("/path/to/enterprise")]
mongo_revision = "revision1234"
enterprise_revision = "revision5678"
mock_manifest = MagicMock(revision=mongo_revision,
modules={"enterprise": MagicMock(revision=enterprise_revision)})
mock_evg_api = MagicMock()
mock_evg_api.manifest_for_task.return_value = mock_manifest

revision_map = under_test.generate_revision_map_from_manifest(mock_repo_list, "task_id",
mock_evg_api)

self.assertEqual(revision_map[mock_repo_list[0].git_dir], mongo_revision)
self.assertEqual(revision_map[mock_repo_list[1].git_dir], enterprise_revision)
32 changes: 32 additions & 0 deletions buildscripts/tests/patch_builds/test_evg_change_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
"""Unit tests for buildscripts.patch_builds.evg_change_data.py."""
from __future__ import absolute_import

import os
import unittest

from mock import MagicMock

import buildscripts.patch_builds.evg_change_data as under_test

# pylint: disable=missing-docstring


def create_mock_repo(working_dir=""):
return MagicMock(working_dir=working_dir)


class TestGenerateRevisionMapFromManifest(unittest.TestCase):
def test_map_can_be_created_from_evergreen_api(self):
mock_repo_list = [create_mock_repo(os.getcwd()), create_mock_repo("/path/to/enterprise")]
mongo_revision = "revision1234"
enterprise_revision = "revision5678"
mock_manifest = MagicMock(revision=mongo_revision,
modules={"enterprise": MagicMock(revision=enterprise_revision)})
mock_evg_api = MagicMock()
mock_evg_api.manifest_for_task.return_value = mock_manifest

revision_map = under_test.generate_revision_map_from_manifest(mock_repo_list, "task_id",
mock_evg_api)

self.assertEqual(revision_map[mock_repo_list[0].git_dir], mongo_revision)
self.assertEqual(revision_map[mock_repo_list[1].git_dir], enterprise_revision)

0 comments on commit 1b9f63c

Please sign in to comment.