in scripts/testing_policy_stats.py [0:0]
def go(self, days_start: int, days_end: int) -> None:
commits = self.get_landed_since(days_start, days_end)
logger.info("Retrieve Phabricator revisions linked to commits...")
revision_ids = set(
filter(None, (repository.get_revision_id(commit) for commit in commits))
)
logger.info("Download revisions of interest...")
phabricator.download_revisions(revision_ids)
revision_map = {
revision["id"]: revision
for revision in phabricator.get_revisions()
if revision["id"] in revision_ids
}
logger.info("Download bugs of interest...")
bugzilla.download_bugs(
commit["bug_id"] for commit in commits if commit["bug_id"]
)
# Filter-out commits with no Phabricator revision linked to them, or with no testing tags.
commits = [
commit
for commit in commits
if repository.get_revision_id(commit) in revision_map
]
logger.info("%d revisions", len(commits))
# Filter-out commits with no testing tags.
commits = [
commit
for commit in commits
if phabricator.get_testing_project(
revision_map[repository.get_revision_id(commit)]
)
is not None
]
logger.info("%d revisions with testing tags", len(commits))
def list_testing_projects(
commits: Iterable[repository.CommitDict],
) -> Collection[str]:
return list(
filter(
None,
(
phabricator.get_testing_project(
revision_map[repository.get_revision_id(commit)]
)
for commit in commits
),
)
)
testing_projects = list_testing_projects(commits)
print(f"Most common testing tags (in {len(commits)} revisions):")
for testing_project, count in collections.Counter(
testing_projects
).most_common():
print(
f"{testing_project} - {round(100 * count / len(testing_projects), 1)}%"
)
backedout_commits = [commit for commit in commits if commit["backedoutby"]]
backedout_testing_projects = list_testing_projects(backedout_commits)
print(
f"\nMost common testing tags for backed-out revisions (in {len(backedout_commits)} revisions):"
)
for testing_project, count in collections.Counter(
backedout_testing_projects
).most_common():
print(
f"{testing_project} - {round(100 * count / len(backedout_testing_projects), 1)}%"
)
regressor_bug_ids = {
bug["id"] for bug in bugzilla.get_bugs() if len(bug["regressions"]) > 0
}
regressor_commits = [
commit for commit in commits if commit["bug_id"] in regressor_bug_ids
]
regressor_testing_projects = list_testing_projects(regressor_commits)
print(
f"\nMost common testing tags for revisions which caused regressions (in {len(regressor_commits)} revisions):"
)
for testing_project, count in collections.Counter(
regressor_testing_projects
).most_common():
print(
f"{testing_project} - {round(100 * count / len(regressor_testing_projects), 1)}%"
)