@@ -19,15 +19,26 @@ fun getCommits(fromRevision: String, toRevision: String, path: String?): List<Co
1919
2020 val commits = process.inputStream.bufferedReader().readText().split(" \n\n commit " )
2121 return commits.mapNotNull { commit ->
22- val commitId = matchCommit.find(commit)?.groupValues?.let { it[1 ] } ? : return @mapNotNull null
23- val changeId = matchChangeId.find(commit)?.groupValues?.let { it[1 ] }
24- val relnote = matchRelnote.find(commit)?.groupValues?.let { it[1 ] }
25- val issues = matchIssue.findAll(commit).mapNotNull { it.groups[1 ]?.value }.toList()
26- return @mapNotNull Commit (commitId, changeId, relnote, issues)
22+ val sanitizedCommit = commit.removePrefix(" commit " ).padEnd(2 , ' \n ' )
23+ val commitGroups = parseCommit.find(sanitizedCommit)?.groupValues ? : return @mapNotNull null
24+ if (commitGroups?.size != 4 ) {
25+ // group 1: commit hash
26+ // group 2: commit message
27+ // group 3: title
28+ return @mapNotNull null
29+ }
30+ val commitId = commitGroups[1 ]
31+ val title = commitGroups[3 ]
32+ val commitMessage = commitGroups[2 ]
33+ val changeId = matchChangeId.find(commitMessage)?.groupValues?.let { it[1 ] }
34+ val relnote = matchRelnote.find(commitMessage)?.groupValues?.let { it[1 ] }
35+ val issues = matchIssue.findAll(commitMessage).mapNotNull { it.groups[1 ]?.value }.toList()
36+ return @mapNotNull Commit (commitId, title, changeId, relnote?.trim(' \" ' ), issues)
2737 }
2838}
2939
30- val matchCommit = Regex (" ^([0-9a-f]+)\n " , RegexOption .IGNORE_CASE )
40+ val parseCommit =
41+ Regex (" ^([0-9a-f]+)\\ nAuthor:.*?\\ nDate:.*?\\ n[\\ s]+((.*?)\\ n[\\ s\\ S]+)" , RegexOption .MULTILINE )
3142val matchRelnote =
3243 Regex (
3344 " ^\\ s*Relnote:\\ s+(\" {3}.+\" {3}|\" .+\" |[^\\ n]+)$" ,
@@ -38,6 +49,7 @@ val matchIssue = Regex("(?:Bug|Fixes):\\s+(\\d+)", RegexOption.IGNORE_CASE)
3849
3950data class Commit (
4051 val commit : String ,
52+ val title : String ,
4153 val changeId : String? ,
4254 val relnote : String? ,
4355 val issues : List <String >,
@@ -50,7 +62,7 @@ fun issueToBuganizerUrl(issue: String): String = "https://issuetracker.google.co
5062fun Commit.asReleaseNote (): String {
5163 val commitLink = " [${commit.substring(0 , 7 )} ](${commitToGitHubUrl(commit)} )"
5264 val issueLinks = issues.map { issue -> " [b/$issue ](${issueToBuganizerUrl(issue)} )" }.joinToString(" , " )
53- return " $commitLink $relnote $issueLinks "
65+ return " $commitLink ${ relnote ? : title} $issueLinks "
5466}
5567
5668if (args.isEmpty()) {
@@ -72,6 +84,9 @@ val toRevision = args[1]
7284val path = args.getOrNull(2 )
7385
7486getCommits(fromRevision, toRevision, path)
75- .filterNot { it.relnote == null || ignoreRelnotes.contains(it.relnote.toLowerCase()) }
87+ .filter {
88+ (it.relnote != null && ! ignoreRelnotes.contains(it.relnote.toLowerCase())) ||
89+ it.issues.isNotEmpty()
90+ }
7691 .map { it.asReleaseNote() }
7792 .forEach { println (it) }
0 commit comments