Last active
April 22, 2021 19:37
-
-
Save itpropro/55e2b716262ceafb90825a19faf35261 to your computer and use it in GitHub Desktop.
PowerShell cmdlet for analyzing Microsoft Azure Docs Git additions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<#PSScriptInfo | |
.GUID 0c6df4be-ff4b-481f-a7eb-31637849e580 | |
.VERSION 1.0 | |
.AUTHOR Jan-Henrik Damaschke | |
.COMPANYNAME Visorian GmbH | |
#> | |
<# | |
.SYNOPSIS | |
This cmdlet helps with analyzing Git changes to the Microsoft Azure Docs | |
repository (https://github.com/MicrosoftDocs/azure-docs). It is based on | |
Git diff and though needs git to be installed. | |
.DESCRIPTION | |
This cmdlet helps with analyzing Git changes to the Microsoft Azure Docs | |
repository by using Git diff. You can use it for automation or just for | |
checking which articles had major changes to stay up-to-date with Azure | |
documentation. | |
.EXAMPLE | |
PS C:\> Get-MsDocsAdditions | ft | |
Get changes from the most current commit | |
.EXAMPLE | |
PS C:\> Get-MsDocsAdditions -commitOffset 50 -additionThreshold 200 | ft | |
Get the additions from the last 50 commits with a delta of at least 200 | |
between additions and deletions. | |
.EXAMPLE | |
PS C:\> Get-MsDocsAdditions -commitOffset 50 -additionThreshold 200 | select -First 1 | |
Get the additions from the last 50 commits with a delta of at least 200 | |
between additions and deletions and show the details for the first entry. | |
.EXAMPLE | |
PS C:\> Get-MsDocsAdditions -commitOffset 50 -additionThreshold 200 | Where-Object Product -like "active-directory*" | ft | |
Get the additions from the last 50 commits with a delta of at least 200 | |
between additions and deletions where product starts with "active-directory". | |
.LINK | |
https://github.com/MicrosoftDocs/azure-docs | |
.LINK | |
https://gist.github.com/itpropro/55e2b716262ceafb90825a19faf35261 | |
.Parameter commitOffset | |
How many past commits should be analyzed | |
.Parameter additionThreshold | |
Only show commits with the given delta of Git additions and deletions. | |
200 additions and 200 deletions would lead to an offset of 0. | |
.Parameter excludeFileOperation | |
Default $true. Exclude operations like a file move (represented with => in the Git diff) | |
#> | |
param ( | |
$commitOffset = 1, | |
$additionThreshold, | |
$excludeFileOperation = $true | |
) | |
try { $null = git } catch { Write-Output 'Please install Git or add the Git binary to your PATH'; break } | |
$commits = git diff HEAD HEAD~$commitOffset --numstat | ConvertFrom-Csv -Header 'Additions', 'Deletions', 'File' -Delimiter "`t" | |
$commits = $commits | Where-Object { $_.File -like 'articles*' } | |
if ($excludeFileOperation) { | |
$commits = $commits | Where-Object { ($_.Additions -ne '-') -and ($_.Deletions -ne '-') } | |
$commits | ForEach-Object { | |
$_.Additions = [int]$_.Additions | |
$_.Deletions = [int]$_.Deletions | |
} | |
} | |
else { | |
$commits | ForEach-Object { | |
$_.Additions = [int]$_.Additions.replace('-', '0') | |
$_.Deletions = [int]$_.Deletions.replace('-', '0') | |
} | |
} | |
if ($additionThreshold) { | |
$commits = $commits | Where-Object { | |
($_.Additions - $_.Deletions) -gt $additionThreshold | |
} | |
} | |
foreach ($commit in $commits) { | |
Add-Member -InputObject $commit -Type NoteProperty -Name 'Name' -Value ($commit.file.split("/")[-1].split('.md')[0]) | |
Add-Member -InputObject $commit -Type NoteProperty -Name 'Product' -Value ($commit.file.split("/")[1]) | |
Add-Member -InputObject $commit -Type NoteProperty -Name 'Blame' -Value ('https://github.com/MicrosoftDocs/azure-docs/blame/master/{0}' -f $commit.file) | |
Add-Member -InputObject $commit -Type NoteProperty -Name 'History' -Value ('https://github.com/MicrosoftDocs/azure-docs/commits/master/{0}' -f $commit.file) | |
Add-Member -InputObject $commit -Type NoteProperty -Name 'Url' -Value ('https://docs.microsoft.com/en-us/azure{0}' -f $commit.file.replace('.md', '').replace('articles', '')) | |
$commit | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment