tools: add Get-OSSConhostLog (#7250)

This script takes a range of commits and generates a commit log with the
git2git-excluded file changes filtered out.

It also replaces GitHub issue numbers with GH-XXX so as to not confuse
Git2Git or Azure DevOps.  Community contributions are tagged with CC- so
they can be detected later.

The output looks like this:

```
Carlos Zamora (2)
* Pass mouse button state into HandleMouse instead of asking win32 (GH-6765)

Dustin L. Howett (6)
* Disable MinimalCoreWin when OpenConsoleUniversalApp is false (GH-7203)

James Holderness (1)
* Add support for the "doubly underlined" graphic rendition attribute (CC-7223)
```

Yes, the numbers are wrong. No, it doesn't really matter.
This commit is contained in:
Dustin L. Howett 2020-08-11 13:08:03 -07:00 committed by GitHub
parent bc642bbf2a
commit c5d5500758
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 73 additions and 3 deletions

View File

@ -352,6 +352,7 @@ conserv
consoleapi
CONSOLECONTROL
CONSOLEENDTASK
consolegit
CONSOLEIME
consoleinternal
Consoleroot
@ -422,6 +423,7 @@ cstdlib
cstr
cstring
cstyle
CSV
CSwitch
CText
ctime
@ -886,6 +888,7 @@ getwriter
Gfun
gfx
gh
gitfilters
github
gitlab
gle
@ -1056,6 +1059,8 @@ IInteract
IInteractivity
IIo
IList
imagemagick
Imatch
ime
Imm
IMouse
@ -1072,7 +1077,6 @@ INITCOMMONCONTROLSEX
INITDIALOG
initguid
INITMENU
imagemagick
inkscape
inl
INLINEPREFIX
@ -1520,8 +1524,8 @@ nothrow
NOTICKS
NOTIMPL
notin
NOTOPMOST
NOTNULL
NOTOPMOST
NOTRACK
NOTSUPPORTED
notypeopt
@ -1610,8 +1614,8 @@ OSCBG
OSCCT
OSCFG
OSCRCC
OSCSCC
OSCSCB
OSCSCC
OSCWT
OSDEPENDSROOT
osfhandle
@ -2337,6 +2341,7 @@ Toolset
tooltip
TOPDOWNDIB
TOPLEFT
toplevel
TOPRIGHT
TOpt
tosign

View File

@ -0,0 +1,65 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.
################################
# This script takes a range of commits and generates
# a commit log with the git2git-excluded file changes
# filtered out.
#
# It also replaces GitHub issue numbers with GH-XXX so
# as to not confuse Git2Git or Azure DevOps.
# Community contributions are tagged with CC- so they
# can be detected later.
[CmdletBinding()]
Param(
[string]$RevisionRange
)
Function Test-MicrosoftPerson($email) {
Return $email -like "*@microsoft.com"
}
# Replaces github PR numbers with GH-XXX or CC-XXX (community contribution)
# and issue numbers with GH-XXX
Function Mangle-CommitMessage($object) {
$Prefix = "GH-"
If (-Not (Test-MicrosoftPerson $object.Email)) {
$Prefix = "CC-"
}
$s = $object.Subject -Replace "\(#(\d+)\)", "(${Prefix}`$1)"
$s = $s -Replace "#(\d+)","GH-`$1"
$s
}
Function Get-Git2GitIgnoresAsExcludes() {
$filters = (Get-Content (Join-Path (& git rev-parse --show-toplevel) consolegit2gitfilters.json) | ConvertFrom-Json)
$excludes = $filters.ContainsFilters | ? { $_ -Ne "/." } | % { $_ -Replace "^/","" }
$excludes += $filters.SuffixFilters | % { "**/*$_"; "*$_" }
$excludes += $filters.PrefixFilters | % { "**/$_*"; "$_*" }
$excludes | % { ":(top,exclude)$_" }
}
$Excludes = Get-Git2GitIgnoresAsExcludes
Write-Verbose "IGNORING: $Excludes"
$Entries = & git log $RevisionRange "--pretty=format:%an%x1C%ae%x1C%s" -- $Excludes |
ConvertFrom-CSV -Delimiter "`u{001C}" -Header Author,Email,Subject
Write-Verbose ("{0} unfiltered log entries" -f $Entries.Count)
$Grouped = $Entries | Group Email
$Grouped | % {
$e = $_.Group[0].Email
$p = $_.Group[0].Author
"$p ($($_.Group.Count))"
$_.Group | % {
If ($_.Subject -Imatch "^Merge") {
# Skip merge commits
Return
}
$cm = Mangle-CommitMessage $_
"* $cm"
}
""
}