parent
c94b9b8197
commit
d411566c45
@ -1,4 +0,0 @@
|
|||||||
/target/
|
|
||||||
/.classpath
|
|
||||||
/.project
|
|
||||||
/.settings/
|
|
@ -1,137 +0,0 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
|
|
||||||
<groupId>net.yacy</groupId>
|
|
||||||
<artifactId>maven-plugin-gitrevisionnumber</artifactId>
|
|
||||||
<version>1.1</version>
|
|
||||||
<packaging>maven-plugin</packaging>
|
|
||||||
<name>YaCy - Build Number Maven Plugin</name>
|
|
||||||
<description>This plugin gives you a Git repository release number. in the format 9000 as maven property "releaseNr" and a Git repository timestamp as Maven property "DSTAMP" in the format yyyymmdd </description>
|
|
||||||
|
|
||||||
<url>http://www.yacy.net</url>
|
|
||||||
|
|
||||||
<scm>
|
|
||||||
<connection>scm:git:https://github.com/yacy/yacy_search_server.git</connection>
|
|
||||||
<url>https://github.com/yacy/yacy_search_server</url>
|
|
||||||
</scm>
|
|
||||||
|
|
||||||
<developers>
|
|
||||||
<developer>
|
|
||||||
<name>Michael Peter Christen</name>
|
|
||||||
</developer>
|
|
||||||
</developers>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<sourceDirectory>src</sourceDirectory>
|
|
||||||
|
|
||||||
<plugins>
|
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
|
||||||
<version>2.5.1</version>
|
|
||||||
<configuration>
|
|
||||||
<source>1.7</source>
|
|
||||||
<target>1.7</target>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.codehaus.mojo</groupId>
|
|
||||||
<artifactId>buildnumber-maven-plugin</artifactId>
|
|
||||||
<version>1.2</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>1</id>
|
|
||||||
<phase>validate</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>create</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
<configuration>
|
|
||||||
<doCheck>false</doCheck>
|
|
||||||
<doUpdate>false</doUpdate>
|
|
||||||
<shortRevisionLength>5</shortRevisionLength>
|
|
||||||
<revisionOnScmFailure>9000</revisionOnScmFailure>
|
|
||||||
<!-- creates a string e.g. 20130131-1fd45 -->
|
|
||||||
<format>{0,date,yyyyMMdd}-{1}</format>
|
|
||||||
<items>
|
|
||||||
<item>timestamp</item>
|
|
||||||
<item>scmVersion</item>
|
|
||||||
</items>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<!-- exec:exec goal to provide start YaCy by Maven (just to have it for cases were the ide not provides a run command) -->
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.codehaus.mojo</groupId>
|
|
||||||
<artifactId>exec-maven-plugin</artifactId>
|
|
||||||
<version>1.2.1</version>
|
|
||||||
|
|
||||||
<configuration>
|
|
||||||
<classpathScope>runtime</classpathScope>
|
|
||||||
<executable>java</executable>
|
|
||||||
<arguments>
|
|
||||||
<argument>-classpath</argument>
|
|
||||||
<classpath/>
|
|
||||||
</arguments>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-plugin-plugin</artifactId>
|
|
||||||
<version>3.2</version>
|
|
||||||
<configuration>
|
|
||||||
<!-- see http://jira.codehaus.org/browse/MNG-5346 -->
|
|
||||||
<skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
|
|
||||||
</configuration>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>mojo-descriptor</id>
|
|
||||||
<goals>
|
|
||||||
<goal>descriptor</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
<!-- if you want to generate help goal -->
|
|
||||||
<!-- <execution> <id>help-goal</id> <goals> <goal>helpmojo</goal> </goals> </execution> -->
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
|
|
||||||
</build>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.maven</groupId>
|
|
||||||
<artifactId>maven-plugin-api</artifactId>
|
|
||||||
<version>3.1.0</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.eclipse.jgit</groupId>
|
|
||||||
<artifactId>org.eclipse.jgit</artifactId>
|
|
||||||
<version>4.5.0.201609210915-r</version>
|
|
||||||
<type>jar</type>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.maven</groupId>
|
|
||||||
<artifactId>maven-project</artifactId>
|
|
||||||
<version>3.0-alpha-2</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.maven.plugin-tools</groupId>
|
|
||||||
<artifactId>maven-plugin-annotations</artifactId>
|
|
||||||
<version>3.2</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.maven</groupId>
|
|
||||||
<artifactId>maven-core</artifactId>
|
|
||||||
<version>3.1.1</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
</project>
|
|
@ -1,146 +0,0 @@
|
|||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.apache.maven.plugin.AbstractMojo;
|
|
||||||
import org.apache.maven.plugin.MojoExecutionException;
|
|
||||||
import org.apache.maven.plugin.logging.Log;
|
|
||||||
import org.apache.maven.plugins.annotations.Component;
|
|
||||||
import org.apache.maven.plugins.annotations.LifecyclePhase;
|
|
||||||
import org.apache.maven.plugins.annotations.Mojo;
|
|
||||||
import org.apache.maven.plugins.annotations.Parameter;
|
|
||||||
import org.apache.maven.project.MavenProject;
|
|
||||||
import org.eclipse.jgit.api.Git;
|
|
||||||
import org.eclipse.jgit.api.errors.GitAPIException;
|
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
|
||||||
import org.eclipse.jgit.lib.Ref;
|
|
||||||
import org.eclipse.jgit.lib.Repository;
|
|
||||||
import org.eclipse.jgit.revwalk.RevCommit;
|
|
||||||
import org.eclipse.jgit.revwalk.RevWalk;
|
|
||||||
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Maven plugin to create property with YaCy release number,
|
|
||||||
* a 4 digit number based on commits to the Git repository
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Mojo(name = "create", defaultPhase = LifecyclePhase.INITIALIZE)
|
|
||||||
public class GitRevMavenTask extends AbstractMojo {
|
|
||||||
|
|
||||||
@Component
|
|
||||||
private MavenProject project;
|
|
||||||
/**
|
|
||||||
* Name of the buildNumber property
|
|
||||||
*
|
|
||||||
* parameter expression="${maven.buildNumber.buildNumberPropertyName}"
|
|
||||||
* default-value="releaseNr"
|
|
||||||
*/
|
|
||||||
@Parameter
|
|
||||||
private String branchPropertyName = "branch";
|
|
||||||
@Parameter
|
|
||||||
private String buildNumberPropertyName = "releaseNr";
|
|
||||||
@Parameter
|
|
||||||
private String commitDatePropertyName = "DSTAMP";
|
|
||||||
|
|
||||||
Log log = this.getLog();
|
|
||||||
|
|
||||||
public void setBuildNumberPropertyName(String revprop) {
|
|
||||||
this.buildNumberPropertyName = revprop;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCommitDatePropertyName(String dateprop) {
|
|
||||||
this.commitDatePropertyName = dateprop;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute() throws MojoExecutionException {
|
|
||||||
|
|
||||||
String branch = null;
|
|
||||||
String revision = null;
|
|
||||||
String lastTag = null;
|
|
||||||
String commitDate = null;
|
|
||||||
|
|
||||||
Repository repo = null;
|
|
||||||
Git git = null;
|
|
||||||
RevWalk walk = null;
|
|
||||||
try {
|
|
||||||
|
|
||||||
final File src = project.getBasedir(); // set Git root path to project root
|
|
||||||
repo = new FileRepositoryBuilder().readEnvironment()
|
|
||||||
.findGitDir(src).build();
|
|
||||||
branch = repo.getBranch();
|
|
||||||
branch = "master".equals(branch) ? "" : "_" + branch;
|
|
||||||
final ObjectId head = repo.resolve("HEAD");
|
|
||||||
|
|
||||||
git = new Git(repo);
|
|
||||||
|
|
||||||
final List<Ref> tags = git.tagList().call();
|
|
||||||
|
|
||||||
walk = new RevWalk(repo);
|
|
||||||
final RevCommit headCommit = walk.parseCommit(head);
|
|
||||||
final SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
|
|
||||||
commitDate = df.format(headCommit.getAuthorIdent().getWhen());
|
|
||||||
walk.markStart(headCommit);
|
|
||||||
int distance = 0;
|
|
||||||
|
|
||||||
/* Peel known tags */
|
|
||||||
final List<Ref> peeledTags = new ArrayList<>();
|
|
||||||
for (final Ref tag : tags) {
|
|
||||||
peeledTags.add(repo.peel(tag));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Look for the last tag commit and calculate distance with the HEAD commit */
|
|
||||||
for (final RevCommit commit : walk) {
|
|
||||||
for (final Ref tag : peeledTags) {
|
|
||||||
if (commit.equals(tag.getPeeledObjectId()) || commit.equals(tag.getObjectId())) {
|
|
||||||
lastTag = commit.getShortMessage();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (lastTag != null || distance++ > 90999) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
walk.dispose();
|
|
||||||
if (lastTag == null) {
|
|
||||||
revision = "0000";
|
|
||||||
} else {
|
|
||||||
revision = Integer.toString(distance + 9000);
|
|
||||||
}
|
|
||||||
} catch (final IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (GitAPIException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
} finally {
|
|
||||||
/* In all cases, properly release resources */
|
|
||||||
if(walk != null) {
|
|
||||||
walk.close();
|
|
||||||
}
|
|
||||||
if(git != null) {
|
|
||||||
git.close();
|
|
||||||
}
|
|
||||||
if(repo != null) {
|
|
||||||
repo.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (project != null) {
|
|
||||||
project.getProperties().put(this.branchPropertyName, branch);
|
|
||||||
log.info("GitrevMavenTask: set property " + this.branchPropertyName + "='" + branch + "'");
|
|
||||||
project.getProperties().put(this.buildNumberPropertyName, revision);
|
|
||||||
log.info("GitrevMavenTask: set property " + this.buildNumberPropertyName + "=" + revision);
|
|
||||||
project.getProperties().put(this.commitDatePropertyName, commitDate);
|
|
||||||
log.info("GitrevMavenTask: set property " + this.commitDatePropertyName + "=" + commitDate);
|
|
||||||
} else {
|
|
||||||
log.error("GitrevMavenTask: no Maven project");
|
|
||||||
System.out.println(this.branchPropertyName + "=" + branch);
|
|
||||||
System.out.println(this.buildNumberPropertyName + "=" + revision);
|
|
||||||
System.out.println(this.commitDatePropertyName + "=" + commitDate);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in new issue