Skip to content

Commit 7c215a0

Browse files
author
Erik Romson
committed
added a regex-message-filter. It will take a (or more) regex and remove everything in the commit message that doesn't match with the regex
1 parent 433e343 commit 7c215a0

7 files changed

Lines changed: 170 additions & 10 deletions

File tree

pom.xml

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
3-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>com.github.danielflower.mavenplugins</groupId>
66
<artifactId>gitlog-maven-plugin</artifactId>
7-
<version>1.13-SNAPSHOT</version>
7+
<version>1.13-SNAPSHOT</version>
88
<packaging>maven-plugin</packaging>
99
<name>Maven Git Log Plugin</name>
1010
<description>Generates a changelog based on commits to a git repository in text and HTML format showing the changes
11-
that are included in each version. A possible use of this is to include these changelogs when packaging your
12-
maven project so that you have an accurate list of commits that the current package includes.</description>
11+
that are included in each version. A possible use of this is to include these changelogs when packaging your
12+
maven project so that you have an accurate list of commits that the current package includes.</description>
1313
<url>http://github.com/danielflower/maven-gitlog-plugin</url>
1414
<inceptionYear>2011</inceptionYear>
1515
<licenses>
@@ -187,6 +187,14 @@
187187
</dependency>
188188
</dependencies>
189189
</plugin>
190+
<plugin>
191+
<groupId>org.apache.maven.plugins</groupId>
192+
<artifactId>maven-compiler-plugin</artifactId>
193+
<configuration>
194+
<source>8</source>
195+
<target>8</target>
196+
</configuration>
197+
</plugin>
190198
</plugins>
191199
</build>
192200
<reporting>

