Initial upload: git-insights-cli with CI/CD workflow
This commit is contained in:
104
src/models/data_structures.py
Normal file
104
src/models/data_structures.py
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
from dataclasses import dataclass, field
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
|
from dataclasses_json import dataclass_json
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass_json
|
||||||
|
@dataclass
|
||||||
|
class Author:
|
||||||
|
"""Represents a git author."""
|
||||||
|
name: str
|
||||||
|
email: str
|
||||||
|
commit_count: int = 0
|
||||||
|
lines_added: int = 0
|
||||||
|
lines_deleted: int = 0
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass_json
|
||||||
|
@dataclass
|
||||||
|
class Commit:
|
||||||
|
"""Represents a git commit."""
|
||||||
|
sha: str
|
||||||
|
message: str
|
||||||
|
author: str
|
||||||
|
author_email: str
|
||||||
|
timestamp: datetime
|
||||||
|
lines_added: int = 0
|
||||||
|
lines_deleted: int = 0
|
||||||
|
files_changed: List[str] = field(default_factory=list)
|
||||||
|
is_merge: bool = False
|
||||||
|
is_revert: bool = False
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass_json
|
||||||
|
@dataclass
|
||||||
|
class FileChange:
|
||||||
|
"""Represents changes to a file in a commit."""
|
||||||
|
filepath: str
|
||||||
|
lines_added: int
|
||||||
|
lines_deleted: int
|
||||||
|
change_type: str
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass_json
|
||||||
|
@dataclass
|
||||||
|
class CommitAnalysis:
|
||||||
|
"""Analysis of commit patterns."""
|
||||||
|
total_commits: int
|
||||||
|
unique_authors: int
|
||||||
|
commits_by_hour: dict
|
||||||
|
commits_by_day: dict
|
||||||
|
commits_by_week: dict
|
||||||
|
top_authors: List[Author]
|
||||||
|
average_commits_per_day: float
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass_json
|
||||||
|
@dataclass
|
||||||
|
class CodeChurnAnalysis:
|
||||||
|
"""Analysis of code churn."""
|
||||||
|
total_lines_added: int
|
||||||
|
total_lines_deleted: int
|
||||||
|
net_change: int
|
||||||
|
churn_by_file: dict
|
||||||
|
churn_by_author: dict
|
||||||
|
high_churn_commits: List[Commit]
|
||||||
|
average_churn_per_commit: float
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass_json
|
||||||
|
@dataclass
|
||||||
|
class RiskyCommitAnalysis:
|
||||||
|
"""Analysis of risky commits."""
|
||||||
|
total_risky_commits: int
|
||||||
|
large_change_commits: List[Commit]
|
||||||
|
merge_commits: List[Commit]
|
||||||
|
revert_commits: List[Commit]
|
||||||
|
risk_score: float
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass_json
|
||||||
|
@dataclass
|
||||||
|
class VelocityAnalysis:
|
||||||
|
"""Analysis of team velocity."""
|
||||||
|
commits_per_day: float
|
||||||
|
commits_per_week: float
|
||||||
|
commits_per_month: float
|
||||||
|
velocity_trend: str
|
||||||
|
top_contributors: List[Author]
|
||||||
|
most_active_day: str
|
||||||
|
most_active_hour: str
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass_json
|
||||||
|
@dataclass
|
||||||
|
class ProductivityReport:
|
||||||
|
"""Comprehensive productivity report."""
|
||||||
|
repository_path: str
|
||||||
|
analysis_days: int
|
||||||
|
commit_analysis: Optional[CommitAnalysis]
|
||||||
|
code_churn_analysis: Optional[CodeChurnAnalysis]
|
||||||
|
risky_commit_analysis: Optional[RiskyCommitAnalysis]
|
||||||
|
velocity_analysis: Optional[VelocityAnalysis]
|
||||||
Reference in New Issue
Block a user