From 9b37df283b2831d056ee9e99f2455ed579cf33b5 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Sun, 1 Feb 2026 08:19:58 +0000 Subject: [PATCH] fix: add analyzer modules --- src/analyzers/risky_commit.py | 52 ++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/src/analyzers/risky_commit.py b/src/analyzers/risky_commit.py index b374906..5b59ea3 100644 --- a/src/analyzers/risky_commit.py +++ b/src/analyzers/risky_commit.py @@ -1,47 +1,49 @@ -from typing import List +from dataclasses import dataclass +from typing import Optional from src.analyzers.git_repository import GitRepository -from src.models import RiskyCommitAnalysis +from src.models.data_structures import RiskyCommitAnalysis +@dataclass class RiskyCommitDetector: - """Detect risky and potentially problematic commits.""" + """Detects risky 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 + repo: GitRepository + days: int - def analyze(self) -> RiskyCommitAnalysis: + def analyze(self) -> Optional[RiskyCommitAnalysis]: """Detect risky commits.""" - commits = self.repo.get_commits(since_days=self.days) + commits = self.repo.get_commits() if not commits: - return RiskyCommitAnalysis() + return None - large_commits = [] + large_change_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: + if commit.is_revert: + revert_commits.append(commit) + elif commit.is_merge: merge_commits.append(commit) - if "revert" in commit.message.lower(): - revert_commits.append(commit) + threshold = 500 + if commit.lines_added + commit.lines_deleted > threshold: + large_change_commits.append(commit) + + total_risky = len(large_change_commits) + len(merge_commits) + len(revert_commits) + risk_score = total_risky / max(1, len(commits)) * 100 return RiskyCommitAnalysis( - large_commits=large_commits[:20], + total_risky_commits=total_risky, + large_change_commits=sorted( + large_change_commits, + key=lambda c: c.lines_added + c.lines_deleted, + reverse=True, + )[:20], merge_commits=merge_commits[:20], revert_commits=revert_commits[:20], - total_risky=len(large_commits) + len(merge_commits) + len(revert_commits), + risk_score=risk_score, )