diff options
-rw-r--r-- | WebContent/release-notes.html | 6 | ||||
-rw-r--r-- | buildhelpers/build.xml | 9 | ||||
-rw-r--r-- | buildhelpers/src/com/vaadin/buildhelpers/FetchReleaseNotesAuthors.java | 101 | ||||
-rw-r--r-- | buildhelpers/src/com/vaadin/buildhelpers/authormap.properties | 6 | ||||
-rw-r--r-- | common.xml | 19 |
5 files changed, 138 insertions, 3 deletions
diff --git a/WebContent/release-notes.html b/WebContent/release-notes.html index f912f9924e..2737ff3014 100644 --- a/WebContent/release-notes.html +++ b/WebContent/release-notes.html @@ -63,6 +63,7 @@ @version-minor@</a></li> <li><a href="#supportedversions">Supported technologies</a></li> + <li><a href="#authors">Authors</a></li> <li><a href="#vaadinontheweb">Vaadin on the Web</a></li> </ul> @@ -553,6 +554,11 @@ <li>PostgreSQL</li> </ul> + <h2 id="authors">Authors</h2> + Vaadin @version@ was created by: + <ul> + @release-notes-authors@ + </ul> <h2 id="vaadinontheweb">Vaadin on the Web</h2> <ul> diff --git a/buildhelpers/build.xml b/buildhelpers/build.xml index 28eb55e6e8..159435811f 100644 --- a/buildhelpers/build.xml +++ b/buildhelpers/build.xml @@ -44,6 +44,15 @@ </antcall> </target> + <target name="fetch-release-notes-authors"> + <copy file="src/com/vaadin/buildhelpers/authormap.properties" tofile="result/classes/com/vaadin/buildhelpers/authormap.properties" /> + <antcall target="common.exec-buildhelper"> + <param name="main.class" value="com.vaadin.buildhelpers.FetchReleaseNotesAuthors" /> + <param name="output" value="${output}" /> + </antcall> + <delete file="result/classes/com/vaadin/buildhelpers/authormap.properties" /> + </target> + <target name="test" depends="checkstyle"> <!--<antcall target="common.test.run" /> --> <echo>WHAT? No JUnit tests for ${module.name}!</echo> diff --git a/buildhelpers/src/com/vaadin/buildhelpers/FetchReleaseNotesAuthors.java b/buildhelpers/src/com/vaadin/buildhelpers/FetchReleaseNotesAuthors.java new file mode 100644 index 0000000000..cd85ca6a3f --- /dev/null +++ b/buildhelpers/src/com/vaadin/buildhelpers/FetchReleaseNotesAuthors.java @@ -0,0 +1,101 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.buildhelpers; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Properties; + +public class FetchReleaseNotesAuthors { + private static final String template = "<li class=\"author\">@author@</li>"; + + public static void main(String[] args) throws IOException, + InterruptedException { + Properties authorMap = new Properties(); + + String authorsFilename = FetchReleaseNotesAuthors.class.getPackage() + .getName().replace(".", "/") + + "/authormap.properties"; + InputStream s = FetchReleaseNotesAuthors.class.getClassLoader() + .getResourceAsStream(authorsFilename); + if (s == null) { + System.err.println("Author mapping file " + authorsFilename + + " not found!"); + } + authorMap.load(s); + + String version = System.getProperty("vaadin.version"); + String previousVersion = getPreviousVersion(version); + // System.out.println("Using previous version: " + previousVersion); + // List all commits which are in this version but not in + // "previousVersion" + String cmd = "git log --pretty=%an HEAD ^origin/" + previousVersion; + Process p = Runtime.getRuntime().exec(cmd); + p.waitFor(); + if (p.exitValue() != 0) { + System.err.println("Exit code: " + p.exitValue()); + } + BufferedReader b = new BufferedReader(new InputStreamReader( + p.getInputStream())); + String line = ""; + + List<String> authors = new ArrayList<String>(); + while ((line = b.readLine()) != null) { + String author = line; + if (authorMap.containsKey(author)) { + author = authorMap.getProperty(author); + } + if (author != null && !author.equals("") + && !authors.contains(author)) { + authors.add(author); + } + } + Collections.sort(authors); + for (String author : authors) { + System.out.println(template.replace("@author@", author)); + } + } + + private static String getPreviousVersion(String version) { + String[] versionNumbers = version.split("\\."); + if (versionNumbers.length > 4 || versionNumbers.length < 3) { + throw new IllegalArgumentException("Cannot parse version: " + + version); + } + int major = Integer.parseInt(versionNumbers[0]); + int minor = Integer.parseInt(versionNumbers[1]); + int maintenance = Integer.parseInt(versionNumbers[2]); + // String qualifier = versionNumbers[3]; + + if (minor == 0) { + // Major release, can't know what the previous minor was + throw new IllegalArgumentException( + "Can't know what previous minor version was"); + } + if (maintenance == 0) { + // Minor release, use last minor + return major + "." + (minor - 1); + } else { + // Maintenance, use last maintenance + return major + "." + minor + "." + (maintenance - 1); + } + } +} diff --git a/buildhelpers/src/com/vaadin/buildhelpers/authormap.properties b/buildhelpers/src/com/vaadin/buildhelpers/authormap.properties new file mode 100644 index 0000000000..15b8ad2cba --- /dev/null +++ b/buildhelpers/src/com/vaadin/buildhelpers/authormap.properties @@ -0,0 +1,6 @@ +denisanisimov=Denis Anisimov +joheriks=Johannes Eriksson +michaelvogt=Michael Vogt +tapio=Tapio Aali +Build\ Agent= +mtzukanov=Michael Tzukanov
\ No newline at end of file diff --git a/common.xml b/common.xml index 17537899de..6e28ab6a60 100644 --- a/common.xml +++ b/common.xml @@ -32,12 +32,14 @@ <property name="filtered.webcontent.dir" location="${vaadin.basedir}/result/filteredWebContent" /> <property name="release-notes-tickets-file" location="${vaadin.basedir}/result/release-notes-tickets.html" /> + <property name="release-notes-authors-file" location="${vaadin.basedir}/result/release-notes-authors.html" /> - <target name="filter.webcontent" unless="webcontent.filtered" depends="fetch-release-notes-tickets"> + <target name="filter.webcontent" unless="webcontent.filtered" depends="fetch-release-notes-tickets,fetch-release-notes-authors"> <property name="webcontent.filtered" value="true" /> <!-- Running without build.release-notes will cause an error, which is ignored --> <loadfile property="release-notes-tickets" srcFile="${release-notes-tickets-file}" failonerror="false" /> + <loadfile property="release-notes-authors" srcFile="${release-notes-authors-file}" failonerror="false" /> <delete dir="${filtered.webcontent.dir}" /> <copy todir="${filtered.webcontent.dir}"> @@ -68,16 +70,27 @@ <replacetokens begintoken="@" endtoken="@"> <token key="release-notes-tickets" value="${release-notes-tickets}" /> </replacetokens> + <replacetokens begintoken="@" endtoken="@"> + <token key="release-notes-authors" value="${release-notes-authors}" /> + </replacetokens> </filterchain> </copy> </target> - <target name="fetch-release-notes-tickets" unless="built.release-notes" if="build.release-notes"> + <target name="fetch-release-notes-tickets" unless="built.release-notes-tickets" if="build.release-notes"> <mkdir dir="${vaadin.basedir}/result" /> <subant buildpath="${vaadin.basedir}/buildhelpers" target="fetch-release-notes-tickets" antfile="build.xml" inheritall="true"> <property name="output" location="${release-notes-tickets-file}" /> </subant> - <property name="built.release-notes" value="1" /> + <property name="built.release-notes-tickets" value="1" /> + </target> + + <target name="fetch-release-notes-authors" unless="built.release-notes-authors" if="build.release-notes"> + <mkdir dir="${vaadin.basedir}/result" /> + <subant buildpath="${vaadin.basedir}/buildhelpers" target="fetch-release-notes-authors" antfile="build.xml" inheritall="true"> + <property name="output" location="${release-notes-authors-file}" /> + </subant> + <property name="built.release-notes-authors" value="1" /> </target> <fileset dir="${filtered.webcontent.dir}" id="common.files.for.all.jars"> |