From b109f1c54d8d0ca10984daa7e81f884fed9a481d Mon Sep 17 00:00:00 2001 From: Peter Powers <pmpowers@usgs.gov> Date: Mon, 27 Mar 2017 11:33:57 -0600 Subject: [PATCH] added version writing and reading --- build.xml | 32 ++++++++++++++- src/org/opensha2/DeaggCalc.java | 3 +- src/org/opensha2/HazardCalc.java | 3 +- src/org/opensha2/internal/Version.java | 55 ++++++++++++++++++++++++++ 4 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 src/org/opensha2/internal/Version.java diff --git a/build.xml b/build.xml index cd64b37d1..e73c69092 100644 --- a/build.xml +++ b/build.xml @@ -5,7 +5,6 @@ nshmp-haz is a platform for conducting seismic hazard calculations </description> - <!-- PROPERTIES --> <property name="src" location="src" /> <property name="test" location="test" /> <property name="lib" location="lib" /> @@ -14,6 +13,9 @@ <property name="docs" location="docs" /> <property name="javadoc" location="${docs}/javadoc" /> + <property name="app.properties" location="${dist}/app.properties" /> + <property name="tstamp.format" value="yyyy-MM-dd'T'HH:mm:ssXXX" /> + <available file=".git" type="dir" property="git.present" /> <property name="reports" location="${docs}/reports" /> <property name="reports.xml" location="${reports}/junit-xml" /> @@ -56,14 +58,40 @@ and internal package; need to check dependencies --> - <target name="jar" depends="compile.source"> + <target name="jar" depends="compile.source,set.app.properties"> <jar destfile="${dist}/nshmp-haz.jar"> <fileset dir="${classes}" /> + <fileset file="${app.properties}" /> <zipfileset src="${guava.jar}" excludes="**/META-INF/**" /> <zipfileset src="${gson.jar}" /> </jar> + <delete file="${app.properties}" /> </target> + <target name="set.app.properties" depends="check.git"> + <tstamp> + <format property="build.date" pattern="${tstamp.format}" /> + </tstamp> + <echo>build.date=${build.date}</echo> + <echo file="${app.properties}">build.date=${build.date}</echo> + <echo file="${app.properties}" append="true">${line.separator}</echo> + <condition property="app.version" value="${git.tag}" else="unknown"> + <isset property="git.tag" /> + </condition> + <echo>app.version=${app.version}</echo> + <echo file="${app.properties}" append="true">app.version=${app.version}</echo> + </target> + + <target name="check.git" if="git.present"> + <exec executable="git" + outputproperty="git.tag" + failifexecutionfails="false"> + <arg value="describe" /> + <arg value="--tags" /> + </exec> + </target> + + <target name="compile"> <mkdir dir="${classes}" /> <javac srcdir="${param.srcdir}" diff --git a/src/org/opensha2/DeaggCalc.java b/src/org/opensha2/DeaggCalc.java index cc2399283..c8ae94c4b 100644 --- a/src/org/opensha2/DeaggCalc.java +++ b/src/org/opensha2/DeaggCalc.java @@ -14,6 +14,7 @@ import org.opensha2.calc.Sites; import org.opensha2.calc.ThreadCount; import org.opensha2.eq.model.HazardModel; import org.opensha2.internal.Logging; +import org.opensha2.internal.Version; import com.google.common.base.Optional; import com.google.common.base.Throwables; @@ -82,7 +83,7 @@ public class DeaggCalc { fh.setFormatter(new Logging.ConsoleFormatter()); log.getParent().addHandler(fh); - log.info(PROGRAM + ": initializing..."); + log.info(PROGRAM + ": " + Version.APP_VERSION); Path modelPath = Paths.get(args[0]); HazardModel model = HazardModel.load(modelPath); diff --git a/src/org/opensha2/HazardCalc.java b/src/org/opensha2/HazardCalc.java index ea5386518..a4976a1f3 100644 --- a/src/org/opensha2/HazardCalc.java +++ b/src/org/opensha2/HazardCalc.java @@ -14,6 +14,7 @@ import org.opensha2.calc.Sites; import org.opensha2.calc.ThreadCount; import org.opensha2.eq.model.HazardModel; import org.opensha2.internal.Logging; +import org.opensha2.internal.Version; import com.google.common.base.Optional; import com.google.common.base.Throwables; @@ -89,7 +90,7 @@ public class HazardCalc { fh.setFormatter(new Logging.ConsoleFormatter()); log.getParent().addHandler(fh); - log.info(PROGRAM + ": initializing..."); + log.info(PROGRAM + ": " + Version.APP_VERSION); Path modelPath = Paths.get(args[0]); HazardModel model = HazardModel.load(modelPath); diff --git a/src/org/opensha2/internal/Version.java b/src/org/opensha2/internal/Version.java new file mode 100644 index 000000000..ff4926bdc --- /dev/null +++ b/src/org/opensha2/internal/Version.java @@ -0,0 +1,55 @@ +package org.opensha2.internal; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Properties; + +/** + * Application version tracking. + * + * @author Peter Powers + */ +public class Version { + + /** Application version. */ + public static final String APP_VERSION; + + /** Build date. */ + public static final String BUILD_DATE; + + static { + + String appVersion = "unknown"; + String buildDate = "now"; + + /* Assume we're running from a jar. */ + try { + InputStream is = Version.class.getResourceAsStream("/app.properties"); + Properties props = new Properties(); + props.load(is); + is.close(); + appVersion = props.getProperty("app.version"); + buildDate = props.getProperty("build.date"); + } catch (Exception e1) { + /* Otherwise check for a repository. */ + Path gitDir = Paths.get(".git"); + if (Files.exists(gitDir)) { + try { + Process pr = Runtime.getRuntime().exec("git describe --tags"); + BufferedReader br = new BufferedReader(new InputStreamReader(pr.getInputStream())); + appVersion = br.readLine(); + br.close(); + /* Detached from repository. */ + } catch (Exception e2) {} + } + } + + APP_VERSION = appVersion; + BUILD_DATE = buildDate; + } + +} -- GitLab