Adding SVN branding of About.* with svn branch@version information

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@3547 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/common.ant.xml b/common.ant.xml
index 6708595..b183d80 100755
--- a/common.ant.xml
+++ b/common.ant.xml
@@ -150,7 +150,7 @@
 				<classpath>
 					<pathelement location="${gwt.tools.lib}/junit/junit-3.8.1.jar" />
 					<pathelement location="${gwt.tools.antlib}/ant-junit-1.6.5.jar" />
-                                        <pathelement location="${gwt.tools.lib}/selenium/selenium-java-client-driver.jar" />
+					<pathelement location="${gwt.tools.lib}/selenium/selenium-java-client-driver.jar" />
 				</classpath>
 			</taskdef>
 
@@ -172,7 +172,7 @@
 					<pathelement location="${javac.out}" />
 					<pathelement location="${gwt.dev.staging.jar}" />
 					<pathelement location="${gwt.tools.lib}/junit/junit-3.8.1.jar" />
-                                        <pathelement location="${gwt.tools.lib}/selenium/selenium-java-client-driver.jar" />
+					<pathelement location="${gwt.tools.lib}/selenium/selenium-java-client-driver.jar" />
 					<extraclasspaths />
 				</classpath>
 
@@ -199,6 +199,47 @@
 		</sequential>
 	</macrodef>
 
+	<macrodef name="gwt.revfilter" description="Filters files for versioning">
+		<attribute name="todir" description="Destination for the filtered copy"/>
+		<element name="src.fileset" implicit="true" 
+			description="Source for the filtered copy"/>
+		<sequential>
+			<exec outputproperty="svn.info" executable="svn" 
+					failifexecutionfails="false" logError="true">
+				<arg value="info"/>
+				<arg value="${gwt.root}"/>
+			</exec>
+			<propertyregex property="gwt.svn.branch"
+				input="${svn.info}" 
+				regexp="URL: https?://google-web-toolkit.googlecode.com/svn/([^\r\n]+)"
+				select="\1"
+				defaultValue="unknown"
+				casesensitive="false" />
+			<exec outputproperty="svn.version" executable="svnversion" 
+					failifexecutionfails="false"  logError="true">
+				<arg value="${gwt.root}"/>
+			</exec>
+			<propertyregex property="gwt.svn.version"
+				input="${svn.version}" 
+				regexp="^(\d+(:\d+)?[MSP]*)$"
+				replace="\1"
+				defaultValue="unknown"
+				casesensitive="false" />
+			<property name="gwt.svnrev" 
+				value="${gwt.svn.branch}@${gwt.svn.version}"/>
+			<!-- These files must be filtered for versioning -->
+			<mkdir dir="@{todir}" />
+			<copy todir="@{todir}" overwrite="true">
+				<src.fileset/>
+				<filterset>
+					<filter token="GWT_VERSION" value="${gwt.version}" />
+					<filter token="GWT_SVNREV" value="${gwt.svnrev}" />
+				</filterset>
+			</copy>
+			<echo message="Branding as GWT version ${gwt.version}, SVN rev ${gwt.svnrev}"/>
+		</sequential>
+	</macrodef>
+
 	<macrodef name="gwt.timer">
 		<attribute name="name"/>
 		<element name="timer.elements" implicit="true" optional="false"/>
diff --git a/dev/core/build.xml b/dev/core/build.xml
index 748985e..b48abc7 100755
--- a/dev/core/build.xml
+++ b/dev/core/build.xml
@@ -55,17 +55,13 @@
 		</gwt.jar>
 	</target>
 
-	<property name="filter.pattern" value="com/google/gwt/dev/About.java" />
+	<property name="filter.pattern" value="com/google/gwt/dev/About.properties" />
 
 	<target name="-filter.src" description="Creates filtered copies of source files" unless="filter.uptodate">
 		<delete dir="${src.filtered}" failonerror="false" />
-		<mkdir dir="${src.filtered}" />
-		<copy todir="${src.filtered}" overwrite="true">
+		<gwt.revfilter todir="${src.filtered}" >
 			<fileset dir="src" includes="${filter.pattern}" />
-			<filterset>
-				<filter token="GWT_VERSION" value="${gwt.version}" />
-			</filterset>
-		</copy>
+		</gwt.revfilter>
 		<touch file="${src.filtered}/gwt.version-${gwt.version}" />
 	</target>
 
