diff --git a/utilities/buildutils/revisioninfo/edu/cornell/mannlib/vitro/utilities/revisioninfo/RevisionInfoBuilder.java b/utilities/buildutils/revisioninfo/edu/cornell/mannlib/vitro/utilities/revisioninfo/RevisionInfoBuilder.java
index b4d1602c8..833755788 100644
--- a/utilities/buildutils/revisioninfo/edu/cornell/mannlib/vitro/utilities/revisioninfo/RevisionInfoBuilder.java
+++ b/utilities/buildutils/revisioninfo/edu/cornell/mannlib/vitro/utilities/revisioninfo/RevisionInfoBuilder.java
@@ -6,14 +6,17 @@ import java.io.BufferedReader;
import java.io.EOFException;
import java.io.File;
import java.io.FileReader;
+import java.io.FileWriter;
import java.io.IOException;
+import java.io.Writer;
import java.util.Arrays;
import java.util.List;
import edu.cornell.mannlib.vitro.utilities.revisioninfo.ProcessRunner.ProcessException;
/**
- * Get release and revision information to display on screen.
+ * Get release and revision information to display on screen. Put this
+ * information into a single line and append it to the specified file.
*
* Ask Subversion for the information. If Subversion is available, and if this
* is a working directory, then we can build the info from the responses we get
@@ -27,6 +30,34 @@ import edu.cornell.mannlib.vitro.utilities.revisioninfo.ProcessRunner.ProcessExc
* "productName ~ unknown ~ unknown"
*/
public class RevisionInfoBuilder {
+
+ /**
+ * Indicates a problem with the command-line arguments.
+ */
+ private static class UsageException extends Exception {
+ UsageException(String message) {
+ super(message);
+ }
+ }
+
+ /**
+ * An object that holds the revision information and a message about how we
+ * obtained it.
+ */
+ private static class Results {
+ final String message;
+ final String infoLine;
+
+ Results(String message, String infoLine) {
+ this.message = message;
+ this.infoLine = infoLine;
+ }
+
+ public String toString() {
+ return message + ": " + infoLine;
+ }
+ }
+
private static final String SVN_DIRECTORY_NAME = ".svn";
private static final String[] SVNVERSION_COMMAND = { "svnversion", "." };
private static final String[] SVN_INFO_COMMAND = { "svn", "info" };
@@ -35,51 +66,63 @@ public class RevisionInfoBuilder {
private final String productName;
private final File productDirectory;
+ private final File resultFile;
- public RevisionInfoBuilder(String[] args) {
- if (args.length != 2) {
- throw new IllegalArgumentException(
- "RevisionInfoBuilder requires 2 arguments, not "
+ private Results results;
+
+ public RevisionInfoBuilder(String[] args) throws UsageException {
+ if (args.length != 3) {
+ throw new UsageException(
+ "RevisionInfoBuilder requires 3 arguments, not "
+ args.length);
}
productName = args[0];
productDirectory = new File(args[1]);
+ resultFile = new File(args[2]);
if (!productDirectory.isDirectory()) {
- throw new IllegalArgumentException("Directory '"
+ throw new UsageException("Directory '"
+ productDirectory.getAbsolutePath() + "' does not exist.");
}
+
+ if (!resultFile.getParentFile().exists()) {
+ throw new UsageException("Result file '"
+ + resultFile.getAbsolutePath()
+ + "' does not exist, and we can't create it "
+ + "because it's parent directory doesn't exist either.");
+ }
}
- private String buildInfo() {
- String infoLine;
- infoLine = buildInfoFromSubversion();
- if (infoLine == null) {
- infoLine = buildInfoFromFile();
+ private void buildInfo() {
+ results = buildInfoFromSubversion();
+ if (results == null) {
+ results = buildInfoFromFile();
}
- if (infoLine == null) {
- infoLine = buildDummyInfo();
+ if (results == null) {
+ results = buildDummyInfo();
}
- return infoLine;
}
- private String buildInfoFromSubversion() {
+ private Results buildInfoFromSubversion() {
if (!isThisASubversionWorkspace()) {
+ System.out.println("Not a Subversion workspace");
return null;
}
String release = assembleReleaseNameFromSubversion();
if (release == null) {
+ System.out.println("Couldn't get release name from Subversion");
return null;
}
-
+
String revision = obtainRevisionLevelFromSubversion();
if (revision == null) {
+ System.out.println("Couldn't get revision level from Subversion");
return null;
}
-
- return buildLine(release, revision);
+
+ return new Results("Info from Subversion", buildLine(release, revision));
}
private boolean isThisASubversionWorkspace() {
@@ -119,7 +162,7 @@ public class RevisionInfoBuilder {
}
}
- private String buildInfoFromFile() {
+ private Results buildInfoFromFile() {
try {
File revisionInfoFile = new File(productDirectory,
REVISION_INFO_FILENAME);
@@ -136,14 +179,16 @@ public class RevisionInfoBuilder {
throw new EOFException("No revision line in file.");
}
- return buildLine(release, revision);
+ return new Results("Info from file", buildLine(release, revision));
} catch (IOException e) {
+ System.out.println("No information from file: " + e);
return null;
}
}
- private String buildDummyInfo() {
- return buildLine(null, null);
+ private Results buildDummyInfo() {
+ String line = buildLine(null, null);
+ return new Results("Using dummy info", line);
}
private String buildLine(String release, String revision) {
@@ -157,13 +202,27 @@ public class RevisionInfoBuilder {
+ INFO_LINE_DELIMITER + revision.trim();
}
+ private void writeLine() throws IOException {
+ Writer writer = null;
+ writer = new FileWriter(resultFile, true);
+ writer.write(results.infoLine + "\n");
+ writer.close();
+
+ System.out.println(results);
+ }
+
public static void main(String[] args) {
try {
- System.out.println(new RevisionInfoBuilder(args).buildInfo());
- } catch (Exception e) {
- e.printStackTrace(System.err);
+ RevisionInfoBuilder builder = new RevisionInfoBuilder(args);
+ builder.buildInfo();
+ builder.writeLine();
+ } catch (UsageException e) {
+ System.err.println(e);
System.err.println("usage: RevisionInfoBuilder [product_name] "
- + "[product_directory] [supplied_values]");
+ + "[product_directory] [output_file]");
+ System.exit(1);
+ } catch (Exception e) {
+ e.printStackTrace();
System.exit(1);
}
}
diff --git a/webapp/build.xml b/webapp/build.xml
index acee159c8..336a225d2 100644
--- a/webapp/build.xml
+++ b/webapp/build.xml
@@ -287,15 +287,12 @@ deploy - Deploy the application directly into the Tomcat webapps directory.
+ failonerror="true">
+
- ${revisionInfo.outputLine}
-