diff --git a/Core/Commands/Get-Stats/Get-Stats.Cmd.ps1 b/Core/Commands/Get-Stats/Get-Stats.Cmd.ps1 new file mode 100644 index 0000000..188ba10 --- /dev/null +++ b/Core/Commands/Get-Stats/Get-Stats.Cmd.ps1 @@ -0,0 +1,29 @@ +function Get-Stats { + param( + [int]$Top = 10 + ) + + $gitLogOutput = git log --numstat --pretty=format: + + $stats = $gitLogOutput | ForEach-Object { + if ($_ -match '^(?\d+)\s+(?\d+)\s+(?.+)$') { + [PSCustomObject]@{ + Filename = $Matches['filename'] + Additions = [int]$Matches['additions'] + Deletions = [int]$Matches['deletions'] + } + } + } + + $groupedStats = $stats | Group-Object Filename | ForEach-Object { + [PSCustomObject]@{ + Filename = $_.Name + TotalAdditions = ($_.Group | Measure-Object -Property Additions -Sum).Sum + TotalDeletions = ($_.Group | Measure-Object -Property Deletions -Sum).Sum + } + } + + $sortedStats = $groupedStats | Sort-Object TotalAdditions, TotalDeletions -Descending + + $sortedStats | Select-Object -First $Top +}