diff --git a/dev/core/src/com/google/gwt/dev/About.java b/dev/core/src/com/google/gwt/dev/About.java
index 1349f3d..98d15f1 100644
--- a/dev/core/src/com/google/gwt/dev/About.java
+++ b/dev/core/src/com/google/gwt/dev/About.java
@@ -15,18 +15,46 @@
  */
 package com.google.gwt.dev;
 
+import java.io.InputStream;
+import java.io.IOException;
+import java.util.Properties;
+
 /**
- * About information for GWT. 
+ * About information for GWT.
  */
 public class About {
 
-  public static final String GWT_VERSION_NUM = "@GWT_VERSION@"; 
+  public static String GWT_SVNREV;
 
-  public static final String GWT_NAME = "Google Web Toolkit"; 
+  public static String GWT_VERSION_NUM;
 
-  public static final String GWT_VERSION = GWT_NAME + " " + GWT_VERSION_NUM; 
+  public static String GWT_NAME = "Google Web Toolkit";
+
+  public static String GWT_VERSION;
+
+  {
+    Class<? extends About> myClass = this.getClass();
+    String propsPath = myClass.getName().replace('.', '/').concat(".properties");
+    Properties props = new Properties();
+    try {
+      InputStream instream = myClass.getClassLoader().getResourceAsStream(
+          propsPath);
+      props.load(instream);
+    } catch (IOException iox) {
+      // okay... we use default values, then.
+    }
+
+    GWT_SVNREV = props.getProperty("gwt.svnrev");
+    if (GWT_SVNREV == null) {
+      GWT_SVNREV = "unknown";
+    }
+    GWT_VERSION_NUM = props.getProperty("gwt.version");
+    if (GWT_VERSION_NUM == null) {
+      GWT_VERSION_NUM = "0.0.0";
+    }
+    GWT_VERSION = GWT_NAME + " " + GWT_VERSION_NUM;
+  }
 
   private About() {
   }
-  
 }
diff --git a/dev/core/src/com/google/gwt/dev/About.properties b/dev/core/src/com/google/gwt/dev/About.properties
new file mode 100644
index 0000000..a30bc0c
--- /dev/null
+++ b/dev/core/src/com/google/gwt/dev/About.properties
@@ -0,0 +1,2 @@
+gwt.version=@GWT_VERSION@

+gwt.svnrev=@GWT_SVNREV@
\ No newline at end of file
diff --git a/distro-source/common.ant.xml b/distro-source/common.ant.xml
index e5904f5..eed395f 100755
--- a/distro-source/common.ant.xml
+++ b/distro-source/common.ant.xml
@@ -17,14 +17,9 @@
 	</patternset>
 
 	<target name="filter" description="Filters distro files for versioning">
-		<!-- These files must be filtered for versioning -->
-		<mkdir dir="${project.build}" />
-		<copy todir="${project.build}">
+		<gwt.revfilter todir="${project.build}" >
 			<fileset dir="../core/src" />
-			<filterset>
-				<filter token="GWT_VERSION" value="${gwt.version}" />
-			</filterset>
-		</copy>
+		</gwt.revfilter>
 	</target>
 
 	<target name="clean" description="Cleans this project's intermediate and output files">
diff --git a/distro-source/core/src/about.html b/distro-source/core/src/about.html
index 753f22a..0158831 100644
--- a/distro-source/core/src/about.html
+++ b/distro-source/core/src/about.html
@@ -43,7 +43,7 @@
             <td id="title"><a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a></td>
          </tr>
          <tr>
-            <td id="version">Version @GWT_VERSION@</td>
+            <td id="version">Version @GWT_VERSION@ <br> (Subversion @GWT_SVNREV@)</td>
          </tr>
       </table>
 
diff --git a/distro-source/core/src/about.txt b/distro-source/core/src/about.txt
index dd2dfdc..a11ca4b 100644
--- a/distro-source/core/src/about.txt
+++ b/distro-source/core/src/about.txt
@@ -1,4 +1,5 @@
 Google Web Toolkit @GWT_VERSION@
+(svn revision @GWT_SVNREV@)
 Copyright (c) Google, Inc. 2008.  All rights reserved.
 Visit Google Code (http://code.google.com/webtoolkit/).