From c598f24bf329c4b72ea9f9bbd6ca15dec7e9b2ae Mon Sep 17 00:00:00 2001
From: davidely <davidely@localhost>
Date: Fri, 12 Jan 2007 15:32:55 +0000
Subject: [PATCH] Fixed an issue where coverage diff didn't run on windows and also fixed an ArrayIndexOutOfBounds exception
---
opends/build-tools/src/org/opends/build/tools/CoverageDiff.java | 77 +++++++++++++++++++++++++-------------
1 files changed, 51 insertions(+), 26 deletions(-)
diff --git a/opends/build-tools/src/org/opends/build/tools/CoverageDiff.java b/opends/build-tools/src/org/opends/build/tools/CoverageDiff.java
index c661e95..1893f67 100644
--- a/opends/build-tools/src/org/opends/build/tools/CoverageDiff.java
+++ b/opends/build-tools/src/org/opends/build/tools/CoverageDiff.java
@@ -112,6 +112,8 @@
public void execute() throws BuildException
{
+ long start = System.currentTimeMillis();
+ verboseOut("Starting to execute coveragediff.");
if(emmaDataPath == null)
{
throw new BuildException("emmaDataPath attribute is not set. It must be set to the path of the EMMA data directory");
@@ -130,6 +132,7 @@
try
{
emmaDataView = loadEmmaData(emmaDataPath);
+ verboseOut("Loaded EMMA data.");
}
catch(IOException ie)
{
@@ -146,6 +149,7 @@
System.out.println("ERROR: An error occured while processing diff output: " + ie.toString() + " Quitting...");
return;
}
+ System.out.println("Coverage diff completed in " + (System.currentTimeMillis() - start) + " ms.");
}
@@ -167,22 +171,20 @@
throw new IOException("No EMMA data files found");
}
- if (verbose) System.out.println("processing input files ...");
+ verboseOut("processing input files ...");
- final long start = verbose ? System.currentTimeMillis() : 0;
+ final long start = System.currentTimeMillis();
// merge all data files:
for (final File dataFile : emmaCoverageDataFiles) {
- if (verbose)
- System.out.println("processing input file [" + dataFile.getAbsolutePath() + "] ...");
+ verboseOut("processing input file [" + dataFile.getAbsolutePath() + "] ...");
final IMergeable[] fileData = DataFactory.load(dataFile);
final IMetaData _mdata = (IMetaData) fileData[DataFactory.TYPE_METADATA];
if (_mdata != null) {
- if (verbose)
- System.out.println(" loaded " + _mdata.size() + " metadata entries");
+ verboseOut(" loaded " + _mdata.size() + " metadata entries");
if (mdata == null)
mdata = _mdata;
@@ -192,8 +194,7 @@
final ICoverageData _cdata = (ICoverageData) fileData[DataFactory.TYPE_COVERAGEDATA];
if (_cdata != null) {
- if (verbose)
- System.out.println(" loaded " + _cdata.size() + " coverage data entries");
+ verboseOut(" loaded " + _cdata.size() + " coverage data entries");
if (cdata == null)
cdata = _cdata;
@@ -204,11 +205,7 @@
++emmaCoverageDataFileCount;
}
- if (verbose) {
- final long end = System.currentTimeMillis();
-
- System.out.println(emmaCoverageDataFileCount + " file(s) read and merged in " + (end - start) + " ms");
- }
+ verboseOut(emmaCoverageDataFileCount + " file(s) read and merged in " + (System.currentTimeMillis() - start) + " ms");
if ((mdata == null) || mdata.isEmpty()) {
System.out.println("nothing to do: no metadata found in any of the data files");
@@ -232,12 +229,8 @@
final IReportDataModel model = IReportDataModel.Factory.create (mdata, cdata);
m_view = model.getView (IReportDataView.HIER_SRC_VIEW);
- if (verbose)
- {
- System.out.println(" merged metadata contains " + mdata.size() + " entries");
- System.out.println(" merged coverage data contains " + cdata.size() + " entries");
-
- }
+ verboseOut(" merged metadata contains " + mdata.size() + " entries");
+ verboseOut(" merged coverage data contains " + cdata.size() + " entries");
return m_view;
}
@@ -246,21 +239,35 @@
StringBuilder svnExecCommand = new StringBuilder();
+ verboseOut("svnPath = " + svnPath);
if(svnPath != null && svnPath.isAbsolute() && svnPath.isFile())
{
svnExecCommand.append(svnPath.getAbsolutePath());
}
else
{
- //Just hope its in the path
- svnExecCommand.append("svn");
+ //Just hope its in the path. On Windows, we need to look for svn.exe instead of just svn.
+ if (System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0) {
+ svnExecCommand.append("svn.exe");
+ } else {
+ svnExecCommand.append("svn");
+ }
}
//First verify svn is in path
- final Process checkChild = Runtime.getRuntime().exec(svnExecCommand + " --version");
-
+ final Process checkChild = Runtime.getRuntime().exec(new String[]{svnExecCommand.toString(), "--version"});
+
+ verboseOut("Waiting for '" + svnExecCommand + " --version' to complete.");
+
try
{
+ // We have to consume the output of the process (at least on Windows).
+ BufferedReader reader =
+ new BufferedReader(new InputStreamReader(checkChild.getInputStream()));
+ while (reader.readLine() != null) {
+ // Skip over the output of the process
+ }
+
checkChild.waitFor();
}
catch(InterruptedException ie)
@@ -268,12 +275,17 @@
throw new IOException("svn --version process interrupted");
}
+ verboseOut("'" + svnExecCommand + " --version' has completed.");
+
if(checkChild.exitValue() != 0)
{
throw new IOException("Error returned from SVN call");
}
checkChild.destroy();
+ List<String> cmdArray = new ArrayList<String>();
+ // TODO: ideally, this should build up a command arg array instead of a single string
+ // to guard against svn having spaces in the path. But that isn't too likely
svnExecCommand.append(" diff ");
if(diffPath != null)
@@ -281,7 +293,7 @@
svnExecCommand.append(diffPath);
}
-
+ verboseOut("About to execute " + svnExecCommand.toString());
final Process child = Runtime.getRuntime().exec(svnExecCommand.toString());
InputStream diffOutputStream = child.getInputStream();
return new BufferedReader(new InputStreamReader(diffOutputStream));
@@ -306,7 +318,7 @@
HTMLDocument page = new HTMLDocument (title, ENCODING);
page.addStyle (CSS);
- String line = diffOutput.readLine();
+ String line = diffOutput.readLine();
ArrayList<String> diffOutputFile = new ArrayList<String>();
while(line != null)
@@ -660,7 +672,11 @@
final HTMLTable.ICell lineNumCell = srcRow.newCell();
final HTMLTable.ICell lineTxtCell = srcRow.newCell();
- lineTxtCell.setText(chunkLine.substring(1), true);
+ if (chunkLine.length() == 0) {
+ lineTxtCell.setText(" ", true);
+ } else {
+ lineTxtCell.setText(chunkLine.substring(1), true);
+ }
//This line is either a modified line or a unchanged line
if(!chunkLine.startsWith(otherCopyFlag))
@@ -918,4 +934,13 @@
{
return file.substring(diffPath.toString().length()+1);
}
+
+ // How does this get enabled?
+ private void verboseOut(Object msg)
+ {
+ if (verbose)
+ {
+ System.out.println(msg.toString());
+ }
+ }
}
--
Gitblit v1.10.0