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