Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<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"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.danielflower.mavenplugins</groupId>
<artifactId>gitlog-maven-plugin</artifactId>
<version>1.13-SNAPSHOT</version>
<version>1.13-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<name>Maven Git Log Plugin</name>
<description>Generates a changelog based on commits to a git repository in text and HTML format showing the changes
that are included in each version. A possible use of this is to include these changelogs when packaging your
maven project so that you have an accurate list of commits that the current package includes.</description>
that are included in each version. A possible use of this is to include these changelogs when packaging your
maven project so that you have an accurate list of commits that the current package includes.</description>
<url>http://github.com/danielflower/maven-gitlog-plugin</url>
<inceptionYear>2011</inceptionYear>
<licenses>
Expand Down Expand Up @@ -187,6 +187,14 @@
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,11 @@ public class GenerateMojo extends AbstractMojo {
@Parameter(defaultValue = "Merge")
private String asciidocTableViewHeader2ReleaseNotes;

@Override

@Parameter(defaultValue = "")
private String messageRegexFilter;

@Override
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info("Generating gitlog in " + outputDirectory.getAbsolutePath()
+ " with title " + reportTitle);
Expand Down Expand Up @@ -354,14 +358,14 @@ public void execute() throws MojoExecutionException, MojoFailureException {
private List<ChangeLogRenderer> createRenderers() throws IOException {
ArrayList<ChangeLogRenderer> renderers = new ArrayList<ChangeLogRenderer>();

MessageConverter messageConverter = getCommitMessageConverter();
if (generatePlainTextChangeLog) {
renderers.add(new PlainTextRenderer(getLog(), outputDirectory, plainTextChangeLogFilename, fullGitMessage));
renderers.add(new PlainTextRenderer(getLog(), outputDirectory, plainTextChangeLogFilename, fullGitMessage, messageConverter));
}

if (generateSimpleHTMLChangeLog || generateHTMLTableOnlyChangeLog || generateMarkdownChangeLog ||
generateAsciidocChangeLog || generatAsciidocChangeLog || generateAsciidocReleaseNotes ||
generatAsciidocReleaseNotes) {
MessageConverter messageConverter = getCommitMessageConverter();
if (generateSimpleHTMLChangeLog) {
renderers.add(new SimpleHtmlRenderer(getLog(), outputDirectory, simpleHTMLChangeLogFilename, fullGitMessage, messageConverter, false));
}
Expand All @@ -380,7 +384,7 @@ private List<ChangeLogRenderer> createRenderers() throws IOException {
}

if (generateJSONChangeLog) {
renderers.add(new JsonRenderer(getLog(), outputDirectory, jsonChangeLogFilename, fullGitMessage));
renderers.add(new JsonRenderer(getLog(), outputDirectory, jsonChangeLogFilename, fullGitMessage, messageConverter));
}

if (verbose) {
Expand Down Expand Up @@ -408,6 +412,9 @@ private MessageConverter getCommitMessageConverter() {
} catch (Exception ex) {
getLog().warn("Could not load issue management system information; no HTML links will be generated.", ex);
}
if (messageRegexFilter!=null && !messageRegexFilter.isEmpty()){
converter=new RegexFilterMessageConverter(messageRegexFilter,converter);
}
if (converter == null) {
converter = new NullMessageConverter();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

public class JsonRenderer extends FileRenderer {

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

public JsonRenderer(Log log, File targetFolder, String filename, boolean fullGitMessage,MessageConverter messageConverter)
throws IOException {
this(log, targetFolder, filename, fullGitMessage);
this.messageConverter = messageConverter;
}
@Override
public void renderHeader(String reportTitle) throws IOException {
json.append("[\n");
Expand All @@ -45,6 +51,9 @@ public void renderCommit(RevCommit commit) throws IOException {
} else {
message = commit.getShortMessage();
}
if (messageConverter!=null){
message=messageConverter.formatCommitMessage(message);
}
StringBuffer tagsJson = new StringBuffer();
boolean firstTag = true;
for (RevTag tag : this.tags) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,22 @@

public class PlainTextRenderer extends FileRenderer {

private boolean previousWasTag = false;
private MessageConverter messageConverter;
private boolean previousWasTag = false;
private final boolean fullGitMessage;

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

public void renderHeader(String reportTitle) throws IOException {
public PlainTextRenderer(Log log, File targetFolder, String filename, boolean fullGitMessage,MessageConverter messageConverter) throws IOException {
this(log, targetFolder, filename, fullGitMessage);
this.messageConverter = messageConverter;
}


public void renderHeader(String reportTitle) throws IOException {
if (reportTitle != null && reportTitle.length() > 0) {
writer.write(reportTitle);
writer.write(NEW_LINE);
Expand All @@ -43,6 +50,10 @@ public void renderCommit(RevCommit commit) throws IOException {
} else {
message = commit.getShortMessage();
}
if (messageConverter!=null){
message=messageConverter.formatCommitMessage(message);
}

writer.write(Formatter.formatDateTime(commit.getCommitTime()) + " " + message);
writer.write(" " + Formatter.formatCommiter(commit.getCommitterIdent()));
writer.write(NEW_LINE);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package com.github.danielflower.mavenplugins.gitlog.renderers;

import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.regex.MatchResult;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;

/**
* message converter that will remove all test except whatever matches the regex
* it can apply multiple regexes (that can overlap) and pull out all matches in order
*/
public class RegexFilterMessageConverter implements MessageConverter {
private final List<Pattern> patterns;
private final MessageConverter converter;

/**
*
* @param messageRegexFilter a string with regex separated with &&&
* @param converter a converter that will be applied after this
*/
public RegexFilterMessageConverter(String messageRegexFilter, /*nullable*/ MessageConverter converter) {
patterns = Stream.of(messageRegexFilter.split("&&&"))
.filter(re -> re.trim()
.length() > 0)
.map(re -> Pattern.compile(re))
.collect(Collectors.toList());
this.converter = converter;
}

@Override
public String formatCommitMessage(String original) {

TreeSet<Pair<Integer, Integer>> regionsToSave = new TreeSet<>((Comparator<Pair<Integer, Integer>>) (o1, o2) -> o1.getLeft()
.compareTo(o2.getLeft()));

patterns.forEach(pattern -> {
Matcher m = pattern.matcher(original);
while (m.find()) {
if (m.group(1) != null) {
MatchResult matchResult = m.toMatchResult();
regionsToSave.add(new ImmutablePair<>(matchResult.start(1), matchResult.end(1)));
}
}
});


StringBuffer sb = new StringBuffer("");
regionsToSave.forEach(pair -> {
sb.append(original, pair.getLeft(), pair.getRight());
sb.append(" ");
}
);

String retStr = sb.toString()
.trim();

if (converter!=null){
retStr=converter.formatCommitMessage(retStr);
}
return retStr;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@ public void writePlainTextLogToFile() throws Exception {
generateReport(log, renderer);
}


@Test
public void writePlainTextLogToFileWRegexFilter() throws Exception {
Log log = new SystemStreamLog();
RegexFilterMessageConverter converter = new RegexFilterMessageConverter("((Merge pull request #)\\d+)&&&((update)\\s+\\w+)",null);
ChangeLogRenderer renderer = new PlainTextRenderer(log, new File(TARGET_DIR), "changelog_w_regexfilter.txt", false,converter);
generateReport(log, renderer);
}


@Test
public void writePlainTextFullLogToFile() throws Exception {
Log log = new SystemStreamLog();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.github.danielflower.mavenplugins.gitlog.renderers;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;

import org.apache.maven.plugin.logging.SystemStreamLog;
import org.junit.Test;

public class RegexFilterMessageConverterTest {


@Test
public void testEmpty(){
RegexFilterMessageConverter converter=new RegexFilterMessageConverter("((SOF|SAP)-\\d+)", null);
assertThat(converter.formatCommitMessage("lkjlkj"),equalTo(""));
}

@Test
public void testReplace1(){
RegexFilterMessageConverter converter=new RegexFilterMessageConverter("((SOF|SAP)-\\d+)", null);
assertThat(converter.formatCommitMessage("hej hopp SOF-42 ugga bugga "),equalTo("SOF-42"));
}

@Test
public void testReplace12(){
RegexFilterMessageConverter converter=new RegexFilterMessageConverter("((SOF|SAP)-\\d+)", null);
assertThat(converter.formatCommitMessage("SAP-42"),equalTo("SAP-42"));
}


@Test
public void testReplace2(){
RegexFilterMessageConverter converter=new RegexFilterMessageConverter("((SOF|SAP)-\\d+)&&&(hejamora)", null);
assertThat(converter.formatCommitMessage("heja SAP-42 mora hejamora"),equalTo("SAP-42 hejamora"));
}

@Test
public void testReplaceWithConverter(){
JiraIssueLinkConverter c = new JiraIssueLinkConverter(new SystemStreamLog(),
"https://jira.atlassian.com/browse/CONF/");
RegexFilterMessageConverter converter=new RegexFilterMessageConverter("((SOF|SAP)-\\d+)&&&(hejamora)", c);
assertThat(converter.formatCommitMessage("heja SAP-42 mora hejamora"),equalTo("<a href=\"https://jira.atlassian.com/browse/SAP-42\">SAP-42</a> hejamora"));
}


}