Code Review with Git Patches and Outlook via PowerShell


In the spirit of “simplest thing that works,” my team has a rather

low-fidelity approach to code reviews: patch files and e-mail. Nothing

fancy, but we find it works rather well. It’s even easier thanks to git format-patch, which lets me easily generate a patch per commit, but I was never able to get send-email to work quite like I wanted. Instead, I whipped together a PowerShell script in a few minutes that does just the trick:

function patch ($ref = 'master..', $Message = '', [switch]$KeepFiles) {
$patchPaths = $(git format-patch -C -o C:/Temp/Patches $ref)
if($patchPaths) {
$outlook = New-Object -ComObject Outlook.Application
$mail = $outlook.CreateItem(0)
[void]$mail.Recipients.Add('myteam@mycompany.com')
$mail.Subject = "Review - $Message"
$commits = $(git log -C --pretty=format:'%s' --reverse $ref) | foreach { "<li>$_</li>" }
$mail.HTMLBody = "<ol style=`"font: 11pt Calibri`">$commits</ol>"
$patchPaths | foreach {
[void]$mail.Attachments.Add($_)
if(!$KeepFiles) { Remove-Item $_ }
}
$mail.Display()
} else {
Write-Warning 'Nothing to patch!'
}
}

Usage:

Create patch of everything on current branch since master:

patch -m "Issue 123 - This is neat"

Create patch of last two commits, without message:

patch HEAD~2..

Create patch of everything except the current commit, with message:

patch master..HEAD~1 'Refactoring for Story 234'
Better git-svn Through Aliases: git up & git dci