From c5d5500758c011f7378552a78589ae38fd807ee5 Mon Sep 17 00:00:00 2001 From: "Dustin L. Howett" Date: Tue, 11 Aug 2020 13:08:03 -0700 Subject: [PATCH] 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. --- .github/actions/spell-check/expect/expect.txt | 11 +++- tools/Get-OSSConhostLog.ps1 | 65 +++++++++++++++++++ 2 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 tools/Get-OSSConhostLog.ps1 diff --git a/.github/actions/spell-check/expect/expect.txt b/.github/actions/spell-check/expect/expect.txt index 5a7491544..9379acedf 100644 --- a/.github/actions/spell-check/expect/expect.txt +++ b/.github/actions/spell-check/expect/expect.txt @@ -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 diff --git a/tools/Get-OSSConhostLog.ps1 b/tools/Get-OSSConhostLog.ps1 new file mode 100644 index 000000000..4c206effa --- /dev/null +++ b/tools/Get-OSSConhostLog.ps1 @@ -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" + } + "" +}