]> source.dussan.org Git - vaadin-framework.git/commitdiff
List authors in release notes (#13612)
authorArtur Signell <artur@vaadin.com>
Fri, 9 May 2014 19:38:42 +0000 (22:38 +0300)
committerArtur Signell <artur@vaadin.com>
Mon, 12 May 2014 07:22:52 +0000 (10:22 +0300)
Change-Id: I51960e9345ff233e29289b33d3224e03d866d463

WebContent/release-notes.html
buildhelpers/build.xml
buildhelpers/src/com/vaadin/buildhelpers/FetchReleaseNotesAuthors.java [new file with mode: 0644]
buildhelpers/src/com/vaadin/buildhelpers/authormap.properties [new file with mode: 0644]
common.xml

index f912f9924edc75753d205d3e608bb7d9eecc909c..2737ff301499e9d7a8a8a2511531ff523e952b18 100644 (file)
@@ -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>
 
             <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>
index 28eb55e6e8735fcc9d10e49f4a5ca07779b71959..159435811f53c12d04bfe1f2ffe18c3cc1ad8265 100644 (file)
         </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 (file)
index 0000000..cd85ca6
--- /dev/null
@@ -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 (file)
index 0000000..15b8ad2
--- /dev/null
@@ -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
index 17537899de32bd70fc18aa84ee7f205d3f749ad1..6e28ab6a608d05001514fa0c240219a61c70704e 100644 (file)
 
     <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}">
                 <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">