You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2016/08/25 18:27:05 UTC
[6/7] incubator-geode git commit: GEODE-1809: Refactor GemFireVersion
GEODE-1809: Refactor GemFireVersion
Clean up dead / broken / unused code and reduce the visible
API methods. Store the version info as a Map to allow it to be
extended more easily. Move scm info into utilities.gradle.
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/93985f96
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/93985f96
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/93985f96
Branch: refs/heads/feature/GEODE-1817
Commit: 93985f96fe5eca16ad301aa09f1719bc213b6034
Parents: 98531a1
Author: Anthony Baker <ab...@apache.org>
Authored: Tue Aug 23 14:32:16 2016 -0700
Committer: Anthony Baker <ab...@apache.org>
Committed: Thu Aug 25 10:00:52 2016 -0700
----------------------------------------------------------------------
build.gradle | 1 -
geode-core/build.gradle | 33 -
.../distributed/internal/StartupMessage.java | 14 -
.../gemfire/internal/GemFireVersion.java | 726 +++++--------------
.../gemstone/gemfire/internal/SystemAdmin.java | 10 +-
.../internal/GemFireVersionJUnitTest.java | 75 +-
.../gemfire/internal/VersionJUnitTest.java | 50 ++
gradle/utilities.gradle | 43 ++
8 files changed, 275 insertions(+), 677 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/93985f96/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index eac68d0..e112eb7 100755
--- a/build.gradle
+++ b/build.gradle
@@ -22,7 +22,6 @@ buildscript {
dependencies {
classpath "gradle.plugin.org.nosphere.apache:creadur-rat-gradle:0.2.0"
- classpath "org.ajoberstar:gradle-git:1.3.2"
classpath 'com.bmuschko:gradle-nexus-plugin:2.3.1'
classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.0.1'
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/93985f96/geode-core/build.gradle
----------------------------------------------------------------------
diff --git a/geode-core/build.gradle b/geode-core/build.gradle
index 1d5ad4a..ea1fce2 100755
--- a/geode-core/build.gradle
+++ b/geode-core/build.gradle
@@ -133,39 +133,6 @@ sourceSets {
}
}
-ext.readScmInfo = {
- try {
- def git = org.ajoberstar.grgit.Grgit.open(currentDir: projectDir)
- try {
- return [
- 'Source-Repository': git.branch.getCurrent().name,
- 'Source-Revision' : git.head().id,
- 'Source-Date' : git.head().getDate().format('yyyy-MM-dd HH:mm:ss Z')
- ] as Properties
- } finally {
- git.close()
- }
- } catch (IllegalArgumentException e) {
- // if we're building from the source distribution, we don't have git so
- // use cached info written during the assembly process
- def buildInfo = file "$rootDir/.buildinfo"
- if (buildInfo.exists()) {
- def props = new Properties()
- new FileInputStream(buildInfo).withStream { fis ->
- props.load(fis)
- }
- return props
- }
-
- logger.warn( '***** Unable to find Git workspace. Using default version information *****' )
- return [
- 'Source-Repository': 'UNKNOWN',
- 'Source-Revision' : 'UNKNOWN',
- 'Source-Date' : new Date().format('yyyy-MM-dd HH:mm:ss Z')
- ] as Properties
- }
-}
-
// Creates the version properties file and writes it to the classes dir
task createVersionPropertiesFile {
def propertiesFile = file(generatedResources + "/com/gemstone/gemfire/internal/GemFireVersion.properties");
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/93985f96/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupMessage.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupMessage.java
index 82f5c88..7b6d853 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupMessage.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupMessage.java
@@ -178,20 +178,6 @@ public final class StartupMessage extends HighPriorityDistributionMessage implem
String myVersion = GemFireVersion.getGemFireVersion();
String theirVersion = this.version;
- int myMajorVersion = GemFireVersion.getMajorVersion(myVersion);
- int theirMajorVersion = GemFireVersion.getMajorVersion(theirVersion);
- int myMinorVersion = GemFireVersion.getMinorVersion(myVersion);
- int theirMinorVersion = GemFireVersion.getMinorVersion(theirVersion);
- // fix for bug 43608
- if (myMajorVersion != theirMajorVersion || myMinorVersion != theirMinorVersion) {
- // now don't reject at this level since it will be handled at
- // JGroups/Connection handshake level
- /*
- rejectionMessage =
- LocalizedStrings.StartupMessage_REJECTED_NEW_SYSTEM_NODE_0_WITH_PRODUCT_VERSION_1_BECAUSE_THE_EXISTING_DISTRIBUTED_SYSTEM_NODE_2_HAS_A_PRODUCT_VERSION_OF_3
- .toLocalizedString(new Object[] {getSender(), this.version, dm.getId(), GemFireVersion.getGemFireVersion()});
- */
- }
if (dm.getTransport().isMcastEnabled() != isMcastEnabled) {
rejectionMessage =
LocalizedStrings.StartupMessage_REJECTED_NEW_SYSTEM_NODE_0_BECAUSE_ISMCASTENABLED_1_DOES_NOT_MATCH_THE_DISTRIBUTED_SYSTEM_IT_IS_ATTEMPTING_TO_JOIN
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/93985f96/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireVersion.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireVersion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireVersion.java
index baf03b1..9bd3d4f 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireVersion.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireVersion.java
@@ -16,335 +16,101 @@
*/
package com.gemstone.gemfire.internal;
+import java.io.File;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.net.URL;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import com.gemstone.gemfire.InternalGemFireError;
import com.gemstone.gemfire.SystemFailure;
import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
/**
* This class provides build and version information about GemFire.
* It gathers this information from the resource property file
* for this class.
*/
public class GemFireVersion {
-
private static String RESOURCE_NAME = "GemFireVersion.properties";
-
- /** The singleton instance */
- private static GemFireVersion instance;
-
- /** Constant for the GemFire version Resource Property entry */
- private static final String PRODUCT_NAME = "Product-Name";
-
- /** Constant for the GemFire version Resource Property entry */
- private static final String GEMFIRE_VERSION = "Product-Version";
-
- /** Constant for the source code date Resource Property entry */
- private static final String SOURCE_DATE = "Source-Date";
-
- /** Constant for the source code revision Resource Property entry */
- private static final String SOURCE_REVISION = "Source-Revision";
-
- /** Constant for the source code repository Resource Property entry */
- private static final String SOURCE_REPOSITORY = "Source-Repository";
-
- /** Constant for the build date Resource Property entry */
- private static final String BUILD_DATE = "Build-Date";
-
- /** Constant for the build id Resource Property entry */
- private static final String BUILD_ID = "Build-Id";
-
- /** Constant for the build Java version Resource Property entry */
- private static final String BUILD_PLATFORM = "Build-Platform";
-
- /** Constant for the build Java version Resource Property entry */
- private static final String BUILD_JAVA_VERSION = "Build-Java-Version";
-
- //////////////////// Instance Fields ////////////////////
-
- /** Error message to display instead of the version information */
- private String error = null;
-
- /** The name of this product */
- private String productName;
-
- /** This product's version */
- private String gemfireVersion;
-
- /** The version of GemFire native code library */
- private String nativeVersion;
-
- /** The date that the source code for GemFire was last updated */
- private String sourceDate;
- /** The revision of the source code used to build GemFire */
- private String sourceRevision;
-
- /** The repository in which the source code for GemFire resides */
- private String sourceRepository;
-
- /** The date on which GemFire was built */
- private String buildDate;
-
- /** The ID of the GemFire build */
- private String buildId;
-
- /** The platform on which GemFire was built */
- private String buildPlatform;
-
- /** The version of Java that was used to build GemFire */
- private String buildJavaVersion;
+ /** The singleton instance */
+ private static VersionDescription description;
- //////////////////// Static Methods ////////////////////
+ private GemFireVersion() {
+ }
- /**
- * Returns (or creates) the singleton instance of this class
- */
- private static GemFireVersion getInstance() {
- if (instance == null) {
- instance = new GemFireVersion();
+ private static synchronized VersionDescription getDescription() {
+ if (description == null) {
+ String name = GemFireVersion.class.getPackage().getName()
+ .replace('.', '/') + "/" + RESOURCE_NAME;
+ description = new VersionDescription(name);
}
-
- return instance;
+ return description;
+ }
+
+ public static void main(String[] args) {
+ System.out.println(asString());
}
- /**
- * Returns the name of this product
- */
public static String getProductName() {
- GemFireVersion v = getInstance();
- if (v.error != null) {
- return v.error;
-
- } else {
- return v.productName;
- }
+ return getDescription().getProperty(VersionDescription.PRODUCT_NAME);
}
- /**
- * Returns the version of GemFire being used
- */
public static String getGemFireVersion() {
- GemFireVersion v = getInstance();
- if (v.error != null) {
- return v.error;
-
- } else {
- return v.gemfireVersion;
- }
- }
-
- private static String stripSpaces(String s) {
- StringBuffer result = new StringBuffer(s);
- while (result.charAt(0) == ' ') {
- result.deleteCharAt(0);
- }
- while (result.charAt(result.length()-1) == ' ') {
- result.deleteCharAt(result.length()-1);
- }
- return result.toString();
- }
-
- /**
- * Returns the version of GemFire native code library being used
- */
- public static String getNativeCodeVersion() {
- GemFireVersion v = getInstance();
- if (v.error != null) {
- return v.error;
-
- } else {
- return v.nativeVersion;
- }
- }
- public static String getJavaCodeVersion() {
- GemFireVersion v = getInstance();
- if (v.error != null) {
- return v.error;
-
- } else {
- StringBuffer result = new StringBuffer(80);
- result.append(GemFireVersion.getGemFireVersion())
- .append(' ')
- .append(GemFireVersion.getBuildId())
- .append(' ')
- .append(GemFireVersion.getBuildDate())
- .append(" javac ")
- .append(GemFireVersion.getBuildJavaVersion());
- return result.toString();
- }
+ return getDescription().getProperty(VersionDescription.GEMFIRE_VERSION);
}
- /**
- * Returns the date of the source code from which GemFire was built
- */
public static String getSourceDate() {
- GemFireVersion v = getInstance();
- if (v.error != null) {
- return v.error;
-
- } else {
- return v.sourceDate;
- }
+ return getDescription().getProperty(VersionDescription.SOURCE_DATE);
}
- /**
- * Returns the revision of the source code on which GemFire was
- * built.
- *
- * @since GemFire 4.0
- */
- public static String getSourceRevision() {
- GemFireVersion v = getInstance();
- if (v.error != null) {
- return v.error;
-
- } else {
- return v.sourceRevision;
- }
- }
-
- /**
- * Returns the source code repository from which GemFire was built.
- *
- * @since GemFire 4.0
- */
public static String getSourceRepository() {
- GemFireVersion v = getInstance();
- if (v.error != null) {
- return v.error;
-
- } else {
- return v.sourceRepository;
- }
+ return getDescription().getProperty(VersionDescription.SOURCE_REPOSITORY);
}
- /**
- * Returns the date on which GemFire was built
- */
- public static String getBuildDate() {
- GemFireVersion v = getInstance();
- if (v.error != null) {
- return v.error;
-
- } else {
- return v.buildDate;
- }
+ public static String getSourceRevision() {
+ return getDescription().getProperty(VersionDescription.SOURCE_REVISION);
}
- /**
- * Returns the id of the GemFire build
- */
public static String getBuildId() {
- GemFireVersion v = getInstance();
- if (v.error != null) {
- return v.error;
+ return getDescription().getProperty(VersionDescription.BUILD_ID);
+ }
- } else {
- return v.buildId;
- }
+ public static String getBuildDate() {
+ return getDescription().getProperty(VersionDescription.BUILD_DATE);
}
- /**
- * Returns the platform on which GemFire was built
- */
public static String getBuildPlatform() {
- GemFireVersion v = getInstance();
- if (v.error != null) {
- return v.error;
-
- } else {
- return v.buildPlatform;
- }
+ return getDescription().getProperty(VersionDescription.BUILD_PLATFORM);
}
- /**
- * Returns the version of Java used to build GemFire
- */
public static String getBuildJavaVersion() {
- GemFireVersion v = getInstance();
- if (v.error != null) {
- return v.error;
-
- } else {
- return v.buildJavaVersion;
- }
+ return getDescription().getProperty(VersionDescription.BUILD_JAVA_VERSION);
}
- //////////////////// Constructors ////////////////////
+ public static String getGemFireJarFileName() {
+ return "geode-core-" + GemFireVersion.getGemFireVersion() +".jar";
+ }
- /**
- * Private constructor that read the resource properties
- * and extracts interesting pieces of information from it
- */
- private GemFireVersion() {
- String name =
- GemFireVersion.class.getPackage().getName().replace('.', '/');
- name = name + "/" + RESOURCE_NAME;
-
- InputStream is = ClassPathLoader.getLatest().getResourceAsStream(getClass(), name);
- if (is == null) {
- error = LocalizedStrings.GemFireVersion_COULD_NOT_FIND_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_0.toLocalizedString(RESOURCE_NAME);
- return;
- }
- Properties props = new Properties();
- try {
- props.load(is);
- } catch (Exception ex) {
- error = LocalizedStrings.GemFireVersion_COULD_NOT_READ_PROPERTIES_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_0_BECAUSE_1.toLocalizedString(new Object[] {RESOURCE_NAME, ex});
- return;
- }
+ public static void print(PrintWriter pw) {
+ getDescription().print(pw);
+ }
+
+ public static void print(PrintStream ps) {
+ print(new PrintWriter(ps, true));
+ }
- this.nativeVersion = SmHelper.getNativeVersion();
- this.productName = props.getProperty(PRODUCT_NAME);
- if (this.productName == null) {
- error = LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {PRODUCT_NAME, RESOURCE_NAME});
- return;
- }
- this.gemfireVersion = props.getProperty(GEMFIRE_VERSION);
- if (this.gemfireVersion == null) {
- error = LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {GEMFIRE_VERSION, RESOURCE_NAME});
- return;
- }
- this.sourceDate = props.getProperty(SOURCE_DATE);
- if (this.sourceDate == null) {
- error = LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {SOURCE_DATE, RESOURCE_NAME});
- return;
- }
- this.sourceRevision = props.getProperty(SOURCE_REVISION);
- if (this.sourceRevision == null) {
- error = LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {SOURCE_REVISION, RESOURCE_NAME});
- return;
- }
- this.sourceRepository = props.getProperty(SOURCE_REPOSITORY);
- if (this.sourceRepository == null) {
- error = LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {SOURCE_REPOSITORY, RESOURCE_NAME});
- return;
- }
- this.buildDate = props.getProperty(BUILD_DATE);
- if (this.buildDate == null) {
- error = LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_DATE, RESOURCE_NAME});
- return;
- }
- this.buildId = props.getProperty(BUILD_ID);
- if (this.buildId == null) {
- error = LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_ID, RESOURCE_NAME});
- return;
- }
- this.buildPlatform = props.getProperty(BUILD_PLATFORM);
- if (this.buildPlatform == null) {
- error = LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_PLATFORM, RESOURCE_NAME});
- return;
- }
- this.buildJavaVersion = props.getProperty(BUILD_JAVA_VERSION);
- if (this.buildJavaVersion == null) {
- error = LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_JAVA_VERSION, RESOURCE_NAME});
- return;
- }
+ public static String asString() {
+ StringWriter sw = new StringWriter(256);
+ PrintWriter pw = new PrintWriter(sw);
+ print(pw);
+ pw.flush();
+ return sw.toString();
}
/** Public method that returns the URL of the gemfire jar file */
@@ -385,293 +151,141 @@ public class GemFireVersion {
return csLoc;
}
- public static String getGemFireJarFileName() {
- return "geode-core-" + GemFireVersion.getGemFireVersion() +".jar";
- }
+ static class VersionDescription {
+ /** Constant for the GemFire version Resource Property entry */
+ static final String PRODUCT_NAME = "Product-Name";
- private final static String VER_FILE_NAME = "GemFireVersion.properties";
- private final static String JAR_VER_NAME = "gemfire-core-jar";
-
- public static void createVersionFile() {
- String jarVersion = stripSpaces(GemFireVersion.getJavaCodeVersion());
- File libDir = SystemAdmin.findGemFireLibDir();
- if (libDir == null) {
- throw new RuntimeException(LocalizedStrings.GemFireVersion_COULD_NOT_DETERMINE_PRODUCT_LIB_DIRECTORY.toLocalizedString());
- }
- File versionPropFile = new File(libDir, VER_FILE_NAME);
- Properties props = new Properties();
- props.setProperty(JAR_VER_NAME, jarVersion);
- try {
- FileOutputStream out = new FileOutputStream(versionPropFile);
- props.store(out, "Expected versions for this product build as of");
- out.close();
- } catch (IOException ex) {
- throw new RuntimeException(LocalizedStrings.GemFireVersion_COULD_NOT_WRITE_0_BECAUSE_1.toLocalizedString(new Object[] {versionPropFile, ex.toString()}));
- }
- System.out.println("Created \"" + versionPropFile + "\"");
- }
- /**
- * Encodes all available version information into a string and then
- * returns that string.
- */
- public static String asString() {
- StringWriter sw = new StringWriter(256);
- PrintWriter pw = new PrintWriter(sw);
- print(pw);
- pw.flush();
- return sw.toString();
- }
- /**
- * Prints all available version information (excluding source code
- * information) to the given <code>PrintWriter</code> in a
- * standard format.
- */
- public static void print(PrintWriter pw) {
- print(pw, true);
+ /** Constant for the GemFire version Resource Property entry */
+ static final String GEMFIRE_VERSION = "Product-Version";
+
+ /** Constant for the source code date Resource Property entry */
+ static final String SOURCE_DATE = "Source-Date";
+
+ /** Constant for the source code revision Resource Property entry */
+ static final String SOURCE_REVISION = "Source-Revision";
+
+ /** Constant for the source code repository Resource Property entry */
+ static final String SOURCE_REPOSITORY = "Source-Repository";
+
+ /** Constant for the build date Resource Property entry */
+ static final String BUILD_DATE = "Build-Date";
+
+ /** Constant for the build id Resource Property entry */
+ static final String BUILD_ID = "Build-Id";
+
+ /** Constant for the build Java version Resource Property entry */
+ static final String BUILD_PLATFORM = "Build-Platform";
+
+ /** Constant for the build Java version Resource Property entry */
+ static final String BUILD_JAVA_VERSION = "Build-Java-Version";
+
+ /** the version properties */
+ private final Properties description;
+
+ /** Error message to display instead of the version information */
+ private final String error;
+
+ public VersionDescription(String name) {
+ InputStream is = ClassPathLoader.getLatest().getResourceAsStream(getClass(), name);
+ if (is == null) {
+ error = LocalizedStrings.GemFireVersion_COULD_NOT_FIND_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_0.toLocalizedString(RESOURCE_NAME);
+ description = null;
+ return;
+ }
+
+ description = new Properties();
+ try {
+ description.load(is);
+ } catch (Exception ex) {
+ error = LocalizedStrings.GemFireVersion_COULD_NOT_READ_PROPERTIES_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_0_BECAUSE_1.toLocalizedString(new Object[] {RESOURCE_NAME, ex});
+ return;
+ }
+ error = validate();
}
- /**
- * Prints all available version information to the given
- * <code>PrintWriter</code> in a standard format.
- *
- * @param printSourceInfo
- * Should information about the source code be printed?
- */
- public static void print(PrintWriter pw,
- boolean printSourceInfo) {
- String jarVersion = stripSpaces(GemFireVersion.getJavaCodeVersion());
- pw.println("Java version: " + jarVersion);
- String libVersion = stripSpaces(GemFireVersion.getNativeCodeVersion());
- pw.println("Native version: " + libVersion);
- File libDir = SystemAdmin.findGemFireLibDir();
- if (libDir != null) {
- File versionPropFile = new File(libDir, VER_FILE_NAME);
- if (versionPropFile.exists()) {
- try {
- Properties props = new Properties();
- FileInputStream inStream = new FileInputStream(versionPropFile);
- try {
- props.load(inStream);
- }
- finally {
- inStream.close();
- }
- String expectedJarVersion = props.getProperty(JAR_VER_NAME);
- if (expectedJarVersion != null) {
- if (!expectedJarVersion.equals(jarVersion)) {
- pw.println(LocalizedStrings.GemFireVersion_WARNING_EXPECTED_JAVA_VERSION_0.toLocalizedString(expectedJarVersion));
- }
- }
- } catch (IOException ex) {
- pw.println(LocalizedStrings.GemFireVersion_WARNING_FAILED_TO_READ_0_BECAUSE_1.toLocalizedString(new Object[] {versionPropFile, ex}));
- }
-// } else {
-// pw.println(LocalizedStrings.GemFireVersion_WARNING_COULD_NOT_FIND_0.toLocalizedString(versionPropFile));
- }
-// } else {
-// pw.println(LocalizedStrings.GemFireVersion_WARNING_COULD_NOT_DETERMINE_THE_PRODUCTS_LIB_DIRECTORY.toLocalizedString());
- }
-
- if (printSourceInfo) {
- String sourceRevision = GemFireVersion.getSourceRevision();
- pw.println("Source revision: " + sourceRevision);
-
- String sourceRepository =
- GemFireVersion.getSourceRepository();
- pw.println("Source repository: " + sourceRepository);
- }
-
- InetAddress host = null;
- try {
- host = SocketCreator.getLocalHost();
- }
- catch (VirtualMachineError err) {
- SystemFailure.initiateFailure(err);
- // If this ever returns, rethrow the error. We're poisoned
- // now, so don't let this thread continue.
- throw err;
- }
- catch (Throwable t) {
- // Whenever you catch Error or Throwable, you must also
- // catch VirtualMachineError (see above). However, there is
- // _still_ a possibility that you are dealing with a cascading
- // error condition, so you also need to check to see if the JVM
- // is still usable:
- SystemFailure.checkFailure();
- }
- int cpuCount = Runtime.getRuntime().availableProcessors();
- pw.println(LocalizedStrings.GemFireVersion_RUNNING_ON_0.toLocalizedString(
- host
- + ", " + cpuCount + " cpu(s)"
- + ", " + System.getProperty("os.arch")
- + " " + System.getProperty("os.name")
- + " " + System.getProperty("os.version")
- ));
+ public String getProperty(String key) {
+ if (error != null) {
+ return error;
+ }
+ return description.getProperty(key);
}
-
- /**
- * Prints all available version information (excluding information
- * about the source code) to the given <code>PrintStream</code> in
- * a standard format.
- */
- public static void print(PrintStream ps) {
- print(ps, true);
+
+ public String getNativeCodeVersion() {
+ return SmHelper.getNativeVersion();
}
+
+ private void print(PrintWriter pw) {
+ for (Entry<?,?> props : description.entrySet()) {
+ pw.println(props.getKey() + ": " + props.getValue());
+ }
- /**
- * Prints all available version information to the given
- * <code>PrintStream</code> in a standard format.
- *
- * @param printSourceInfo
- * Should information about the source code be printed?
- */
- public static void print(PrintStream ps,
- boolean printSourceInfo) {
- PrintWriter pw = new PrintWriter(ps);
- print(pw, printSourceInfo);
- pw.flush();
+ // not stored in the description map
+ pw.println("Native version: " + getNativeCodeVersion());
+ printHostInfo(pw);
+ }
+
+ private void printHostInfo(PrintWriter pw)
+ throws InternalGemFireError, Error, VirtualMachineError {
+ try {
+ StringBuffer sb = new StringBuffer(SocketCreator.getLocalHost().toString())
+ .append(", ")
+ .append(Runtime.getRuntime().availableProcessors()).append(" cpu(s), ")
+ .append(System.getProperty("os.arch")).append(' ')
+ .append(System.getProperty("os.name")).append(' ')
+ .append(System.getProperty("os.version")).append(' ');
+ pw.println(LocalizedStrings.GemFireVersion_RUNNING_ON_0.toLocalizedString(sb.toString()));
+ } catch (VirtualMachineError err) {
+ SystemFailure.initiateFailure(err);
+ // If this ever returns, rethrow the error. We're poisoned
+ // now, so don't let this thread continue.
+ throw err;
+ } catch (Throwable t) {
+ // Whenever you catch Error or Throwable, you must also
+ // catch VirtualMachineError (see above). However, there is
+ // _still_ a possibility that you are dealing with a cascading
+ // error condition, so you also need to check to see if the JVM
+ // is still usable:
+ SystemFailure.checkFailure();
+ }
}
-
- /////////////////////// Main Program ////////////////////
-// private static final PrintStream out = System.out;
-// private static final PrintStream err = System.err;
+ private String validate() {
+ if (getProperty(PRODUCT_NAME) == null) {
+ return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {PRODUCT_NAME, RESOURCE_NAME});
+ }
- /**
- * Populates the gemfireVersion.properties file
- */
- public static void main(String[] args) {
- print(System.out);
- }
+ if (getProperty(GEMFIRE_VERSION) == null) {
+ return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {GEMFIRE_VERSION, RESOURCE_NAME});
+ }
- private static final Pattern MAJOR_MINOR = Pattern.compile("(\\d+)\\.(\\d*)(.*)");
- private static final Pattern RELEASE = Pattern.compile("\\.(\\d*)(.*)");
- private static final Pattern MAJOR_MINOR_RELEASE = Pattern.compile("(\\d+)\\.(\\d*)\\.(\\d*)(.*)");
-
- public static int getMajorVersion(String v) {
- int majorVersion = 0;
- Matcher m = MAJOR_MINOR.matcher(v);
- if (m.matches()) {
- String digits = m.group(1);
- if (digits != null && digits.length() > 0) {
- majorVersion = Integer.decode(digits).intValue();
+ if (getProperty(SOURCE_DATE) == null) {
+ return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {SOURCE_DATE, RESOURCE_NAME});
}
- }
- return majorVersion;
- }
- public static int getMinorVersion(String v) {
- int minorVersion = 0;
- Matcher m = MAJOR_MINOR.matcher(v);
- if (m.matches()) {
- String digits = m.group(2);
- if (digits != null && digits.length() > 0) {
- minorVersion = Integer.decode(digits).intValue();
+ if (getProperty(SOURCE_REVISION) == null) {
+ return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {SOURCE_REVISION, RESOURCE_NAME});
}
- }
- return minorVersion;
- }
- public static int getRelease(String v) {
- int release = 0;
- Matcher m = MAJOR_MINOR.matcher(v);
- if (m.matches()) {
- String others = m.group(3);
- Matcher r = RELEASE.matcher(others);
- if (r.matches()) {
- String digits = r.group(1);
- if (digits != null && digits.length() > 0) {
- try {
- release = Integer.decode(digits).intValue();
- } catch (NumberFormatException e) {
- release = 0;
- }
- }
+ if (getProperty(SOURCE_REPOSITORY) == null) {
+ return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {SOURCE_REPOSITORY, RESOURCE_NAME});
}
- }
- return release;
- }
-
- public static int getBuild(String v) {
- int build = 0;
- Matcher m = MAJOR_MINOR_RELEASE.matcher(v);
- if (m.matches()) {
- String buildStr = m.group(4);
- Matcher b = RELEASE.matcher(buildStr);
- if (b.matches()) {
- String digits = b.group(1);
- if (digits != null && digits.length() > 0) {
- try {
- build = Integer.decode(digits).intValue();
- } catch (NumberFormatException e) {
- build = 0;
- }
- }
+
+ if (getProperty(BUILD_DATE) == null) {
+ return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_DATE, RESOURCE_NAME});
}
- }
- return build;
- }
-
- /**
- * Compare version's sections major, minor, release one by one
- *
- * @return >0: v1 is newer than v2
- * 0: same
- * <0: v1 is older than v2
- * @deprecated please use the {@link Version} class to read the version
- * of the local member and compare versions for backwards compatibility
- * purposes. see also {@link SerializationVersions} for how to make backwards
- * compatible messages.
- */
- public static int compareVersions(String v1, String v2) {
- return compareVersions(v1, v2, true);
- }
-
- /*
- * Compare version's sections major, minor, release one by one
- *
- * @param v1 the first version
- * @param v2 the second version
- * @param includeBuild whether to also compare the build numbers
- *
- * @return: >0: v1 is newer than v2
- * 0: same
- * <0: v1 is older than v2
- */
- public static int compareVersions(String v1, String v2, boolean includeBuild) {
- int major1, minor1, release1, build1;
- int major2, minor2, release2, build2;
-
- if (v1 == null && v2 != null) return -1;
- if (v1 != null && v2 == null) return 1;
- if (v1 == null && v2 == null) return 0;
-
- major1 = getMajorVersion(v1);
- major2 = getMajorVersion(v2);
-
- minor1 = getMinorVersion(v1);
- minor2 = getMinorVersion(v2);
-
- release1 = getRelease(v1);
- release2 = getRelease(v2);
- if (major1 > major2) return 1;
- if (major1 < major2) return -1;
-
- if (minor1 > minor2) return 1;
- if (minor1 < minor2) return -1;
+ if (getProperty(BUILD_ID) == null) {
+ return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_ID, RESOURCE_NAME});
+ }
- if (release1 > release2) return 1;
- if (release1 < release2) return -1;
-
- if (includeBuild) {
- build1 = getBuild(v1);
- build2 = getBuild(v2);
-
- if (build1 > build2) return 1;
- if (build1 < build2) return -1;
- }
+ if (getProperty(BUILD_PLATFORM) == null) {
+ return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_PLATFORM, RESOURCE_NAME});
+ }
- return 0;
+ if (getProperty(BUILD_JAVA_VERSION) == null) {
+ return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_JAVA_VERSION, RESOURCE_NAME});
+ }
+ return null;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/93985f96/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemAdmin.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemAdmin.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemAdmin.java
index e52950f..1757d5c 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemAdmin.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemAdmin.java
@@ -2080,16 +2080,8 @@ public class SystemAdmin {
LocalizedStrings.SystemAdmin_GEMFIRE_PRODUCT_DIRECTORY_0
.toLocalizedString(getProductDir()));
- if (cmdLine.size() == 1 && "CREATE".equals(cmdLine.get(0))) {
- GemFireVersion.createVersionFile();
+ GemFireVersion.print(System.out);
- } else if (cmdLine.size() == 1 &&
- "FULL".equalsIgnoreCase(String.valueOf(cmdLine.get(0)))) {
- GemFireVersion.print(System.out, true);
-
- } else {
- GemFireVersion.print(System.out, false);
- }
} else if (cmd.equalsIgnoreCase("help")) {
if (cmdLine.size() > 1) {
System.err.println( LocalizedStrings.SystemAdmin_ERROR_UNEXPECTED_COMMAND_LINE_ARGUMENTS_0.toLocalizedString(join(cmdLine)));
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/93985f96/geode-core/src/test/java/com/gemstone/gemfire/internal/GemFireVersionJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/GemFireVersionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/GemFireVersionJUnitTest.java
index fc4ab1b..8369d1f 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/internal/GemFireVersionJUnitTest.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/GemFireVersionJUnitTest.java
@@ -16,10 +16,7 @@
*/
package com.gemstone.gemfire.internal;
-import static org.junit.Assert.*;
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
+import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.junit.experimental.categories.Category;
@@ -40,67 +37,17 @@ public class GemFireVersionJUnitTest {
*/
@Test
public void testPrintInfo() {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- PrintStream ps = new PrintStream(baos);
- GemFireVersion.print(ps);
- final String versionOutput = baos.toString();
+ final String versionOutput = GemFireVersion.asString();
System.out.println(versionOutput);
- assertTrue(versionOutput.contains("Java version:"));
- assertTrue(versionOutput.contains("Native version:"));
- assertTrue(versionOutput.contains("Source revision:"));
- assertTrue(versionOutput.contains("Source repository:"));
- assertTrue(versionOutput.contains("Running on:"));
- }
-
- @Test
- public void testMajorMinorVersions() {
- assertEquals(1, GemFireVersion.getMajorVersion("1.0.3"));
- assertEquals(33, GemFireVersion.getMajorVersion("33.0.3"));
- assertEquals(7, GemFireVersion.getMinorVersion("1.7.3"));
- assertEquals(79, GemFireVersion.getMinorVersion("1.79.3"));
- assertEquals(0, GemFireVersion.getMinorVersion("1.RC1"));
- assertEquals(5, GemFireVersion.getMinorVersion("1.5Beta2"));
-
- assertEquals(13, GemFireVersion.getBuild("7.0.2.13"));
- assertEquals(0, GemFireVersion.getBuild("1.7.3"));
- assertEquals(0, GemFireVersion.getBuild("1.79.3"));
- assertEquals(0, GemFireVersion.getBuild("1.RC1"));
- assertEquals(0, GemFireVersion.getBuild("1.5Beta2"));
-
- assertTrue("7.0 should be < 7.0.2.14", GemFireVersion.compareVersions("7.0", "7.0.2.14", true) < 0);
- assertTrue("7.0.0 should be < 7.0.2.14", GemFireVersion.compareVersions("7.0.0", "7.0.2.14", true) < 0);
- assertTrue("7.0.2 should be < 7.0.2.14", GemFireVersion.compareVersions("7.0.2", "7.0.2.14", true) < 0);
- assertTrue("7.0.3 should be > 7.0.2.14", GemFireVersion.compareVersions("7.0.3", "7.0.2.14", true) > 0);
- assertTrue("7.0.1.15 should be < 7.0.2.14", GemFireVersion.compareVersions("7.0.1.15", "7.0.2.14", true) < 0);
- assertTrue("7.0.2.13 should be < 7.0.2.14", GemFireVersion.compareVersions("7.0.2.13", "7.0.2.14", true) < 0);
- assertTrue("7.0.2.14 should be > 7.0.2.13", GemFireVersion.compareVersions("7.0.2.14", "7.0.2.13", true) > 0);
- assertTrue("7.0.2.14 should be == 7.0.2.14", GemFireVersion.compareVersions("7.0.2.14", "7.0.2.14", true) == 0);
- assertTrue("7.0.2.12 should be < 7.0.2.13", GemFireVersion.compareVersions("7.0.2.12", "7.0.2.13", true) < 0);
- assertTrue("7.0.2.13 should be == 7.0.2.13", GemFireVersion.compareVersions("7.0.2.13", "7.0.2.13", true) == 0);
- assertTrue("7.0.2.15 should be > 7.0.2.13", GemFireVersion.compareVersions("7.0.2.14", "7.0.2.13", true) > 0);
- }
-
- @Test
- public void testVersionClass() throws Exception {
- compare(Version.GFE_662, Version.GFE_66);
- compare(Version.GFE_6622, Version.GFE_662);
- compare(Version.GFE_71, Version.GFE_70);
- compare(Version.GFE_80, Version.GFE_70);
- compare(Version.GFE_80, Version.GFE_71);
- compare(Version.GFE_81, Version.GFE_70);
- compare(Version.GFE_81, Version.GFE_71);
- compare(Version.GFE_81, Version.GFE_80);
- }
-
- private void compare(Version later, Version earlier) {
- assertTrue(later.compareTo(earlier) > 0);
- assertTrue(later.equals(later));
- assertTrue(later.compareTo(later) == 0);
- assertTrue(earlier.compareTo(later) < 0);
-
- assertTrue(later.compareTo(earlier.ordinal()) > 0);
- assertTrue(later.compareTo(later.ordinal()) == 0);
- assertTrue(earlier.compareTo(later.ordinal()) < 0);
+ assertTrue(versionOutput.contains(GemFireVersion.VersionDescription.PRODUCT_NAME));
+ assertTrue(versionOutput.contains(GemFireVersion.VersionDescription.GEMFIRE_VERSION));
+ assertTrue(versionOutput.contains(GemFireVersion.VersionDescription.SOURCE_DATE));
+ assertTrue(versionOutput.contains(GemFireVersion.VersionDescription.SOURCE_REVISION));
+ assertTrue(versionOutput.contains(GemFireVersion.VersionDescription.SOURCE_REPOSITORY));
+ assertTrue(versionOutput.contains(GemFireVersion.VersionDescription.BUILD_DATE));
+ assertTrue(versionOutput.contains(GemFireVersion.VersionDescription.BUILD_ID));
+ assertTrue(versionOutput.contains(GemFireVersion.VersionDescription.BUILD_PLATFORM));
+ assertTrue(versionOutput.contains(GemFireVersion.VersionDescription.BUILD_JAVA_VERSION));
}
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/93985f96/geode-core/src/test/java/com/gemstone/gemfire/internal/VersionJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/VersionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/VersionJUnitTest.java
new file mode 100644
index 0000000..dcc7049
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/VersionJUnitTest.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.gemstone.gemfire.internal;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+
+@Category(UnitTest.class)
+public class VersionJUnitTest {
+ @Test
+ public void testVersionClass() throws Exception {
+ compare(Version.GFE_662, Version.GFE_66);
+ compare(Version.GFE_6622, Version.GFE_662);
+ compare(Version.GFE_71, Version.GFE_70);
+ compare(Version.GFE_80, Version.GFE_70);
+ compare(Version.GFE_80, Version.GFE_71);
+ compare(Version.GFE_81, Version.GFE_70);
+ compare(Version.GFE_81, Version.GFE_71);
+ compare(Version.GFE_81, Version.GFE_80);
+ }
+
+ private void compare(Version later, Version earlier) {
+ assertTrue(later.compareTo(earlier) > 0);
+ assertTrue(later.equals(later));
+ assertTrue(later.compareTo(later) == 0);
+ assertTrue(earlier.compareTo(later) < 0);
+
+ assertTrue(later.compareTo(earlier.ordinal()) > 0);
+ assertTrue(later.compareTo(later.ordinal()) == 0);
+ assertTrue(earlier.compareTo(later.ordinal()) < 0);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/93985f96/gradle/utilities.gradle
----------------------------------------------------------------------
diff --git a/gradle/utilities.gradle b/gradle/utilities.gradle
index 5f597f6..d4d616f 100644
--- a/gradle/utilities.gradle
+++ b/gradle/utilities.gradle
@@ -14,6 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+buildscript {
+ repositories {
+ maven { url "https://plugins.gradle.org/m2/" }
+ }
+
+ dependencies {
+ classpath "org.ajoberstar:gradle-git:1.3.2"
+ }
+}
+
allprojects {
//These methods will be added to each individual project.
//Use this for methods that access project variables (like project.name)
@@ -41,5 +51,38 @@ allprojects {
signArchives.enabled = false
}
}
+
+ readScmInfo = {
+ try {
+ def git = org.ajoberstar.grgit.Grgit.open(currentDir: projectDir)
+ try {
+ return [
+ 'Source-Repository': git.branch.getCurrent().name,
+ 'Source-Revision' : git.head().id,
+ 'Source-Date' : git.head().getDate().format('yyyy-MM-dd HH:mm:ss Z')
+ ] as Properties
+ } finally {
+ git.close()
+ }
+ } catch (IllegalArgumentException e) {
+ // if we're building from the source distribution, we don't have git so
+ // use cached info written during the assembly process
+ def buildInfo = file "$rootDir/.buildinfo"
+ if (buildInfo.exists()) {
+ def props = new Properties()
+ new FileInputStream(buildInfo).withStream { fis ->
+ props.load(fis)
+ }
+ return props
+ }
+
+ logger.warn( '***** Unable to find Git workspace. Using default version information *****' )
+ return [
+ 'Source-Repository': 'UNKNOWN',
+ 'Source-Revision' : 'UNKNOWN',
+ 'Source-Date' : new Date().format('yyyy-MM-dd HH:mm:ss Z')
+ ] as Properties
+ }
+ }
}
}