nz.ac.auckland.groupapps.maven.gitlog.git.GitLogGenerator.groovy Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of uoa-gitlog-plugin Show documentation
Show all versions of uoa-gitlog-plugin Show documentation
Generates a release note based on commits to a git repository in text format
showing the changes that are included in each version.
A possible use of this is to push these changelogs to a remote server when
releasing the maven project so that the remote server can lookup and update
JIRA ticket based on an accurate list of commits that the current package includes.
package nz.ac.auckland.groupapps.maven.gitlog.git
import nz.ac.auckland.groupapps.maven.gitlog.commit.CommitBundle
import nz.ac.auckland.groupapps.maven.gitlog.commit.CommitHelper
import nz.ac.auckland.groupapps.maven.gitlog.commit.CommitUtils
import nz.ac.auckland.groupapps.maven.gitlog.utils.VersionFetcher
import org.apache.maven.plugin.logging.Log
import org.apache.maven.project.MavenProject
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.api.errors.NoHeadException
import org.eclipse.jgit.lib.Repository
import org.eclipse.jgit.lib.RepositoryBuilder
import org.eclipse.jgit.revwalk.RevCommit
import org.eclipse.jgit.revwalk.RevWalk
/**
* @author Kefeng Deng (kden022, [email protected])
*/
public class GitLogGenerator {
private GitLogGenerator() {}
/**
* Generate a release note under current repository
*
* @param project is the current project
* @param issuePrefix is the issuePrefix config with the plugin
* @param log is the Logger
*/
public static List generate(MavenProject project, String issuePrefix, Log log) {
List allCommits = []
CommitUtils commitUtils = new CommitUtils(issuePrefix)
try {
Repository repository = buildRepository()
RevWalk logs = new Git(repository).log().call()
Iterator logIterator = logs.iterator()
List currentReleaseCommits = []
String versionNumber = project.getVersion()
boolean isReleased = false
while (logIterator.hasNext()) {
RevCommit revCommit = (RevCommit) logIterator.next()
if (CommitHelper.isReleaseCommit(revCommit)) {
isReleased = true
versionNumber = VersionFetcher.fetchReleaseVersionNumber(project, revCommit)
currentReleaseCommits.add(commitUtils.convertToBundle(revCommit, isReleased, versionNumber))
allCommits.addAll(currentReleaseCommits)
currentReleaseCommits.clear()
} else if (commitUtils.isIssueRelated(revCommit)) {
currentReleaseCommits.add(commitUtils.convertToBundle(revCommit, isReleased, versionNumber))
}
}
allCommits.addAll(currentReleaseCommits)
} catch (IllegalArgumentException iae) {
log.error("No Git repository be found")
} catch (NoHeadException nhEx) {
log.debug("No commits be found")
}
return allCommits
}
/**
* @return current repository build
*/
protected static Repository buildRepository() {
return new RepositoryBuilder().findGitDir().build()
}
}