parent
0349a96b4d
commit
d9c56aa37a
@ -0,0 +1,96 @@
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.apache.tools.ant.BuildException;
|
||||
import org.apache.tools.ant.Project;
|
||||
|
||||
import org.eclipse.jgit.api.Git;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.revwalk.RevCommit;
|
||||
import org.eclipse.jgit.revwalk.RevTag;
|
||||
import org.eclipse.jgit.revwalk.RevWalk;
|
||||
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
|
||||
|
||||
|
||||
public class GitRevTask extends org.apache.tools.ant.Task {
|
||||
|
||||
private String repoPath;
|
||||
private String property;
|
||||
|
||||
public void setRepoPath(final String repoPath) {
|
||||
this.repoPath = repoPath;
|
||||
}
|
||||
|
||||
public void setProperty(String property) {
|
||||
this.property = property;
|
||||
}
|
||||
|
||||
public void execute() {
|
||||
if (this.property==null || this.property.length() == 0) {
|
||||
log("svn entries file name property was not set properly",Project.MSG_ERR);
|
||||
return;
|
||||
}
|
||||
|
||||
String revision = null;
|
||||
String lastTag = null;
|
||||
try {
|
||||
final File src = new File(repoPath);
|
||||
final Repository repo = new FileRepositoryBuilder().readEnvironment()
|
||||
.findGitDir(src).build();
|
||||
final ObjectId head = repo.resolve("HEAD");
|
||||
final String gitrev = head.getName().substring(0, 8);
|
||||
|
||||
final Git git = new Git(repo);
|
||||
final List<RevTag> tags = git.tagList().call();
|
||||
|
||||
final RevWalk walk = new RevWalk(repo);
|
||||
walk.markStart(walk.parseCommit(head));
|
||||
int distance = 0;
|
||||
for (final RevCommit commit : walk) {
|
||||
for (final RevTag tag : tags) {
|
||||
if (commit.equals(tag.getObject())) {
|
||||
lastTag = tag.getShortMessage();
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (lastTag == null) lastTag = findRev(commit.getFullMessage());
|
||||
if (lastTag != null || distance++ > 99) break;
|
||||
}
|
||||
walk.dispose();
|
||||
if (lastTag == null) {
|
||||
revision = "dev" + "-" + gitrev;
|
||||
} else {
|
||||
revision = lastTag + "-" + distance + "-" + gitrev;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
Project theProject = getProject();
|
||||
if (theProject != null) {
|
||||
theProject.setProperty(this.property, lastTag);
|
||||
log("Property '" + this.property + "' set to '" + revision + "'", Project.MSG_VERBOSE);
|
||||
}
|
||||
}
|
||||
|
||||
private String findRev(final String message) {
|
||||
final Pattern pattern = Pattern.compile("trunk@(\\d{4})\\s+");
|
||||
final Matcher matcher = pattern.matcher(message);
|
||||
if (matcher.find()) {
|
||||
return matcher.group(1);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
GitRevTask gitRevTask = new GitRevTask();
|
||||
gitRevTask.setRepoPath("/home/sgaebel/git/yacy.rc1");
|
||||
|
||||
gitRevTask.execute();
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
gitRev=GitRevTask
|
Binary file not shown.
@ -0,0 +1,37 @@
|
||||
This program and the accompanying materials are made available
|
||||
under the terms of the Eclipse Distribution License v1.0 which
|
||||
accompanies this distribution, is reproduced below, and is
|
||||
available at http://www.eclipse.org/org/documents/edl-v10.php
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or
|
||||
without modification, are permitted provided that the following
|
||||
conditions are met:
|
||||
|
||||
- Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
- Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
|
||||
- Neither the name of the Eclipse Foundation, Inc. nor the
|
||||
names of its contributors may be used to endorse or promote
|
||||
products derived from this software without specific prior
|
||||
written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
Loading…
Reference in new issue