All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nz.ac.auckland.groupapps.maven.gitlog.git.GitLogGenerator.groovy Maven / Gradle / Ivy

Go to download

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.

There is a newer version: 1.2
Show newest version
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()
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy