mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

davidely
16.22.2007 f7366f1b18cdb142c8940f6ad48141f757ea4dde
Added ability to perform a coveragediff against an svn revision other than BASE.  This will be used to perform a coveragdiff between two consecutive svn revisions, i.e. after a commit.
2 files modified
56 ■■■■ changed files
opends/build.xml 15 ●●●●● patch | view | raw | blame | history
opends/src/build-tools/org/opends/build/tools/CoverageDiff.java 41 ●●●● patch | view | raw | blame | history
opends/build.xml
@@ -1125,6 +1125,18 @@
      <isset property="test.diff.disable" />
    </condition>
    <!-- The SVN revision to perform the diff against when calculating
         the coverage diff.  It can be a revision number, a timestamp,
         or a revision keyword (BASE, COMMITTED, and PREV make the
         most sense).  The primary use case for this setting is to do
         a coverage diff against the previous revision when there are
         no changes in the working copy.  It defaults to BASE.  -->
    <condition property="test.diff.from.revision" value="BASE">
      <not>
        <isset property="test.diff.from.revision" />
      </not>
    </condition>
    <mkdir dir="${cvgdiff.report.dir}" />
    <taskdef name="coveragediff" classname="org.opends.build.tools.CoverageDiff">
      <classpath>
@@ -1144,7 +1156,8 @@
                  outputpath="${cvgdiff.report.dir}"
                  diffpath="${test.diff.srcpath}"
                  enabled="${test.diff.enabled}"
                  verbose="${test.diff.verbose}" />
                  verbose="${test.diff.verbose}"
                  fromrevision="${test.diff.from.revision}" />
  </target>
opends/src/build-tools/org/opends/build/tools/CoverageDiff.java
@@ -38,11 +38,14 @@
import org.apache.tools.ant.BuildException;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
import org.tmatesoft.svn.core.wc.SVNDiffClient;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc.SVNWCUtil;
public class CoverageDiff extends Task {
  private static final String EOL = System.getProperty("line.separator");
  private boolean verbose = false;
  private boolean enabled = true;
@@ -109,6 +112,14 @@
  private File outputPath;
  private String diffPath;
  //   The SVN revision to perform the diff against when calculating
  //   the coverage diff.  It can be a revision number, a timestamp,
  //   or a revision keyword (BASE, COMMITTED, and PREV make the
  //   most sense).  The primary use case for this setting is to do
  //   a coverage diff against the previous revision when there are
  //   no changes in the working copy.  It defaults to BASE.
  private String fromRevision;
  public void setEmmaDataPath(String file)
  {
    emmaDataPath = new File(file);
@@ -134,6 +145,11 @@
    enabled = bol.toLowerCase().equals("true");
  }
  public void setFromRevision(String fromRevision)
  {
    this.fromRevision = fromRevision;
  }
  public void execute() throws BuildException {
    try {
      innerExecute();
@@ -157,12 +173,19 @@
    {
      throw new BuildException("outputPath attribute is not set. It must be set to a valid directory where the report will be generated");
    }
    if(fromRevision == null)
    {
      throw new BuildException("fromRevision attribute is not set. It must be set to the revision from which the diff is generated (e.g. BASE).");
    }
    if(!enabled)
    {
      return;
    }
    // So we can go over http:// and https:// when diff'ing against previous versions
    DAVRepositoryFactory.setup();
    IReportDataView emmaDataView = null;
    try
    {
@@ -182,6 +205,7 @@
    catch(IOException ie)
    {
      System.out.println("ERROR: An error occurred while processing diff output: " + ie.toString() + " Quitting...");
      ie.printStackTrace();
      return;
    }
    System.out.println("Coverage diff completed in " + (System.currentTimeMillis() - start) + " ms.");
@@ -276,10 +300,13 @@
    SVNDiffClient svnClient = new SVNDiffClient(null, null);
    File diffFile = File.createTempFile("coverage", "diff");
    diffFile.deleteOnExit();
    File diffFile = new File(outputPath, "svn.diff");
    svnClient.doDiff(workspaceRoot, SVNRevision.BASE, workspaceRoot,
    // Most often this will be 'BASE' but it could also be 'PREVIOUS'
    SVNRevision baseRevision = SVNRevision.parse(fromRevision);
    System.out.println("Doing coverage diff from revision: " + baseRevision.toString());
    svnClient.doDiff(workspaceRoot, baseRevision, workspaceRoot,
                     SVNRevision.WORKING, true, false,
                     new FileOutputStream(diffFile));
@@ -503,7 +530,7 @@
      revisionStr = secondFileLine.substring(secondFileLine.lastIndexOf("("));
    }
    if(firstFileLine.endsWith("(revision 0)") &&
    if(firstFileLine.endsWith("(revision 0)") ||
        secondFileLine.endsWith("(revision 0)"))
    {
      workingCopyFlag = "+";
@@ -512,7 +539,9 @@
    if(workingCopyFlag == null || otherCopyFlag == null)
    {
      throw new IOException("Error occurred while parsing diff output");
      throw new IOException("Error occurred while parsing diff output." + EOL +
        "firstFileLine= '" + firstFileLine + "'" + EOL +
        "secondFileLine= '" + secondFileLine + "'");
    }
    else
    {
@@ -593,7 +622,7 @@
    }
    else
    {
      html.addH(2, "Coverage Information Not Available", null);
      html.addH(2, "Coverage Information Not Available (e.g. file is not in src/, is not java, is an interface, or was deleted)", null);
    }
    if(srcTable != null)