src/main/java/com/github/danielflower/mavenplugins/gitlog/GenerateMojo.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,11 @@ public class GenerateMojo extends AbstractMojo {
285285
@Parameter(defaultValue = "Merge")
286286
private String asciidocTableViewHeader2ReleaseNotes;
287287

288-
@Override
288+
289+
@Parameter(defaultValue = "")
290+
private String messageRegexFilter;
291+
292+
@Override
289293
public void execute() throws MojoExecutionException, MojoFailureException {
290294
getLog().info("Generating gitlog in " + outputDirectory.getAbsolutePath()
291295
+ " with title " + reportTitle);
@@ -354,14 +358,14 @@ public void execute() throws MojoExecutionException, MojoFailureException {
354358
private List<ChangeLogRenderer> createRenderers() throws IOException {
355359
ArrayList<ChangeLogRenderer> renderers = new ArrayList<ChangeLogRenderer>();
356360

361+
MessageConverter messageConverter = getCommitMessageConverter();
357362
if (generatePlainTextChangeLog) {
358-
renderers.add(new PlainTextRenderer(getLog(), outputDirectory, plainTextChangeLogFilename, fullGitMessage));
363+
renderers.add(new PlainTextRenderer(getLog(), outputDirectory, plainTextChangeLogFilename, fullGitMessage, messageConverter));
359364
}
360365

361366
if (generateSimpleHTMLChangeLog || generateHTMLTableOnlyChangeLog || generateMarkdownChangeLog ||
362367
generateAsciidocChangeLog || generatAsciidocChangeLog || generateAsciidocReleaseNotes ||
363368
generatAsciidocReleaseNotes) {
364-
MessageConverter messageConverter = getCommitMessageConverter();
365369
if (generateSimpleHTMLChangeLog) {
366370
renderers.add(new SimpleHtmlRenderer(getLog(), outputDirectory, simpleHTMLChangeLogFilename, fullGitMessage, messageConverter, false));
367371
}
@@ -380,7 +384,7 @@ private List<ChangeLogRenderer> createRenderers() throws IOException {
380384
}
381385

382386
if (generateJSONChangeLog) {
383-
renderers.add(new JsonRenderer(getLog(), outputDirectory, jsonChangeLogFilename, fullGitMessage));
387+
renderers.add(new JsonRenderer(getLog(), outputDirectory, jsonChangeLogFilename, fullGitMessage, messageConverter));
384388
}
385389

386390
if (verbose) {
@@ -408,6 +412,9 @@ private MessageConverter getCommitMessageConverter() {
408412
} catch (Exception ex) {
409413
getLog().warn("Could not load issue management system information; no HTML links will be generated.", ex);
410414
}
415+
if (messageRegexFilter!=null && !messageRegexFilter.isEmpty()){
416+
converter=new RegexFilterMessageConverter(messageRegexFilter,converter);
417+
}
411418
if (converter == null) {
412419
converter = new NullMessageConverter();
413420
}

src/main/java/com/github/danielflower/mavenplugins/gitlog/renderers/JsonRenderer.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
public class JsonRenderer extends FileRenderer {
1414

15+
private MessageConverter messageConverter;
1516
private String template;
1617
protected StringBuilder json = new StringBuilder();
1718
private final boolean fullGitMessage;
@@ -26,6 +27,11 @@ public JsonRenderer(Log log, File targetFolder, String filename, boolean fullGit
2627
this.template = loadResourceToString("/json/JsonItemTemplate.html");
2728
}
2829

30+
public JsonRenderer(Log log, File targetFolder, String filename, boolean fullGitMessage,MessageConverter messageConverter)
31+
throws IOException {
32+
this(log, targetFolder, filename, fullGitMessage);
33+
this.messageConverter = messageConverter;
34+
}
2935
@Override
3036
public void renderHeader(String reportTitle) throws IOException {
3137
json.append("[\n");
@@ -45,6 +51,9 @@ public void renderCommit(RevCommit commit) throws IOException {
4551
} else {
4652
message = commit.getShortMessage();
4753
}
54+
if (messageConverter!=null){
55+
message=messageConverter.formatCommitMessage(message);
56+
}
4857
StringBuffer tagsJson = new StringBuffer();
4958
boolean firstTag = true;
5059
for (RevTag tag : this.tags) {

src/main/java/com/github/danielflower/mavenplugins/gitlog/renderers/PlainTextRenderer.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,22 @@
1111

1212
public class PlainTextRenderer extends FileRenderer {
1313

14-
private boolean previousWasTag = false;
14+
private MessageConverter messageConverter;
15+
private boolean previousWasTag = false;
1516
private final boolean fullGitMessage;
1617

1718
public PlainTextRenderer(Log log, File targetFolder, String filename, boolean fullGitMessage) throws IOException {
1819
super(log, targetFolder, filename, false);
1920
this.fullGitMessage = fullGitMessage;
2021
}
2122

22-
public void renderHeader(String reportTitle) throws IOException {
23+
public PlainTextRenderer(Log log, File targetFolder, String filename, boolean fullGitMessage,MessageConverter messageConverter) throws IOException {
24+
this(log, targetFolder, filename, fullGitMessage);
25+
this.messageConverter = messageConverter;
26+
}
27+
28+
29+
public void renderHeader(String reportTitle) throws IOException {
2330
if (reportTitle != null && reportTitle.length() > 0) {
2431
writer.write(reportTitle);
2532
writer.write(NEW_LINE);
@@ -43,6 +50,10 @@ public void renderCommit(RevCommit commit) throws IOException {
4350
} else {
4451
message = commit.getShortMessage();
4552
}
53+
if (messageConverter!=null){
54+
message=messageConverter.formatCommitMessage(message);
55+
}
56+
4657
writer.write(Formatter.formatDateTime(commit.getCommitTime()) + " " + message);
4758
writer.write(" " + Formatter.formatCommiter(commit.getCommitterIdent()));
4859
writer.write(NEW_LINE);
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.github.danielflower.mavenplugins.gitlog.renderers;
2+
3+
import java.util.Comparator;
4+
import java.util.List;
5+
import java.util.TreeSet;
6+
import java.util.regex.MatchResult;
7+
import java.util.regex.Matcher;
8+
import java.util.regex.Pattern;
9+
import java.util.stream.Collectors;
10+
import java.util.stream.Stream;
11+
12+
import org.apache.commons.lang3.tuple.ImmutablePair;
13+
import org.apache.commons.lang3.tuple.Pair;
14+
15+
/**
16+
* message converter that will remove all test except whatever matches the regex
17+
* it can apply multiple regexes (that can overlap) and pull out all matches in order
18+
*/
19+
public class RegexFilterMessageConverter implements MessageConverter {
20+
private final List<Pattern> patterns;
21+
private final MessageConverter converter;
22+
23+
/**
24+
*
25+
* @param messageRegexFilter a string with regex separated with &&&
26+
* @param converter a converter that will be applied after this
27+
*/
28+
public RegexFilterMessageConverter(String messageRegexFilter, /*nullable*/ MessageConverter converter) {
29+
patterns = Stream.of(messageRegexFilter.split("&&&"))
30+
.filter(re -> re.trim()
31+
.length() > 0)
32+
.map(re -> Pattern.compile(re))
33+
.collect(Collectors.toList());
34+
this.converter = converter;
35+
}
36+
37+
@Override
38+
public String formatCommitMessage(String original) {
39+
40+
TreeSet<Pair<Integer, Integer>> regionsToSave = new TreeSet<>((Comparator<Pair<Integer, Integer>>) (o1, o2) -> o1.getLeft()
41+
.compareTo(o2.getLeft()));
42+
43+
patterns.forEach(pattern -> {
44+
Matcher m = pattern.matcher(original);
45+
while (m.find()) {
46+
if (m.group(1) != null) {
47+
MatchResult matchResult = m.toMatchResult();
48+
regionsToSave.add(new ImmutablePair<>(matchResult.start(1), matchResult.end(1)));
49+
}
50+
}
51+
});
52+
53+
54+
StringBuffer sb = new StringBuffer("");
55+
regionsToSave.forEach(pair -> {
56+
sb.append(original, pair.getLeft(), pair.getRight());
57+
sb.append(" ");
58+
}
59+
);
60+
61+
String retStr = sb.toString()
62+
.trim();
63+
64+
if (converter!=null){
65+
retStr=converter.formatCommitMessage(retStr);
66+
}
67+
return retStr;
68+
}
69+
}

src/test/java/com/github/danielflower/mavenplugins/gitlog/GeneratorTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,16 @@ public void writePlainTextLogToFile() throws Exception {
4545
generateReport(log, renderer);
4646
}
4747

48+
49+
@Test
50+
public void writePlainTextLogToFileWRegexFilter() throws Exception {
51+
Log log = new SystemStreamLog();
52+
RegexFilterMessageConverter converter = new RegexFilterMessageConverter("((Merge pull request #)\\d+)&&&((update)\\s+\\w+)",null);
53+
ChangeLogRenderer renderer = new PlainTextRenderer(log, new File(TARGET_DIR), "changelog_w_regexfilter.txt", false,converter);
54+
generateReport(log, renderer);
55+
}
56+
57+
4858
@Test
4959
public void writePlainTextFullLogToFile() throws Exception {
5060
Log log = new SystemStreamLog();
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.github.danielflower.mavenplugins.gitlog.renderers;
2+
3+
import static org.hamcrest.CoreMatchers.equalTo;
4+
import static org.junit.Assert.assertThat;
5+
6+
import org.apache.maven.plugin.logging.SystemStreamLog;
7+
import org.junit.Test;
8+
9+
public class RegexFilterMessageConverterTest {
10+
11+
12+
@Test
13+
public void testEmpty(){
14+
RegexFilterMessageConverter converter=new RegexFilterMessageConverter("((SOF|SAP)-\\d+)", null);
15+
assertThat(converter.formatCommitMessage("lkjlkj"),equalTo(""));
16+
}
17+
18+
@Test
19+
public void testReplace1(){
20+
RegexFilterMessageConverter converter=new RegexFilterMessageConverter("((SOF|SAP)-\\d+)", null);
21+
assertThat(converter.formatCommitMessage("hej hopp SOF-42 ugga bugga "),equalTo("SOF-42"));
22+
}
23+
24+
@Test
25+
public void testReplace12(){
26+
RegexFilterMessageConverter converter=new RegexFilterMessageConverter("((SOF|SAP)-\\d+)", null);
27+
assertThat(converter.formatCommitMessage("SAP-42"),equalTo("SAP-42"));
28+
}
29+
30+
31+
@Test
32+
public void testReplace2(){
33+
RegexFilterMessageConverter converter=new RegexFilterMessageConverter("((SOF|SAP)-\\d+)&&&(hejamora)", null);
34+
assertThat(converter.formatCommitMessage("heja SAP-42 mora hejamora"),equalTo("SAP-42 hejamora"));
35+
}
36+
37+
@Test
38+
public void testReplaceWithConverter(){
39+
JiraIssueLinkConverter c = new JiraIssueLinkConverter(new SystemStreamLog(),
40+
"https://jira.atlassian.com/browse/CONF/");
41+
RegexFilterMessageConverter converter=new RegexFilterMessageConverter("((SOF|SAP)-\\d+)&&&(hejamora)", c);
42+
assertThat(converter.formatCommitMessage("heja SAP-42 mora hejamora"),equalTo("<a href=\"https://jira.atlassian.com/browse/SAP-42\">SAP-42</a> hejamora"));
43+
}
44+
45+
46+
}

0 commit comments

Comments
 (0)