from typing import List from src.analyzers.git_repository import GitRepository from src.models import RiskyCommitAnalysis class RiskyCommitDetector: """Detect risky and potentially problematic commits.""" def __init__( self, repo: GitRepository, days: int = 30, large_commit_threshold: int = 500, ) -> None: """Initialize RiskyCommitDetector.""" self.repo = repo self.days = days self.large_commit_threshold = large_commit_threshold def analyze(self) -> RiskyCommitAnalysis: """Detect risky commits.""" commits = self.repo.get_commits(since_days=self.days) if not commits: return RiskyCommitAnalysis() large_commits = [] merge_commits = [] revert_commits = [] for commit in commits: if commit.lines_changed_count >= self.large_commit_threshold: large_commits.append(commit) if commit.is_merge: merge_commits.append(commit) if "revert" in commit.message.lower(): revert_commits.append(commit) return RiskyCommitAnalysis( large_commits=large_commits[:20], merge_commits=merge_commits[:20], revert_commits=revert_commits[:20], total_risky=len(large_commits) + len(merge_commits) + len(revert_commits), )