<!--
   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.
-->
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<title>RevisionDiff Task</title>
</head>
<body>
<h2><a name="tagdiff">TagDiff</a></h2>
<h3>Description</h3>

<p>Generates an XML-formatted report file of the changes between two
tags recorded in a <a href="http://subversion.tigris.org/"
target="_top">Subversion</a> repository. </p>

<p><b>Important:</b> This task needs "svn" on the path. If it isn't,
you will get an error (such as error 2 on windows). If
<code>&lt;svn&gt;</code> doesn't work, try to execute
<code>svn.exe</code> from the command line in the target directory in
which you are working.</p>

<p>This task assumes that your repository follows the best-practice
layout of</p>
<pre>
BASEURL
  |
  |
  -----&gt; trunk
  -----&gt; tags
           |
           |
           ----------&gt; tag1
           ----------&gt; tag2
</pre>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
  </tr>
  <tr>
    <td valign="top">tag1</td>
    <td valign="top">The first tag.</td>
    <td align="center" valign="top">Yes.</td>
  </tr>
  <tr>
    <td valign="top">tag2</td>
    <td valign="top">The second tag.</td>
    <td align="center" valign="top">No, defaults to "trunk/"</td>
  </tr>
  <tr>
    <td valign="top">destfile</td>
    <td valign="top">The file in which to write the diff report.</td>
    <td align="center" valign="top">Yes</td>
  </tr>
  <tr>
    <td valign="top">baseURL</td>
    <td valign="top">The baseURL of the repository, used to calculate
    the two URLs to compare.</td>
    <td align="center" valign="top">Yes</td>
  </tr>
</table>

<h3>Parameters inherited from the <code>svn</code> task</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
  </tr>
  <tr>
    <td valign="top">failonerror</td>
    <td valign="top">Stop the buildprocess if the command exits with a
      returncode other than 0. Defaults to false</td>
    <td align="center" valign="top">No</td>
  </tr>
</table>

<h3>Examples</h3>
<pre>
  &lt;tagdiff failonerror="true"
      baseURL="http://svn.apache.org/repos/asf/jakarta/bcel/"
      destfile="diff.xml"
      tag1="initial"
      tag2="BCEL_5_0"
  /&gt;
</pre>

<p>Generates a tagdiff report for all the changes that have been
made in the <code>Apache BCEL</code> module between the tags
<code>initial</code> and <code>BCEL_5_0</code>.  It writes these changes
into the file <code>diff.xml</code>.</p>

<pre>
  &lt;tagdiff failonerror="true"
      baseURL="http://svn.apache.org/repos/asf/jakarta/bcel/"
      destfile="diff.xml"
      tag1="BCEL_5_0"
      tag2="trunk"
  /&gt;
</pre>

<p>Generates a tagdiff report for all the changes that have been made
in the <code>Apache BCEL</code> module between the tag
<code>BCEL_5_0</code> and the <code>trunk</code>.  It writes these
changes into the file <code>diff.xml</code>.</p>

<pre>
  &lt;tagdiff failonerror="true"
      baseURL="http://svn.apache.org/repos/asf/jakarta/bcel/"
      destfile="diff.xml"
      tag1="BCEL_5_0"
  /&gt;
</pre>

<p>Does the same, using <code>trunk</code> as <code>tag2</code>
implicitly.</p>

<h4>Generate Report</h4>

<p>This antlib includes a basic XSLT stylesheet that you can use to
generate a HTML report based on the xml output. The following example
illustrates how to generate a HTML report from the XML report.</p>

<pre>
        &lt;style in="diff.xml" 
               out="diff.html" 
               style="your-path-to/etc/diff.xsl"&gt;
          &lt;param name="title" expression="Jakarta BCEL diff"/&gt;
          &lt;param name="repo" expression="http://svn.apache.org/repos/asf/jakarta/bcel/trunk"/&gt;
        &lt;/style&gt;
</pre>

<h4>(Shortened) Example Output</h4>
<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;tagdiff tag1="BCEL_5_0" svnurl="http://svn.apache.org/repos/asf/jakarta/bcel/" &gt;
  &lt;path&gt;
    &lt;name&gt;&lt;![CDATA[default.properties]]&gt;&lt;/name&gt;
    &lt;action&gt;added&lt;/action&gt;
  &lt;/path&gt;
  &lt;path&gt;
    &lt;name&gt;&lt;![CDATA[xdocs/images/classloader.gif]]&gt;&lt;/name&gt;
    &lt;action&gt;modified&lt;/action&gt;
  &lt;/path&gt;
  &lt;path&gt;
    &lt;name&gt;&lt;![CDATA[README]]&gt;&lt;/name&gt;
    &lt;action&gt;deleted&lt;/action&gt;
  &lt;/path&gt;
&lt;/tagdiff&gt;
</pre>



</body>
</html>

