-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

This patch sets Derby's buildnumber to be the ouput of svnversion when
the jar files are built. Tha main change is to allow the build number to
 be a string rather than just a number (previously Cloudscape used
Perforce's change number which was always a number).

Example partial output from sysinfo is

- --------- Derby Information --------
[/home/djd/derby/trunk/jars/insane/derby.jar] 10.0.2.0 - (47170M)
[/home/djd/derby/trunk/jars/insane/derbytools.jar] 10.0.2.0 - (47170M)
[/home/djd/derby/trunk/jars/insane/derbynet.jar] 10.0.2.0 - (47170M)


The M indicates that the svn client is being modified in some way. Any
pre-built jar or release on the Derby site would just have a simple
number like '47170'. Ie. from a clean un-modified code line.

This then allows easy tracking of the matching code for any Derby jar.

+1 vote from myself.

Dan.








-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFBVGg0Iv0S4qsbfuQRAuYNAKDl2nKsf9Vk0pocmJazQS9czGNLwwCfQfy3
3dMLosd9FN9QMEWDJ5Agubw=
=o1HQ
-----END PGP SIGNATURE-----
Index: java/tools/org/apache/derby/tools/sysinfo.java
===================================================================
--- java/tools/org/apache/derby/tools/sysinfo.java      (revision 47170)
+++ java/tools/org/apache/derby/tools/sysinfo.java      (working copy)
@@ -120,7 +120,7 @@
                gets the build number for the IBM Cloudscape embedded library
                @return the build number, or -1 if the information is not found.
        */
-  static public int getBuildNumber()
+  static public String getBuildNumber()
   {
     return getBuildNumber("DBMS");
   }
@@ -129,14 +129,14 @@
                gets the build number for the specified library
                @param genus which library to get the build number for. Valid 
inputs are
                        DBMS, TOOLS
-               @return the build number, or -1 if the information is not found.
+               @return the build number, or ???? if the information is not 
found.
        */
-  static public int getBuildNumber(String genus)
+  static public String getBuildNumber(String genus)
   {
         ProductVersionHolder pvh = 
ProductVersionHolder.getProductVersionHolderFromMyEnv(genus);
         if (pvh == null)
         {
-            return -1;
+            return "????";
         }
 
         return pvh.getBuildNumber();
Index: java/tools/org/apache/derby/impl/tools/sysinfo/Main.java
===================================================================
--- java/tools/org/apache/derby/impl/tools/sysinfo/Main.java    (revision 47170)
+++ java/tools/org/apache/derby/impl/tools/sysinfo/Main.java    (working copy)
@@ -379,7 +379,7 @@
                        int major = Integer.valueOf(p.getProperty 
("derby.locale.version.major")).intValue();
                        int minor = Integer.valueOf(p.getProperty 
("derby.locale.version.minor")).intValue();
                        int maint = Integer.valueOf(p.getProperty 
("derby.locale.version.maint")).intValue();
-                       int build = Integer.valueOf(p.getProperty 
("derby.locale.build.number")).intValue();
+                       String build = p.getProperty 
("derby.locale.build.number");
 
                        String lv = 
ProductVersionHolder.fullVersionString(major, minor, maint, false, build);
 
@@ -862,7 +862,7 @@
                        minor.intValue(),
                        0,
                        0,
-                       build.intValue(),
+                       build.toString(),
                        Boolean.FALSE);
 
                ZipInfoProperties zip = new ZipInfoProperties(jccVersion);
Index: java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java
===================================================================
--- java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java      
(revision 47119)
+++ java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java      
(working copy)
@@ -2218,7 +2218,7 @@
 
                // For 2.0 beta we added the build number and the isBeta 
indication.
                // (5 bytes from our first spare long)
-               daos.writeInt(jbmsVersion.getBuildNumber());
+               daos.writeInt(jbmsVersion.getBuildNumberAsInt());
                byte flags = 0;
                if (onDiskBeta) flags |= IS_BETA_FLAG;
                daos.writeByte(flags);
Index: java/engine/org/apache/derby/iapi/services/info/ProductVersionHolder.java
===================================================================
--- java/engine/org/apache/derby/iapi/services/info/ProductVersionHolder.java   
(revision 47119)
+++ java/engine/org/apache/derby/iapi/services/info/ProductVersionHolder.java   
(working copy)
@@ -122,7 +122,7 @@
        private int minorVersion = BAD_NUMBER;
        private int maintVersion = BAD_NUMBER;
        private int drdaMaintVersion = BAD_NUMBER;
-       private int buildNumber = BAD_NUMBER;
+       private String buildNumber = "????";
        private Boolean isBeta;
 
        private ProductVersionHolder() {
@@ -141,7 +141,7 @@
                                                                 int 
minorVersion,
                                                                 int 
maintVersion,
                                                                 int 
drdaMaintVersion,
-                                                                int 
buildNumber,
+                                                                String 
buildNumber,
                                                                 Boolean isBeta)
        {
                if (productVendorName != null)
@@ -171,7 +171,7 @@
          @param maintVersion The least significant portion of a 3 part
          product version. Must be non-negative.
          @param drdaMaintVersion The protocol modification number for minor 
release.
-         @param buildNumber The buildNumber for a product. Must be positive.
+         @param buildNumber The buildNumber for a product. 
          @param isBeta true iff the product is beta.
          @return A valid ProductVersionHolder of null if any of the parameters
          provided are not valid.
@@ -185,7 +185,7 @@
                                                   int minorVersion,
                                                   int maintVersion,
                                                   int drdaMaintVersion,
-                                                  int buildNumber,
+                                                  String buildNumber,
                                                   Boolean isBeta)
        {
                ProductVersionHolder pvh =
@@ -288,7 +288,7 @@
                int v2 = 
parseInt(p.getProperty(PropertyNames.PRODUCT_MINOR_VERSION));
                int v3 = 
parseInt(p.getProperty(PropertyNames.PRODUCT_MAINT_VERSION));
                int v4 = 
parseInt(p.getProperty(PropertyNames.PRODUCT_DRDA_MAINT_VERSION));
-               int bn = 
parseInt(p.getProperty(PropertyNames.PRODUCT_BUILD_NUMBER));
+               String bn = p.getProperty(PropertyNames.PRODUCT_BUILD_NUMBER);
                Boolean isBeta =
                        
Boolean.valueOf(p.getProperty(PropertyNames.PRODUCT_BETA_VERSION));
                return  
getProductVersionHolder(pvn,pn,ptn,v1,v2,v3,v4,bn,isBeta);
@@ -357,8 +357,40 @@
        /**
          Return the build number for this product.
          */
-       public int getBuildNumber() {return buildNumber;}
+       public String getBuildNumber() {return buildNumber;}
 
+    /**
+     * Return the build number as an integer if possible,
+     * mapping from the SVN number.
+     * nnnnn -> returns nnnnn
+     * nnnnnM -> returns -nnnnn indicates a modified code base
+     * nnnnn:mmmmm -> returns -nnnnn
+     * anything else -> returns -1
+    */
+    public int getBuildNumberAsInt(){
+       if (buildNumber == null)
+           return -1;
+       boolean dubiousCode = false;
+       int offset = buildNumber.indexOf('M');
+       if (offset == -1)
+           offset = buildNumber.indexOf(':');
+       else
+           dubiousCode = true;
+       if (offset == -1)
+               offset = buildNumber.length();
+        else
+            dubiousCode = true;
+       
+       try {
+               int bnai = Integer.parseInt(buildNumber.substring(0, offset));
+               if (dubiousCode)
+                   bnai = -bnai;
+               return bnai;
+       } catch (NumberFormatException nfe) 
+       {
+               return -1;
+       }
+    }
 
        /**
          Parse a string containing a non-negative integer. Return
@@ -426,7 +458,7 @@
 
                return sb.toString();
        }
-       public static String fullVersionString(int major, int minor, int maint, 
boolean isBeta, int build) {
+       public static String fullVersionString(int major, int minor, int maint, 
boolean isBeta, String build) {
                StringBuffer sb = new StringBuffer();
                sb.append(major);
                sb.append('.');
@@ -462,7 +494,7 @@
                        sb.append(' ');
             sb.append(preRelease);
         }
-               if (build != 0) {
+               if (build != null) {
                        sb.append(" - (");
 
                        sb.append(build);
@@ -478,7 +510,7 @@
     public String getVersionBuildString(boolean withBuild)
     {
                return ProductVersionHolder.fullVersionString(majorVersion, 
minorVersion, maintVersion, isBeta(),
-                       withBuild ? buildNumber : 0);
+                       withBuild ? buildNumber : null);
     }
 
        /*
Index: java/drda/org/apache/derby/impl/drda/DB2jServerImpl.java
===================================================================
--- java/drda/org/apache/derby/impl/drda/DB2jServerImpl.java    (revision 47119)
+++ java/drda/org/apache/derby/impl/drda/DB2jServerImpl.java    (working copy)
@@ -154,7 +154,7 @@
        protected static String att_extnam;
        protected static String att_srvrlslv; 
        protected static String prdId;
-       private static int buildNumber;
+       private static String buildNumber;
        // we will use single or mixed, not double byte to reduce traffic on the
        // wire, this is in keeping with JCC
        // Note we specify UTF8 for the single byte encoding even though it can
Index: build.xml
===================================================================
--- build.xml   (revision 47170)
+++ build.xml   (working copy)
@@ -488,16 +488,20 @@
   <target name="buildjarsclean" 
depends="cleanjars,initjars,derbyjar,derbytoolsjar,derbynetjar"/>
   <target name="buildjars" 
depends="initjars,derbyjar,derbytoolsjar,derbynetjar"/>
 
-  <target name="initjars" depends="setsanityname">
+  <target name="initjars" depends="setsanityname,getsvnversion">
     <property name="derby.jar.dir" value="${basedir}/jars/${sanity.name}"/>
     <property name="derby.jar.topdir" value="${basedir}/jars"/>
     <mkdir dir="${derby.jar.dir}"/>
     <mkdir dir="${derby.jar.dir}/lists"/>
-    <condition property="changenumber" value="1">
+     <loadfile srcFile="${basedir}/changenumber.properties"
+               failonerror="false"
+               property="changenumber"/>
+    <condition property="changenumber" value="???">
       <not>
         <isset property="changenumber"/>
       </not>
     </condition>
+    <echo message="Revision number set to ${changenumber}."/>
   </target>
 
 
@@ -734,6 +738,14 @@
     </condition>
   </target>
 
+   <target name="getsvnversion">
+     <exec executable="svnversion"
+           failifexecutionfails="no"
+           output="${basedir}/changenumber.properties">
+       <arg value="${basedir}"/>
+       <arg value="-n"/>
+     </exec>
+   </target>
 
   <target name="cleanjars" depends="setsanityname">
     <delete dir="${basedir}/jars/${sanity.name}"/>

Reply via email to