diff --git a/build.xml b/build.xml index e16cb9958..cc8f11b11 100644 --- a/build.xml +++ b/build.xml @@ -57,6 +57,7 @@ + @@ -69,6 +70,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -111,7 +153,7 @@ - + @@ -508,12 +550,14 @@ + + diff --git a/libbuild/GitRevTask/GitRevTask.java b/libbuild/GitRevTask/GitRevTask.java new file mode 100644 index 000000000..3d9302d98 --- /dev/null +++ b/libbuild/GitRevTask/GitRevTask.java @@ -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 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(); + } +} diff --git a/libbuild/GitRevTask/GitRevTask.properties b/libbuild/GitRevTask/GitRevTask.properties new file mode 100644 index 000000000..13effd982 --- /dev/null +++ b/libbuild/GitRevTask/GitRevTask.properties @@ -0,0 +1 @@ +gitRev=GitRevTask \ No newline at end of file diff --git a/libbuild/org.eclipse.jgit-1.1.0.201109151100-r.jar b/libbuild/org.eclipse.jgit-1.1.0.201109151100-r.jar new file mode 100644 index 000000000..40d5c0c50 Binary files /dev/null and b/libbuild/org.eclipse.jgit-1.1.0.201109151100-r.jar differ diff --git a/libbuild/org.eclipse.jgit-1.1.0.201109151100-r.license b/libbuild/org.eclipse.jgit-1.1.0.201109151100-r.license new file mode 100644 index 000000000..1b85c6466 --- /dev/null +++ b/libbuild/org.eclipse.jgit-1.1.0.201109151100-r.license @@ -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.