1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
from __future__ import annotations
import re
from typing import Any
from tools.testing.target_determination.heuristics.interface import (
HeuristicInterface,
TestPrioritizations,
)
from tools.testing.target_determination.heuristics.utils import (
get_git_commit_info,
get_issue_or_pr_body,
get_pr_number,
)
from tools.testing.test_run import TestRun
# This heuristic searches the PR body and commit titles, as well as issues/PRs
# mentioned in the PR body/commit title for test names (search depth of 1) and
# gives the test a rating of 1. For example, if I mention "test_foo" in the PR
# body, test_foo will be rated 1. If I mention #123 in the PR body, and #123
# mentions "test_foo", test_foo will be rated 1.
class MentionedInPR(HeuristicInterface):
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
def _search_for_linked_issues(self, s: str) -> list[str]:
return re.findall(r"#(\d+)", s) + re.findall(r"/pytorch/pytorch/.*/(\d+)", s)
def get_prediction_confidence(self, tests: list[str]) -> TestPrioritizations:
try:
commit_messages = get_git_commit_info()
except Exception as e:
print(f"Can't get commit info due to {e}")
commit_messages = ""
try:
pr_number = get_pr_number()
if pr_number is not None:
pr_body = get_issue_or_pr_body(pr_number)
else:
pr_body = ""
except Exception as e:
print(f"Can't get PR body due to {e}")
pr_body = ""
# Search for linked issues or PRs
linked_issue_bodies: list[str] = []
for issue in self._search_for_linked_issues(
commit_messages
) + self._search_for_linked_issues(pr_body):
try:
linked_issue_bodies.append(get_issue_or_pr_body(int(issue)))
except Exception:
pass
mentioned = []
for test in tests:
if (
test in commit_messages
or test in pr_body
or any(test in body for body in linked_issue_bodies)
):
mentioned.append(test)
return TestPrioritizations(tests, {TestRun(test): 1 for test in mentioned})
|