-----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}"/>