<?xml version="1.0" encoding="UTF-8"?>
<?xml-model xlink:href="http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" 
            schematypens="http://relaxng.org/ns/structure/1.0"?>
<appendix xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"
    xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="app.optionaltasks">
    <title>Optional tasks</title>

    <para>This appendix contains a reference of all optional tasks, i.e. tasks that are not directly
        needed for building projects, but can assist in various aspects of development and
        deployment.</para>
    <para>This reference lists the tasks alphabetically by the name of the classes that implement
        the tasks. So if you are searching for the reference to the <code>&lt;phplint></code> tag,
        for example, you will want to look at the reference of PhpLintTask.</para>

    <sect1 role="taskdef" xml:id="ApiGenTask">
        <title>ApiGenTask</title>
        <para>This task runs <link xlink:href="http://apigen.org/" role="extern">ApiGen</link>, a
            tool for creating professional API documentation from PHP source code, similar to
            discontinued phpDocumentor/phpDoc.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>executable</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>ApiGen executable name.</entry>
                        <entry>apigen</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>config</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Config file name.</entry>
                        <entry>n/a</entry>
                        <entry morerows="2">Source and destination are required - either set
                            explicitly or using a config file. Attribute values set explicitly have
                            precedence over values from a config file.</entry>
                    </row>
                    <row>
                        <entry><literal>source</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>List of source files or directories.</entry>
                        <entry>n/a</entry>
                    </row>
                    <row>
                        <entry><literal>destination</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Destination directory.</entry>
                        <entry>n/a</entry>
                    </row>
                    <row>
                        <entry><literal>exclude</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>List of masks (case sensitive) to exclude files or directories from
                            processing.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>skipdocpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>List of masks (case sensitive) to exclude elements from documentation
                            generating.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>skipdocprefix</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name prefix (case sensitive) to exclude elements from documentation
                            generating.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>charset</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Character set of source files.</entry>
                        <entry>UTF-8</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>main</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Main project name prefix.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>title</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Title of generated documentation.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>baseurl</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Documentation base URL.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>googlecseid</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Google Custom Search ID.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>googlecselabel</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Google Custom Search label.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>googleanalytics</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Google Analytics tracking code.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>templateconfig</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Template config file name.</entry>
                        <entry>n/a</entry>
                        <entry>If not set the default template is used.</entry>
                    </row>
                    <row>
                        <entry><literal>allowedhtml</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>List of HTML tags allowed in the documentation.</entry>
                        <entry>b, i, a, ul, ol, li, p, br, var, samp, kbd, tt</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>accesslevels</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Element access levels. Documentation only for methods and properties
                            with the given access level will be generated.</entry>
                        <entry>public, protected</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>internal</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to generate documentation for elements marked as internal and
                            internal documentation parts or not.</entry>
                        <entry>No</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>php</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to generate documentation for PHP internal classes or
                            not.</entry>
                        <entry>Yes</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>tree</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to generate tree view of classes, interfaces, traits and
                            exceptions or not.</entry>
                        <entry>Yes</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>deprecated</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to generate documentation for deprecated elements or
                            not.</entry>
                        <entry>No</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>todo</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to generate documentation of tasks or not.</entry>
                        <entry>No</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>sourcecode</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to generate highlighted source code files or not.</entry>
                        <entry>Yes</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>download</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to generate a link to download documentation as a ZIP archive
                            or not.</entry>
                        <entry>No</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>report</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>File name for checkstyle report of poorly documented
                            elements.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>wipeout</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to wipe out the destination directory first or not.</entry>
                        <entry>Yes</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>quiet</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to enable scaning and generating messages or not.</entry>
                        <entry>No</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>updatecheck</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to check for ApiGen updates or not.</entry>
                        <entry>No</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>debug</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to enable the debug mode or not.</entry>
                        <entry>No</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;apigen
  source="classes"
  destination="api"
  exclude="*/tests/*"
  title="My Project API Documentation"
  deprecated="true"
  todo="true"/></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="CoverageMergerTask">
        <title>CoverageMergerTask</title>
        <para>The CoverageMergerTask merges code coverage information from external sources with an
            existing code coverage database.</para>
        <para>The format of the code coverage files is expected to be identical to:</para>
        <programlisting language="xml">file_put_contents('/www/live/testcases/coverage.data', serialize(xdebug_get_code_coverage));</programlisting>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;coverage-merger>
  &lt;fileset dir="/www/live/testcases">
    &lt;include name="**/*.data"/>
  &lt;/fileset>
&lt;/coverage-merger></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="CoverageReportTask">
        <title>CoverageReportTask</title>
        <para>The CoverageReportTask formats a coverage database into a framed HTML report using
            XSLT. The report can optionally make use of the <emphasis role="bold">Ge</emphasis>neric
                <emphasis role="bold">S</emphasis>yntax <emphasis role="bold"
            >Hi</emphasis>ghlighting library, <literal>GeSHi</literal> (See <link
                xlink:href="http://qbnz.com/highlighter/">GeSHi Homepage</link>) library to mark up
            source code. The path to the library (if not in the default path) can be specified as an
            attribute.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>outfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The location for the intermediate XML file.</entry>
                        <entry>coverage.db</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>classpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Additional classpath to locate source referenced in the
                            report</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>geshipath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to GeSHi highlighting library</entry>
                        <entry>n/a</entry>
                        <entry>No/Yes* If syntax highlighting si to be enabled</entry>
                    </row>
                    <row>
                        <entry><literal>geshilanguagespath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Language to use with GeSHi</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;coverage-report outfile="reports/coverage.xml">
  &lt;report todir="reports/coverage" styledir="/home/phing/etc"/>
&lt;/coverage-report></programlisting>
        </sect2>

        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para>report</para>
                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>styledir</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>The directory where the stylesheets are located.</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>todir</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>The directory where the files resulting from the
                                        transformation should be written to.</entry>
                                    <entry/>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>title</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Title of the project (used in the generated
                                        document(s))</entry>
                                    <entry/>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>usesorttable</literal></entry>
                                    <entry><literal role="type">Boolean</literal></entry>
                                    <entry>Whether to use the sorttable JavaScript library (see
                                            <link
                                            xlink:href="http://www.kryogenix.org/code/browser/sorttable/"
                                            >http://www.kryogenix.org/code/browser/sorttable/</link>)</entry>
                                    <entry><literal>false</literal></entry>
                                    <entry>No</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="CoverageSetupTask">
        <title>CoverageSetupTask</title>
        <para>The CoverageSetupTask prepares a database which can be used to gather code coverage
            information for unit tests.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>database</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The location for the coverage database.</entry>
                        <entry>coverage.db</entry>
                        <entry>Yes</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;coverage-setup database="./reports/coverage.db">
  &lt;fileset dir="classes">
    &lt;include name="**/*.php"/>
  &lt;/fileset>
&lt;/coverage-setup>
&lt;phpunit codecoverage="true">
  &lt;batchtest>
    &lt;fileset dir="src">
      &lt;include name="*Test.php"/>
    &lt;/fileset>
  &lt;/batchtest>
&lt;/phpunit></programlisting>
        </sect2>

        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>classpath</literal></para>
                </listitem>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
                <listitem>
                    <para><literal>filelist</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="CoverageThresholdTask">
        <title>CoverageThresholdTask</title>
        <para>This task validates the code coverage database and will stop the build cycle if any
            class or method or entire project's coverage is lower than the specified
            threshold.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>database</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The location of the coverage database. (This is optional if
                                <literal>CoverageSetupTask</literal> has run before)</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>perProject</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>The minimum code coverage for the entire project.</entry>
                        <entry>25</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>perClass</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>The minimum code coverage for any class.</entry>
                        <entry>25</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>perMethod</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>The minimum code coverage for any method.</entry>
                        <entry>25</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>verbose</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to enable detailed logging or not.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;coverage-threshold database="./reports/coverage.db"/></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>classpath</literal></para>
                </listitem>
                <listitem>
                    <para>excludes</para>
                </listitem>
            </itemizedlist>
            <para>Validates an optional code coverage database against the default
                thresholds.</para>
            <programlisting language="xml">&lt;coverage-threshold
    perProject="50"
    perClass="60"
    perMethod="70"/></programlisting>
            <para>Validates the code coverage database (from CoverageSetupTask) against the
                specified thresholds.</para>
            <programlisting language="xml">&lt;coverage-threshold
    perProject="50"
    perClass="60"
    perMethod="70"/>
    &lt;excludes>
        &lt;file>**/*Processor.php&lt;/file>
        &lt;class>Model_Filter_Windows&lt;/class>
        &lt;method>Model_System::execute()&lt;/method>
    &lt;/excludes></programlisting>
            <para>Validates the code coverage database (from CoverageSetupTask) against the
                specified thresholds and excludes the given file, class and method from threshold
                validation. The filename is relative to the project basedir. A Method can be named
                either "Model_System::execute()" or "Model_System::execute". The method name is
                considered only for the given class "Model_System".</para>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="DbDeployTask">
        <title>DbDeployTask</title>
        <para> The <literal>DbDeployTask</literal> creates .sql files for making revisions to a
            database, based on dbdeploy conventions centering around a changelog table in the
            database. See <link
                xlink:href="http://dbdeploy.com/documentation/getting-started/rules-for-using-dbdeploy/"
                >rules for using dbdeploy</link> for more information. You will need a changelog
            table like so: </para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>url</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>PDO connection url</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>userid</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>DB userid to use for accessing the changelog table</entry>
                        <entry>none</entry>
                        <entry>As required by db</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>DB password to use for accessing the changelog table</entry>
                        <entry>none</entry>
                        <entry>As required by db</entry>
                    </row>
                    <row>
                        <entry><literal>dir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Directory containing dbdeploy delta scripts</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>outputfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Filename in which deployment SQL will be generated</entry>
                        <entry>dbdeploy_deploy.sql</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>undooutputfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Filename in which undo SQL will be generated</entry>
                        <entry>dbdeploy_undo.sql</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>deltaset</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>deltaset to check within db</entry>
                        <entry>Main</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>lastchangetoapply</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Highest-numbered delta script to apply to db</entry>
                        <entry>999</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>appliedBy</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Value of the 'applied_by' column for each
                        entry in the changelog table</entry>
                        <entry>dbdeploy</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>checkall</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>False means dbdeploy will only apply patches that have a higher number
                        than the last patchnumber that was applied
                        True means dbdeploy will apply all changes that aren't applied
                        already (in ascending order)</entry>
                        <entry>false</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">CREATE TABLE changelog (
  change_number BIGINT NOT NULL,
  delta_set VARCHAR(10) NOT NULL,
  start_dt TIMESTAMP NOT NULL,
  complete_dt TIMESTAMP NULL,
  applied_by VARCHAR(100) NOT NULL,
  description VARCHAR(500) NOT NULL
)</programlisting>
            <programlisting language="xml">&lt;dbdeploy
  url="sqlite:${project.basedir}/data/db.sqlite"
  userid="dbdeploy"
  password="dbdeploy"
  dir="${project.basedir}/data/dbdeploy/deltas"
/></programlisting>

            <para>The above example uses a sqlite database and delta scripts located in
                dbdeploy/deltas in the project base dir.</para>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="DocBloxTask">
        <title>DocBloxTask</title>
        <para> <emphasis role="bold">This task is now deprecated in favor of the
            <xref xlink:href="#PhpDocumentor2Task"/>.</emphasis></para>
        <para> This task runs <link xlink:href="http://www.docblox-project.org/" role="extern"
                >DocBlox</link>, a PHP 5.3-compatible API documentation tool.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>title</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Title of the project.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>destdir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Destination directory for output files.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>quiet</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Suppress DocBlox chatter.</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;docblox title="API Documentation"
  destdir="apidocs">
   &lt;fileset dir="./classes">
      &lt;include name="**/*.php" />
   &lt;/fileset>
&lt;/docblox></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para>fileset - Files that should be included for parsing</para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="ExportPropertiesTask">
        <title>ExportPropertiesTask</title>
        <para>Exports all defined properties to a specified file.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>targetfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Target file for saved properties</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>disallowedPropertyPrefixes</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Exclude properties starting with these prefixes (separated by
                                <literal>,</literal></entry>
                        <entry><literal>'host.'</literal>, <literal>'phing.'</literal>,
                                <literal>'os.'</literal>, <literal>'php.'</literal>,
                                <literal>'line.'</literal>, <literal>'env.'</literal>,
                                <literal>'user.'</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;exportproperties targetfile="output.props" /></programlisting>
        </sect2>

    </sect1>
    <sect1 role="taskdef" xml:id="FileHashTask">
        <title>FileHashTask</title>
        <para>Calculates either MD5 or SHA1 hash value of a file and stores the value as a hex
            string in a property.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Filename</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>hashtype</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Specifies what hash algorithm to use. 0=MD5, 1=SHA1</entry>
                        <entry>0</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>propertyname</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of property where the hash value is stored</entry>
                        <entry>filehashvalue</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;filehash file="${builddir}/${tarball}.tar.${compression}" />
&lt;echo msg="Hashvalue is; ${filehashvalue}" /></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="FileSizeTask">
        <title>FileSizeTask</title>
        <para>Stores the size of a specified file in a property. The file size is returned in
            bytes.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Filename</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>propertyname</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of property where the file size is stored</entry>
                        <entry>filesize</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;filesize file="${builddir}/${tarball}.tar.${compression}" />
&lt;php expression="floor(${filesize}/1024)" returnProperty="ksize" />
&lt;php expression="floor(${filesize}/1024/1024)" returnProperty="msize" />
&lt;echo msg="Filesize is: ${ksize} kB"/>
&lt;echo msg="Filesize is: ${msize} MB"/></programlisting>
        </sect2>

    </sect1>
    <sect1 role="taskdef" xml:id="FtpDeployTask">
        <title>FtpDeployTask</title>
        <para>Deploys a set of files to a remote FTP server.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>host</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The hostname of the remote server.</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>port</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>The port of the remote server.</entry>
                        <entry>21</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>username</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The username to use when logging in to the remote server.</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The password to use when logging in to the remote server</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>dir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Directory on the remote server.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>mode</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The transfer mode to use, either <literal>ascii</literal> or
                                <literal>binary</literal>.</entry>
                        <entry>binary</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>clearfirst</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Delete all files in the remote directory before uploading</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>passive</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Open connection in passive mode</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>dirmode</literal></entry>
                        <entry><literal role="type">mixed</literal></entry>
                        <entry>
                            Permissions of the uploaded files, can either be 'inherit' or it can be a octal value
                            without the leading zero. Settings the dirmode to 'inherit' will cause the uploaded files to
                            have the same permissions as on the filesystem.
                        </entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>filemode</literal></entry>
                        <entry><literal role="type">mixed</literal></entry>
                        <entry>This option does the same as dirmode, except it only affects regular files.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>depends</literal></entry>
                        <entry><literal role="type">boolean</literal></entry>
                        <entry>
                            If depends is set to true, the task will only update files
                            with a local modification timestamp that is newer
                            than the corresponding timestamp on the server.
                        </entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>

                    <row>
                        <entry><literal>level</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Control the level at which the task reports status messages. One of
                                <literal>error</literal>, <literal>warning</literal>,
                                <literal>info</literal>, <literal>verbose</literal>,
                                <literal>debug</literal>.</entry>
                        <entry><literal>verbose</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;ftpdeploy 
  host="${ftp.host}" 
  port="${ftp.port}" 
  username="${ftp.username}" 
  password="${ftp.password}"
  dir="${ftp.dir}" 
  passive="false"
  mode="${ftp.mode}">
  &lt;fileset dir=".">
    &lt;include name="**"/>
    &lt;exclude name="phing"/>
    &lt;exclude name="build.xml"/>
    &lt;exclude name="images/**.png"/>
    &lt;exclude name="images/**.gif"/>
    &lt;exclude name="images/**.jpg"/>
  &lt;/fileset>
&lt;/ftpdeploy></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                    <para>The files to deploy</para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="GitInitTask">
        <title>GitInitTask</title>
        <para>Create an empty git repository or reinitialize an existing one.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>gitPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git binary</entry>
                        <entry>/usr/bin/git</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repository</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git repository</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>bare</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Create bare repository. See --bare option of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-init.html"
                                role="extern">git-init</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;property name="repo.dir" value="./relative/path/to/repo" />
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" />

&lt;!-- Initialize normal repository -->
&lt;gitinit repository="${repo.dir.resolved}" />

&lt;!-- Initialize bare repository -->
&lt;gitinit bare="true" repository="${repo.dir.resolved}" /></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="GitCloneTask">
        <title>GitCloneTask</title>
        <para>Clone a repository into a new directory.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>gitPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git binary</entry>
                        <entry>/usr/bin/git</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repository</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The (possibly remote) repository to clone from.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>targetPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The name of a new directory to clone into. Cloning into an existing
                            directory is only allowed if the directory is empty.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>bare</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Create bare repository. See --bare option of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-clone.html"
                                >git-clone</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;property name="repo.dir" value="./relative/path/to/repo" />
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" />

&lt;!-- Clone repository -->
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" />

&lt;!-- Clone bare repository -->
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}"
    bare="true" /></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="GitGcTask">
        <title>GitGcTask</title>
        <para>Cleanup unnecessary files and optimize the local repository.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>gitPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git binary</entry>
                        <entry>/usr/bin/git</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repository</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The repository to cleanup.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>aggressive</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>This option will cause git gc to more aggressively optimize the
                            repository at the expense of taking much more time. See --aggressive
                            option of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-gc.html"
                                >git-gc</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>auto</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>With this option, git gc checks whether any housekeeping is required;
                            if not, it exits without performing any work. See --auto option of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-gc.html"
                                >git-gc</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>noprune</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Do not prune any loose objects. See --no-prune option of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-gc.html"
                                >git-gc</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>prune</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Prune loose objects older than date. See --prune option of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-gc.html"
                                >git-gc</link>.</entry>
                        <entry>2.weeks.ago</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;property name="repo.dir" value="./relative/path/to/repo" />
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" />

&lt;!-- Clone repository -->
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" />

&lt;!-- Cleanup repository-->
&lt;gitgc 
    repository="${repo.dir.resolved}" 
    aggressive="true"
    prune="1.week.ago" /></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="GitBranchTask">
        <title>GitBranchTask</title>
        <para> Create, move or delete repository branches. See official <link
                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-branch.html"
                >documentation</link> (branch listing functionality is omitted in current
            implementation).</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>gitPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git binary</entry>
                        <entry>/usr/bin/git</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repository</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git repository</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>branchname</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The name of the branch to create or delete.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>newbranch</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The new name for an existing branch.</entry>
                        <entry>n/a</entry>
                        <entry>Yes, if branch move invoked</entry>
                    </row>
                    <row>
                        <entry><literal>startpoint</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The new branch head will point to this commit. It may be given as a
                            branch name, a commit-id, or a tag. If this option is omitted, the
                            current HEAD will be used instead. See &lt;start-point> argument of
                                <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-branch.html"
                                >git-branch</link>.</entry>
                        <entry/>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>setupstream</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>If specified branch does not exist yet or if --force has been given,
                            acts exactly like --track. Otherwise sets up configuration like --track
                            would when creating the branch, except that where branch points to is
                            not changed. See --set-upstream option of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-branch.html"
                                >git-branch</link>.</entry>
                        <entry/>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>track</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>See --track option of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-branch.html"
                                >git-branch</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>notrack</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>See --no-track option of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-branch.html"
                                >git-branch</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>force</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Reset &lt;branchname> to &lt;startpoint> if &lt;branchname> exists
                            already. Without -f git branch refuses to change an existing
                            branch.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>move</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Move/rename a branch and the corresponding reflog.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>forcemove</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Move/rename a branch even if the new branch name already
                            exists.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>delete</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Delete a branch. The branch must be fully merged in its upstream
                            branch, or in HEAD if no upstream was set with --track or
                            --set-upstream.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>forcedelete</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Delete a branch irrespective of its merged status.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;property name="repo.dir" value="./relative/path/to/repo" />
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" />

&lt;!-- Initialize normal repository -->
&lt;gitinit repository="${repo.dir.resolved}" />

&lt;!-- Create branch "sample-branch" tracking current HEAD -->
&lt;gitbranch
    repository="${repo.dir.resolved}" 
    branchname="sample-branch" />

&lt;!-- 
Create branch "sample-branch" tracking origin/master 
Note that you can omit both startpoint and track attributes in this case
-->
&lt;gitbranch
    repository="${repo.dir.resolved}" 
    branchname="sample-branch"
    startpoint="origin/master"
    track="true" />

&lt;!-- Delete fully merged branch "sample-branch" -->
&lt;gitbranch 
    repository="${repo.dir.resolved}" 
    branchname="sample-branch" 
    delete="true" />

&lt;!-- Force delete even unmerged branch "sample-branch" -->
&lt;gitbranch 
    repository="${repo.dir.resolved}" 
    branchname="sample-branch" 
    forcedelete="true" />

&lt;!-- Renabe "branch1" to "branch2" -->
&lt;gitbranch 
    repository="${repo.dir.resolved}" 
    branchname="branch1" 
    newbranch="branch2"
    move="true" /></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="GitFetchTask">
        <title>GitFetchTask</title>
        <para> Download objects and refs from another repository. See official <link
                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html"
                >documentation</link>.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>gitPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git binary</entry>
                        <entry>/usr/bin/git</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repository</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git repository</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>source</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The "remote" repository that is the source of a fetch or pull
                            operation. See &lt;repository> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html"
                                >git-fetch</link>.</entry>
                        <entry>origin</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>refspec</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>See &lt;refspec> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html"
                                >git-fetch</link>.</entry>
                        <entry/>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>group</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A name referring to a list of repositories as the value of
                            remotes.&lt;group> in the configuration file. See &lt;group> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html"
                                >git-fetch</link>.</entry>
                        <entry/>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>quiet</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Silence any internally used git commands. Progress is not reported to
                            the standard error stream. See --quiet in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html"
                                >git-fetch</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>all</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Fetch all remotes. See --all in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html"
                                >git-fetch</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>keep</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Keep downloaded pack. See --keep in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html"
                                >git-fetch</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>prune</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>After fetching, remove any remote tracking branches which no longer
                            exist on the remote. See --prune in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html"
                                >git-fetch</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>tags</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>See --tags in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html"
                                >git-fetch</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>notags</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>See --no-tags in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html"
                                >git-fetch</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>force</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>When git fetch is used with &lt;rbranch>:&lt;lbranch> refspec, it
                            refuses to update the local branch &lt;lbranch> unless the remote branch
                            &lt;rbranch> it fetches is a descendant of &lt;lbranch>. This option
                            overrides that check. See --force in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-fetch.html"
                                >git-fetch</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;property name="repo.dir" value="./relative/path/to/repo" />
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" />

&lt;!-- Initialize normal repository -->
&lt;gitinit repository="${repo.dir.resolved}" />

&lt;!-- Fetch objects from all remotes -->
&lt;gitfetch
    repository="${repo.dir.resolved}" all="true" />

&lt;!-- Fetch from origin/master to "refspec-branch" local branch -->
&lt;gitfetch 
    repository="${repo.dir.resolved}" 
    source="origin"
    refspec="master:refspec-branch" 
    quiet="true" /></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="GitCheckoutTask">
        <title>GitCheckoutTask</title>
        <para> Checkout a branch or paths to the working tree. See official <link
                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html"
                >documentation</link>.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>gitPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git binary</entry>
                        <entry>/usr/bin/git</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repository</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git repository</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>branchname</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Branch to checkout. See &lt;branch> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html"
                                >git-checkout</link>.</entry>
                        <entry>origin</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>startpoint</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The name of a commit at which to start the new branch; Defaults to
                            HEAD. See &lt;start_point> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html"
                                >git-checkout</link>.</entry>
                        <entry/>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>create</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Create a new branch named &lt;branchname> and start it at
                            &lt;startpoint></entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>forcecreate</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Creates the branch &lt;branchname> and start it at &lt;startpoint>;
                            if it already exists, then reset it to &lt;startpoint>. This is
                            equivalent to running "git branch" with "-f".</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>merge</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>See --merge in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html"
                                >git-checkout</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>track</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>See --track in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html"
                                >git-checkout</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>notrack</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>See --no-track in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html"
                                >git-checkout</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>quiet</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Quiet, suppress feedback messages. See --quiet in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html"
                                >git-checkout</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>force</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>When switching branches, proceed even if the index or the working
                            tree differs from HEAD. This is used to throw away local changes. See
                            --force in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html"
                                >git-checkout</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;property name="repo.dir" value="./relative/path/to/repo" />
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" />

&lt;!-- clone repository -->
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" />

&lt;!-- create and switch to "mybranch" branch -->
&lt;gitcheckout
    repository="${repo.dir.resolved}" 
    branchname="mybranch" quiet="true" create="true" />

&lt;!-- get back to "master" branch -->
&lt;gitcheckout
    repository="${repo.dir.resolved}" 
    branchname="master" quiet="true" />

&lt;!-- create (force) already created branch -->
&lt;gitcheckout
    repository="${repo.dir.resolved}" 
    branchname="mybranch" quiet="true" 
    forceCreate="true" /></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="GitMergeTask">
        <title>GitMergeTask</title>
        <para> Join two or more development histories together. See official <link
                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html"
                >documentation</link>.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>gitPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git binary</entry>
                        <entry>/usr/bin/git</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repository</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git repository</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>remote</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Space separated list of branches to merge into current HEAD. See
                            &lt;commit> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html"
                                >git-merge</link>.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>message</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Commit message to be used for the merge commit (in case one is
                            created). See &lt;msg> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html"
                                >git-merge</link>.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>fastForwardCommit</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>If set false (default), will not generate a merge commit if the merge
                            resolved as a fast-forward, only update the branch pointer. If set true,
                            will generate a merge commit even if the merge resolved as a
                            fast-forward. See --ff/--no-ff options in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html"
                                >git-merge</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>strategy</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Merge strategy. One of "resolve", "recursive", "octopus", "ours", or
                            "subtree". See &lt;strategy> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html"
                                >git-merge</link>.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>strategyOption</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Pass merge strategy specific option through to the merge strategy.
                            See &lt;strategy-option> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html"
                                >git-merge</link>.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>commit</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>See --commit in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html"
                                >git-merge</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>nocommit</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>See --no-commit in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html"
                                >git-merge</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>quiet</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Quiet, suppress feedback messages. See --quiet in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-merge.html"
                                >git-merge</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;property name="repo.dir" value="./relative/path/to/repo" />
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" />

&lt;!-- clone repository -->
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" />

&lt;!-- create couple of test branches -->
&lt;gitbranch
    repository="${repo.dir.resolved}" 
    branchname="merge-test-1" startpoint="origin/master" />
&lt;gitbranch
    repository="${repo.dir.resolved}" 
    branchname="merge-test-2" startpoint="origin/master" />

&lt;!-- Merge those branches back into master -->
&lt;gitmerge
    repository="${repo.dir.resolved}" 
    remote="merge-test-1 merge-test-2" 
    message="merging repos" commit="true" /></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="GitPullTask">
        <title>GitPullTask</title>
        <para> Fetch from and merge with another repository or a local branch. See official <link
                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html"
                >documentation</link>.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>gitPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git binary</entry>
                        <entry>/usr/bin/git</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repository</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git repository</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>all</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Fetch all remotes</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>source</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The "remote" repository that is the source of a fetch or pull
                            operation. See &lt;repository> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html"
                                >git-pull</link>.</entry>
                        <entry>origin</entry>
                        <entry>Yes, if allRemotes set to false</entry>
                    </row>
                    <row>
                        <entry><literal>refspec</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>See &lt;refspec> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html"
                                >git-pull</link>.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>strategy</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Merge strategy. One of "resolve", "recursive", "octopus", "ours", or
                            "subtree". See &lt;strategy> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html"
                                >git-pull</link>.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>strategyOption</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Pass merge strategy specific option through to the merge strategy.
                            See &lt;strategy-option> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html"
                                >git-pull</link>.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>rebase</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>See --rebase in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html"
                                >git-pull</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>norebase</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>See --no-rebase in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html"
                                >git-pull</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>tags</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Enable tag references following. See --tags in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html"
                                >git-pull</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>notags</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Disable tag references following. See --no-tags in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html"
                                >git-pull</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>keepFiles</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>See --keep in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html"
                                >git-pull</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>append</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>See --append in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html"
                                >git-pull</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>quiet</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Quiet, suppress feedback messages. See --quiet in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html"
                                >git-pull</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>force</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Force update. See --force in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-pull.html"
                                >git-pull</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;property name="repo.dir" value="./relative/path/to/repo" />
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" />

&lt;!-- clone repository -->
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" />

&lt;!-- pull from all remotes -->
&lt;gitpull
    repository="${repo.dir.resolved}" all="true" />

&lt;!-- pull remote origin/foobranch and rebase when merging -->
&lt;gitpull
    repository="${repo.dir.resolved}" 
    source="origin" refspec="foobranch" 
    strategy="recursive" keep="true"
    force="true" quiet="true" rebase="true" /></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="GitPushTask">
        <title>GitPushTask</title>
        <para> Update remote refs along with associated objects. See official <link
                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html"
                >documentation</link>.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>gitPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git binary</entry>
                        <entry>/usr/bin/git</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repository</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git repository</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>all</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Push all references</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>destination</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The "remote" repository that is destination of a push operation. See
                            &lt;repository> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html"
                                >git-push</link>.</entry>
                        <entry>origin</entry>
                        <entry>Yes, if allRemotes set to false</entry>
                    </row>
                    <row>
                        <entry><literal>refspec</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>See &lt;refspec> in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html"
                                >git-push</link>.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>mirror</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>See --mirror in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html"
                                >git-push</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>delete</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Delete "remote" reference. Same as prefixing the refspec with colon.
                            See --delete in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html"
                                >git-push</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>tags</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Push all references under refs/tags. See --tags in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html"
                                >git-push</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>quiet</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Quiet, suppress feedback messages. See --quiet in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html"
                                >git-push</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>force</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Force update. See --force in <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-push.html"
                                >git-push</link>.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;property name="repo.dir" value="./relative/path/to/repo" />
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" />

&lt;!-- clone repository -->
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" />

&lt;!-- push branch "master" into "foobranch" on "origin" remote -->
&lt;gitpush
    repository="${repo.dir.resolved}" 
    refspec="master:foobranch" tags="true" />

&lt;!-- create new branch "newbranch" on "origin" remote -->
&lt;gitpush
    repository="${repo.dir.resolved}" 
    refspec="master:newbranch" quiet="true" />

&lt;!-- delete "newbranch" branch from "origin" remote -->
&lt;gitpush
    repository="${repo.dir.resolved}" 
    delete="true"
    refspec="newbranch" quiet="true" /></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="GitTagTask">
        <title>GitTagTask</title>
        <para> Create, list, delete or verify a tag object signed with GPG. See official <link
                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html"
                >documentation</link>.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>gitPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git binary</entry>
                        <entry>/usr/bin/git</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repository</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git repository</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>message</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Use given tag message. See -m of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html"
                                >git-tag</link>
                        </entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>name</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Tag name</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>commit</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>&lt;commit> argument to git-tag</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>object</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>&lt;object> argument to git-tag</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>pattern</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>&lt;pattern> argument to git-tag</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>outputProperty</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Property name to set with output value from git-tag</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Take tag message from given file. See -F of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html"
                                >git-tag</link>
                        </entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>annotate</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Make unsigned, annotated tag object. See -a of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html"
                                >git-tag</link>
                        </entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>force</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Replace existing tag with given name. See -f of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html"
                                >git-tag</link>
                        </entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>delete</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Delete existing tags with given names. See -d of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html"
                                >git-tag</link>
                        </entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>list</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>List tags with names matching given pattern. See -l of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html"
                                >git-tag</link>
                        </entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>num</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Specifies how many lines from the annotation, if any, are printed
                            when using -l. See -n of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html"
                                >git-tag</link>
                        </entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>contains</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Only list tags containing specified commit. See --contains of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html"
                                >git-tag</link>
                        </entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>sign</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Make GPG-signed tag. See -s of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html"
                                >git-tag</link>
                        </entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>keySign</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Make GPG-signed tag, using given key. See -u of git-tag of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html"
                                >git-tag</link>
                        </entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>verify</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Verify GPG signature of given tag names. See -v of <link
                                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-tag.html"
                                >git-tag</link>
                        </entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;property name="repo.dir" value="./relative/path/to/repo" />
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" />

&lt;!-- clone repository -->
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" />

&lt;gittag repository="${repo.dir.resolved}" name="ver1.0" />
&lt;!-- Force duplicate tag creation -->
&lt;gittag 
    repository="${repo.dir.resolved}" 
    name="ver1.0" force="true"/>
&lt;!-- Create tag with annotation and message -->
&lt;gittag 
    repository="${repo.dir.resolved}" 
    name="ver1.0"
    annotate="true" message="Version 1.0 tag"/>
&lt;!-- Delete tag -->
&lt;gittag 
    repository="${repo.dir.resolved}"
        name="ver2.0" delete="true" />
&lt;!-- List tags matching to pattern "marked" into "tags" variable -->
&lt;gittag repository="${repo.dir.resolved}" 
    list="true"
    outputProperty="tags" 
    pattern="marked" /></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="GitLogTask">
        <title>GitLogTask</title>
        <para> Show commit logs. See official <link
                xlink:href="http://www.kernel.org/pub/software/scm/git/docs/git-log.html"
                >documentation</link>.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>gitPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git binary</entry>
                        <entry>/usr/bin/git</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repository</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Git repository</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>paths</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>&lt;paentry> arguments to git-log. Accepts one or more paths
                            delimited by PATH_SEPARATOR</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>outputProperty</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Property name to set with output value from git-log</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>format</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Commit format. See --format of git-log. Can be one of
                                <literal>oneline</literal>, <literal>short</literal>,
                                <literal>medium</literal>, <literal>full</literal>,
                                <literal>fuller</literal>, <literal>email</literal>,
                                <literal>raw</literal> and
                            <literal>format:&lt;string></literal></entry>
                        <entry>medium</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>date</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Date format. See --date of git-log.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>since</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>&lt;since> argument to git-log.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>until</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>&lt;until> argument to git-log.</entry>
                        <entry>HEAD</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>stat</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Generate a diffstat. See --stat of git-log</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>nameStatus</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Names + status of changed files. See --name-status of
                            git-log.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>maxCount</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Number of commits to show. See -&lt;n>|-n|--max-count of
                            git-log.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>noMerges</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Don't show commits with more than one parent. See --no-merges of
                            git-log.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;property name="repo.dir" value="./relative/path/to/repo" />
&lt;resolvepath propertyName="repo.dir.resolved" file="${repo.dir}" />

&lt;!-- clone repository -->
&lt;gitclone 
    repository="git://github.com/path/to/repo/repo.git"
    targetPath="${repo.dir.resolved}" />
<!-- write git-log output to "logs" variable -->
&lt;gitlog 
    paths="${repo.dir.resolved}"
    format="oneline"
    maxCount="2"
    stat="true"
    noMerges="false"
    since="Sun Jan 23 23:55:42 2011 +0300"
    until="Mon Jan 24 09:59:33 2011 +0300"
    outputProperty="logs" 
    repository="${repo.dir.resolved}" /></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="GrowlNotifyTask">
        <title>GrowlNotifyTask</title>
        <para>When you have a long process and want to be notified when it is finished, without to stay 
            focused on the console windows. Then use the GrowlNotify task.
        </para>
        <para>This task requires the PEAR 
            <link xlink:href="http://pear.php.net/package/Net_Growl" role="extern">Net_Growl</link>
            package installed (version  2.6.0).
        </para>
        <sect2>
            <title>Features</title>
            <itemizedlist>
                <listitem>
                    <para>Compatible Windows and Mac/OSX</para>
                </listitem>
                <listitem>
                    <para>Do not forget notification with sticky option</para>
                </listitem>
                <listitem>
                    <para>Define priority of messages</para>
                </listitem>
                <listitem>
                    <para>Send notification on private or public network</para>
                </listitem>
            </itemizedlist>
        </sect2>        
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>name</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of application to be register</entry>
                        <entry>Growl for Phing</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>sticky</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Indicates if the notification should be sticky on desktop</entry>
                        <entry>false</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>message</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Text of notification. Use \n to specify a line break</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>title</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Title of notification</entry>
                        <entry>GrowlNotify</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>notification</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The notification name/type</entry>
                        <entry>General Notification</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>appicon</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>
                            <itemizedlist>
                                <listitem>
                                    <para>absolute url (http://domain/image.png)</para>
                                </listitem>
                                <listitem>
                                    <para>absolute file path (c:\temp\image.png)</para>
                                </listitem>
                                <listitem>
                                    <para>relative file path (.\folder\image.png)</para>
                                </listitem>
                            </itemizedlist>
                        </entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>host</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The host address where to send the notification</entry>
                        <entry>127.0.0.1</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The password required to send notifications over network</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>priority</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>
                            <para>The notification priority. Valid values are :</para>
                            <itemizedlist>
                                <listitem>
                                    <para>low</para>
                                </listitem>
                                <listitem>
                                    <para>moderate</para>
                                </listitem>
                                <listitem>
                                    <para>normal</para>
                                </listitem>
                                <listitem>
                                    <para>high</para>
                                </listitem>
                                <listitem>
                                    <para>emergency</para>
                                </listitem>
                            </itemizedlist>
                        </entry>
                        <entry>normal</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>protocol</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The protocol used to send the notification. May be either gntp or udp.</entry>
                        <entry>gntp</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>icon</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>
                            <para>The icon to show for the notification.</para>
                            <para>Must be a valid file type (png, jpg, gif, ico). Can be any of the following:</para>
                            <itemizedlist>
                                <listitem>
                                    <para>absolute url (http://domain/image.png)</para>
                                </listitem>
                                <listitem>
                                    <para>absolute file path (c:\temp\image.png)</para>
                                </listitem>
                                <listitem>
                                    <para>relative file path (.\folder\image.png)</para>
                                </listitem>
                            </itemizedlist>
                        </entry>
                        <entry>embeded growl icon v2</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Examples</title>
            <para>Send a single notification on a remote host</para>
            <para>
                Both sender and Growl client (Mac or Windows) should share the same password.
            </para>
            <programlisting language="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project name="phing-GrowlNotifyTask" basedir="." default="notification"&gt;

    &lt;taskdef name="growlnotify" classname="phing.tasks.ext.GrowlNotifyTask" /&gt;

    &lt;target name="notification"
        description="display a single message with growl gntp over network"
    &gt;
        &lt;growlnotify message="Deployment of project LAMBDA is finished."
            host="192.168.1.2"
            password="seCretPa$$word"
        /&gt;
    &lt;/target&gt;

&lt;/project&gt;</programlisting>
            <para>Send a single notification with UDP protocol</para>
            <para>
                When you don't have a Macintosh, OS compatible with Growl GNTP, you 
                should use the basic UDP protocol.
            </para>
            <programlisting language="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project name="phing-GrowlNotifyTask" basedir="." default="notification"&gt;

    &lt;taskdef name="growlnotify" classname="phing.tasks.ext.GrowlNotifyTask" /&gt;

    &lt;target name="notification"
        description="display a single message with growl udp over network"
    &gt;
        &lt;growlnotify message="Notify my MAC that does not accept GNTP."
            host="192.168.1.2"
            password="seCretPa$$word"
            protocol="udp"
        /&gt;
    &lt;/target&gt;

&lt;/project&gt;</programlisting>
            <para>Send an important notification</para>
            <para>
                If you want to send a notification that is so important that you don't want to missed it,
                even if you are away from your computer. Use the sticky attribute.
            </para>
            <programlisting language="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project name="phing-GrowlNotifyTask" basedir="." default="notification"&gt;

    &lt;taskdef name="growlnotify" classname="phing.tasks.ext.GrowlNotifyTask" /&gt;

    &lt;target name="notification"
        description="display a sticky message on desktop"
    &gt;
        &lt;growlnotify message="Project LAMDBA, unit tests FAILED."
            priority="high"
            sticky="true"
        /&gt;
    &lt;/target&gt;

&lt;/project&gt;</programlisting>
            <para>Use your icons to identify an application</para>
            <para>
                You may customize the Growl notification system, with different icons 
                and more. 
            </para>
            <programlisting language="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project name="phing-GrowlNotifyTask" basedir="." default="notification"&gt;

    &lt;taskdef name="growlnotify" classname="phing.tasks.ext.GrowlNotifyTask" /&gt;

    &lt;target name="notification"
        description="display a custom icon message"
    &gt;
        &lt;growlnotify message="Have a look on my beautiful message!"
            name="phing Notifier"
            title="phing notification"
            priority="low"
            sticky="false"
            appicon="../images/my_icon.png"
        /&gt;
    &lt;/target&gt;

&lt;/project&gt;</programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="HttpGetTask">
        <title>HttpGetTask</title>
        <para>This task will download a file through HTTP GET and save it to a specified directory.
            You need an installed version of HTTP_Request2 to use this task.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>url</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The request URL</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>dir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The directory to save the file</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>filename</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The filename for the downloaded file</entry>
                        <entry>The filename part of the URL</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                    	<entry><literal>followRedirects</literal></entry>
                    	<entry><literal role="type">Boolean</literal></entry>
                    	<entry>Whether to follow HTTP redirects</entry>
                    	<entry>false</entry>
                    	<entry>No</entry>
                    </row>
                    <row>
                    	<entry><literal>sslVerifyPeer</literal></entry>
                    	<entry><literal role="type">Boolean</literal></entry>
                    	<entry>Whether to verify SSL certificates</entry>
                    	<entry>true</entry>
                    	<entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;httpget url="http://buildserver.com/builds/latest.stable.tar.bz2" dir="/usr/local/lib"/></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="HttpRequestTask">
        <title>HttpRequestTask</title>
        <para>This task will make an HTTP request to the provided URL and match the response against
            the provided regular expression. If an regular expression is provided and doesn't match
            the build will fail. You need an installed version of HTTP_Request2 to use this
            task.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>url</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The request URL</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>responseRegex</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The regular expression for matching the response</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>authUser</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The authentication user name</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>authPassword</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The authentication password</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>authScheme</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The authentication scheme</entry>
                        <entry>basic</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>verbose</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to enable detailed logging</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>observerEvents</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Comma-separated list of events to log when <literal>verbose</literal>
                            is set to <literal>true</literal></entry>
                        <entry>connect, sentHeaders, sentBodyPart, receivedHeaders, receivedBody,
                            disconnect</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;http-request url="http://my-production.example.com/check-deployment.php"/></programlisting>

            <para>Just perform a HTTP request to the given URL.</para>
            <programlisting language="xml">&lt;http-request
   url="http://my-production.example.com/check-deployment.php"
   responseRegex="/Heartbeat/"
   verbose"true"
   observerEvents="connect, disconnect"/></programlisting>
            <para>Perform a HTTP request to the given URL and matching the response against the
                given regex pattern. Enable detailed logging and log only the specified
                events.</para>
            <programlisting language="xml">&lt;http-request url="http://my-production.example.com/check-deployment.php">
   &lt;config name="adapter" value="HTTP_Request2_Adapter_Curl"/>
   &lt;header name="user-agent" value="Phing HttpRequestTask"/>
 &lt;/http-request></programlisting>
            <para>Perform a HTTP request to the given URL. Setting request adapter to curl instead
                of socket. Setting an additional header.</para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para>config </para>
                    <para>Holds additional config data. See HTTP_Request2 for supported
                        values.</para>

                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>name</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Config parameter name</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>value</literal></entry>
                                    <entry>Mixed</entry>
                                    <entry>Config value</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
                <listitem>
                    <para>header </para>
                    <para> Holds additional header <literal>name</literal> and
                            <literal>value</literal>.</para>
                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>name</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Header name</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>value</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Header value</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="IoncubeEncoderTask">
        <title>IoncubeEncoderTask</title>
        <para> The <literal>IoncubeEncoderTask</literal> executes the <link
                xlink:href="http://www.ioncube.com" role="extern">ionCube</link> encoder (for either
            PHP4 or PHP5 projects).</para>
        <para> For more information on the meaning of the various options please consult the ionCube
                <link xlink:href="http://www.ioncube.com/USER-GUIDE.pdf" role="extern">user
                guide</link>.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>allowedserver</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Restricts the encoded files to particular servers and/or domains.
                            Consult the IonCude documentation for more information.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>binary</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to save encoded files in binary format (default is ASCII
                            format)</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>copy</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Specifies files or directories to exclude from being encoded or
                            encrypted and copy them to the target directory (separated by
                            space).</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>encode</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Specifies additional file patterns, files or directories to encode,
                            or to reverse the effect of <literal>copy</literal></entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>encrypt</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Specify files or directories (space separated list) that are to be
                            encrypted.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>expirein</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Sets a period in seconds (s), minutes (m), hours (h) or days (d)
                            after which the files expire. Accepts: <literal>500s</literal> or
                                <literal>55m</literal> or <literal>24h</literal> or
                                <literal>7d</literal></entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>expireon</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Sets a YYYY-MM-DD date to expire the files.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>fromdir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path containing source files</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>ignore</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Set files and directories to ignore entirely and exclude from the
                            target directory (separated by space).</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>ioncubepath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to the ionCube binaries</entry>
                        <entry>/usr/local/ioncube</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>keep</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Set files and directories not to be ignored (separated by
                            space).</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>licensepath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to the license file that will be used by the encoded
                            files</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>nodoccomments</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Omits documents comments ( /** ... */ ) from the encoded
                            files.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry>obfuscation-key</entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The obfuscation key must be supplied when using the obfuscate
                            option</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>obfuscate</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The Encoder can obfuscate the names of global functions, the names of
                            local variables in global functions, and line numbers. Use either
                                <literal>all</literal> or any of <literal>functions</literal>,
                                <literal>locals</literal> or <literal>linenos</literal> separated by
                            a space.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>optimize</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Controls the optimization of the encoded files, accepts either
                                <literal>more</literal> or <literal>max</literal></entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>passphrase</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The passphrase to use when encoding with a license file</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>phpversion</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>The PHP version to use</entry>
                        <entry>5</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>targetoption</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Option to use when target directory exists, accepts
                                <literal>replace</literal>, <literal>merge</literal>,
                                <literal>update</literal> and <literal>rename</literal></entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>todir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to save encoded files to</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>withoutruntimeloadersupport</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to disable support for runtime initialization of the ionCube
                            Loader</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>noshortopentags</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to disable support for short PHP tags</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>callbackfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to callback file (.php)</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>obfuscationexclusionsfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to obfuscation exclusions file</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>ignoredeprecatedwarnings</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to ignore deprecated warnings</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>ignorestrictwarnings</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to ignore strict warnings</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>allowencodingintosource</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to allow encoding into the source tree</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>messageifnoloader</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A valid PHP expression to customize the "no loader installed"
                            message</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>actionifnoloader</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A valid PHP expression to replace the "no loader installed"
                            action</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>showcommandline</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>whether to show command line before it is executed</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;ioncubeencoder
   binary="true"
   copy="*.ini config/*"
   encode="*.inc licenses/license.key"
   encrypt="*.tpl *.xml"
   fromdir="files"
   ignore="*.bak RCS/ *~ docs/"
   ioncubepath="/usr/local/ioncube"
   keep="docs/README"
   licensepath="mylicense.txt"
   optimize="max"
   passphrase="mypassphrase"
   phpversion="4"
   noshortopentags="false"
   targetoption="replace"
   todir="encoded"
   withoutruntimeloadersupport="true"
   callbackfile="errhandler.php"
   obfuscationexlusionsfile="obfex.txt">
  &lt;comment>A project encoded with the ionCube encoder.&lt;/comment>
&lt;/ioncubeencoder></programlisting>
        </sect2>

        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para>comment </para>
                    <para>Custom text that is added to the start of each encoded file.</para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="IoncubeLicenseTask">
        <title>IoncubeLicenseTask</title>
        <para> The <literal>IoncubeLicenseTask</literal> executes the <link
                xlink:href="http://www.ioncube.com" role="extern">ionCube</link> make_license
            program.</para>
        <para> For more information on the meaning of the various options please consult the ionCube
                <link xlink:href="http://www.ioncube.com/USER-GUIDE.pdf" role="extern">user
                guide</link>.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>ioncubepath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to the ionCube binaries</entry>
                        <entry>/usr/local/ioncube</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>licensepath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to the license file that will be generated</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>passphrase</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The passphrase to use when generating the license file</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>allowedserver</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Restricts the license to particular servers and/or domains. Consult
                            the IonCude documentation for more information.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>expirein</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Sets a period in seconds (s), minutes (m), hours (h) or days (d)
                            after which the license expires. Accepts: 500s or 55m or 24h or
                            7d.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>expireon</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Sets a YYYY-MM-DD date to expire the license.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;ioncubelicense
   ioncubepath="/usr/local/ioncube"
   licensepath="mylicense.txt"
   passphrase="mypassphrase"
   allowedserver="00:06:4F:01:8F:2C"
   expireon="2010-09-01"
   expirein="7d">
  &lt;comment>A license file made with the ionCube encoder.&lt;/comment>
&lt;/ioncubelicense></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para>comment </para>
                    <para>Custom text that is added to the start of each encoded file.</para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="JslLintTask">
        <title>JslLintTask</title>
        <para> The <literal>JslLintTask</literal> uses the <link
                xlink:href="http://www.javascriptlint.com" role="extern">Javascript Lint</link>
            program to check the sytax on one or more JavaScript source code files.</para>
        <para>
            <emphasis role="bold">NB:</emphasis> the Javascript lint program must be in the system
            path! </para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>executable</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to JSL executable</entry>
                        <entry>jsl</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to source file</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonfailure</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stop the build process if the linting process encounters an
                            error.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonwarning</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stop the build process if the linting process encounters a
                            warning.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>showwarnings</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Sets the flag if warnings should be shown.</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>cachefile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>If set, enables writing of last-modified times to
                                <literal>cachefile</literal>, to speed up processing of files that
                            rarely change</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>conffile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to JSL config file</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>tofile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>File to write list of 'bad files' to.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;jsllint file="path/to/source.php"/></programlisting>

            <para>Checking syntax of one particular source file.</para>
            <programlisting language="xml">&lt;jsllint>
  &lt;fileset dir="src">
    &lt;include name="**/*.php"/>
  &lt;/fileset>
&lt;/jsllint></programlisting>
            <para>Check syntax of a fileset of source files.</para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="JsMinTask">
        <title>JsMinTask</title>
        <para> The <literal>JsMinTask</literal> minifies JavaScript files using <link
                xlink:href="http://code.google.com/p/jsmin-php/">JsMin</link>. JsMin is bundled with
            Phing and does not need to be installed separately.</para>
        <para> For more information on minifying JavaScript files see <link
                xlink:href="http://www.crockford.com/javascript/jsmin.html" role="extern">Douglas
                Crockford's introduction to minifying JavaScript files</link>.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>targetDir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path where to store minified JavaScript files</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>suffix</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Suffix to append to the filenames.</entry>
                        <entry>-min</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>failonerror</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether an error while minifying a JavaScript file should stop the
                            build or not</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;jsMin targetDir="docroot/script/minified" failOnError="false">
  &lt;fileset dir="docroot/script">
    &lt;include name="**/*.js"/>
  &lt;/fileset>
&lt;/jsMin></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal>
                    </para>
                    <para>JavaScript files to be minified.</para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    

<sect1 role="taskdef" xml:id="LiquibaseChangeLogTask">
    <title>LiquibaseChangeLogTask</title>
    <para>The <literal>LiquibaseChangeLogTask</literal> writes the Change Log XML to copy the current state of the 
        database to the given changeLogFile.
    </para>
    <table>
        <title>Attributes</title>
        <tgroup cols="5">
            <colspec colname="name" colnum="1" colwidth="1.5*"/>
            <colspec colname="type" colnum="2" colwidth="0.8*"/>
            <colspec colname="description" colnum="3" colwidth="3.5*"/>
            <colspec colname="default" colnum="4" colwidth="0.8*"/>
            <colspec colname="required" colnum="5" colwidth="1.2*"/>
            <thead>
                <row>
                    <entry>Name</entry>
                    <entry>Type</entry>
                    <entry>Description</entry>
                    <entry>Default</entry>
                    <entry>Required</entry>
                </row>
            </thead>
            <tbody>
                <row>
                    <entry><literal>jar</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Location of the Liquibase jar file.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>classpath</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Additional classpath entries.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>changeLogFile</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Location of the changelog file in which the changes get written or read from.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>username</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The username needed to connect to the database.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>password</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The password needed to connect to the database.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>url</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The JDBC Url representing the database datasource, e.g <literal>jdbc:mysql://localhost/mydatabase</literal></entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>                
            </tbody>
        </tgroup>
    </table>
    <sect2>
        <title>Example</title>
        <programlisting language="xml">&lt;liquibase-changelog
  jar="/usr/local/lib/liquibase/liquibase.jar"
  classpathref="/usr/local/lib/liquibase/lib/mysql-connector-java-5.1.15-bin.jar"
  changelogFile="./changelogTest.xml"
  username="liquibase"
  password="liquibase"
  url="jdbc:mysql://localhost/mydatabase"
/></programlisting>
    </sect2>
</sect1>


<sect1 role="taskdef" xml:id="LiquibaseDbDocTask">
    <title>LiquibaseDbDocTask</title>
    <para>The <literal>LiquibaseDbDocTask</literal> generates a Javadoc-like documentation based on
            current database and the given changelog file.</para>
    <table>
        <title>Attributes</title>
        <tgroup cols="5">
            <colspec colname="name" colnum="1" colwidth="1.5*"/>
            <colspec colname="type" colnum="2" colwidth="0.8*"/>
            <colspec colname="description" colnum="3" colwidth="3.5*"/>
            <colspec colname="default" colnum="4" colwidth="0.8*"/>
            <colspec colname="required" colnum="5" colwidth="1.2*"/>
            <thead>
                <row>
                    <entry>Name</entry>
                    <entry>Type</entry>
                    <entry>Description</entry>
                    <entry>Default</entry>
                    <entry>Required</entry>
                </row>
            </thead>
            <tbody>
                <row>
                    <entry><literal>jar</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Location of the Liquibase jar file.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>classpath</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Additional classpath entries.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>changeLogFile</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Location of the changelog file in which the changes get written or read from.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>username</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The username needed to connect to the database.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>password</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The password needed to connect to the database.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>url</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The JDBC URL representing the database data source, e.g <literal>jdbc:mysql://localhost/mydatabase</literal></entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>outputDir</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Absolute path where the documentation gets written to. 
                        If the given directory does not exist, it get`s created automatically.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>                
                
            </tbody>
        </tgroup>
    </table>
    <sect2>
        <title>Example</title>
        <programlisting language="xml">&lt;liquibase-dbdoc
  jar="/usr/local/lib/liquibase/liquibase.jar"
  classpathref="/usr/local/lib/liquibase/lib/mysql-connector-java-5.1.15-bin.jar"
  changelogFile="./changelogTest.xml"
  username="liquibase"
  password="liquibase"
  url="jdbc:mysql://localhost/mydatabase"
  outputDir="/tmp/generateddocs"
/></programlisting>
    </sect2>
</sect1>



<sect1 role="taskdef" xml:id="LiquibaseDiffTask">
    <title>LiquibaseDiffTask</title>
    <para>The <literal>LiquibaseDiffTask</literal> creates a diff between two databases. Will 
        output the changes needed to convert the reference database to the state 
        of the database.
    </para>
    <table>
        <title>Attributes</title>
        <tgroup cols="5">
            <colspec colname="name" colnum="1" colwidth="1.5*"/>
            <colspec colname="type" colnum="2" colwidth="0.8*"/>
            <colspec colname="description" colnum="3" colwidth="3.5*"/>
            <colspec colname="default" colnum="4" colwidth="0.8*"/>
            <colspec colname="required" colnum="5" colwidth="1.2*"/>
            <thead>
                <row>
                    <entry>Name</entry>
                    <entry>Type</entry>
                    <entry>Description</entry>
                    <entry>Default</entry>
                    <entry>Required</entry>
                </row>
            </thead>
            <tbody>
                <row>
                    <entry><literal>jar</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Location of the Liquibase jar file.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>classpath</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Additional classpath entries.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>changeLogFile</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Location of the changelog file in which the changes get written or read from.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>username</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The username needed to connect to the database.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>password</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The password needed to connect to the database.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>url</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The JDBC Url representing the database datasource, e.g <literal>jdbc:mysql://localhost/mydatabase</literal></entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>                
                <row>
                    <entry><literal>referenceUsername</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The username needed to connect to the reference database.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>referencePassword</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The password needed to connect to the reference database.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>referenceUrl</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The JDBC Url representing the database reference datasource, e.g <literal>jdbc:mysql://localhost/refdatabase</literal></entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>                
            </tbody>
        </tgroup>
    </table>
    <sect2>
        <title>Example</title>
        <programlisting language="xml">&lt;liquibase-diff
  jar="/usr/local/lib/liquibase/liquibase.jar"
  classpathref="/usr/local/lib/liquibase/lib/mysql-connector-java-5.1.15-bin.jar"
  changelogFile="./changelogTest.xml"
  username="liquibase"
  password="liquibase"
  url="jdbc:mysql://localhost/mydatabase"
  referenceUsername="liquibase"
  referencePassword="liquibase"
  referenceUrl="jdbc:mysql://localhost/refdatabase"
/></programlisting>
    </sect2>
</sect1>


<sect1 role="taskdef" xml:id="LiquibaseRollbackTask">
    <title>LiquibaseRollbackTask</title>
    <para>The <literal>LiquibaseRollbackTask</literal> rolls back the database to 
        the the state is was when the tag was applied.
    </para>
    <table>
        <title>Attributes</title>
        <tgroup cols="5">
            <colspec colname="name" colnum="1" colwidth="1.5*"/>
            <colspec colname="type" colnum="2" colwidth="0.8*"/>
            <colspec colname="description" colnum="3" colwidth="3.5*"/>
            <colspec colname="default" colnum="4" colwidth="0.8*"/>
            <colspec colname="required" colnum="5" colwidth="1.2*"/>
            <thead>
                <row>
                    <entry>Name</entry>
                    <entry>Type</entry>
                    <entry>Description</entry>
                    <entry>Default</entry>
                    <entry>Required</entry>
                </row>
            </thead>
            <tbody>
                <row>
                    <entry><literal>jar</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Location of the Liquibase jar file.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>classpath</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Additional classpath entries.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>changeLogFile</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Location of the changelog file in which the changes get written or read from.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>username</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The username needed to connect to the database.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>password</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The password needed to connect to the database.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>url</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The JDBC Url representing the database datasource, e.g <literal>jdbc:mysql://localhost/mydatabase</literal></entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>                
                <row>
                    <entry><literal>rollbackTag</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The name of the tag to roll the database back to.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
            </tbody>
        </tgroup>
    </table>
    <sect2>
        <title>Example</title>
        <programlisting language="xml">&lt;liquibase-rollback
  jar="/usr/local/lib/liquibase/liquibase.jar"
  classpathref="/usr/local/lib/liquibase/lib/mysql-connector-java-5.1.15-bin.jar"
  changelogFile="./changelogTest.xml"
  username="liquibase"
  password="liquibase"
  url="jdbc:mysql://localhost/mydatabase"
  rollbackTag="tag_0_1"
/></programlisting>
    </sect2>
</sect1>


<sect1 role="taskdef" xml:id="LiquibaseTagTask">
    <title>LiquibaseTagTask</title>
    <para>The <literal>LiquibaseTagTask</literal> tags the current database 
        state for future rollback.
</para>
<table>
    <title>Attributes</title>
    <tgroup cols="5">
        <colspec colname="name" colnum="1" colwidth="1.5*"/>
        <colspec colname="type" colnum="2" colwidth="0.8*"/>
        <colspec colname="description" colnum="3" colwidth="3.5*"/>
        <colspec colname="default" colnum="4" colwidth="0.8*"/>
        <colspec colname="required" colnum="5" colwidth="1.2*"/>
        <thead>
            <row>
                <entry>Name</entry>
                <entry>Type</entry>
                <entry>Description</entry>
                <entry>Default</entry>
                <entry>Required</entry>
            </row>
        </thead>
        <tbody>
            <row>
                <entry><literal>jar</literal></entry>
                <entry><literal role="type">String</literal></entry>
                <entry>Location of the Liquibase jar file.</entry>
                <entry>n/a</entry>
                <entry>Yes</entry>
            </row>
            <row>
                <entry><literal>classpath</literal></entry>
                <entry><literal role="type">String</literal></entry>
                <entry>Additional classpath entries.</entry>
                <entry>n/a</entry>
                <entry>Yes</entry>
            </row>
            <row>
                <entry><literal>changeLogFile</literal></entry>
                <entry><literal role="type">String</literal></entry>
                <entry>Location of the changelog file in which the changes get written or read from.</entry>
                <entry>n/a</entry>
                <entry>Yes</entry>
            </row>
            <row>
                <entry><literal>username</literal></entry>
                <entry><literal role="type">String</literal></entry>
                <entry>The username needed to connect to the database.</entry>
                <entry>n/a</entry>
                <entry>Yes</entry>
            </row>
            <row>
                <entry><literal>password</literal></entry>
                <entry><literal role="type">String</literal></entry>
                <entry>The password needed to connect to the database.</entry>
                <entry>n/a</entry>
                <entry>Yes</entry>
            </row>
            <row>
                <entry><literal>url</literal></entry>
                <entry><literal role="type">String</literal></entry>
                <entry>The JDBC Url representing the database datasource, e.g <literal>jdbc:mysql://localhost/mydatabase</literal></entry>
                <entry>n/a</entry>
                <entry>Yes</entry>
            </row>                
            <row>
                <entry><literal>tag</literal></entry>
                <entry><literal role="type">String</literal></entry>
                <entry>The name of the tag to apply.</entry>
                <entry>n/a</entry>
                <entry>Yes</entry>
            </row>
        </tbody>
    </tgroup>
</table>
<sect2>
    <title>Example</title>
    <programlisting language="xml">&lt;liquibase-tag
  jar="/usr/local/lib/liquibase/liquibase.jar"
  classpathref="/usr/local/lib/liquibase/lib/mysql-connector-java-5.1.15-bin.jar"
  changelogFile="./changelogTest.xml"
  username="liquibase"
  password="liquibase"
  url="jdbc:mysql://localhost/mydatabase"
  tag="tag_0_1"
/></programlisting>
</sect2>
</sect1>


<sect1 role="taskdef" xml:id="LiquibaseUpdateTask">
    <title>LiquibaseUpdateTask</title>
    <para>The <literal>LiquibaseUpdateTask</literal> applies the latest changes from the changelog 
        file to the definied database.
    </para>
    <table>
        <title>Attributes</title>
        <tgroup cols="5">
            <colspec colname="name" colnum="1" colwidth="1.5*"/>
            <colspec colname="type" colnum="2" colwidth="0.8*"/>
            <colspec colname="description" colnum="3" colwidth="3.5*"/>
            <colspec colname="default" colnum="4" colwidth="0.8*"/>
            <colspec colname="required" colnum="5" colwidth="1.2*"/>
            <thead>
                <row>
                    <entry>Name</entry>
                    <entry>Type</entry>
                    <entry>Description</entry>
                    <entry>Default</entry>
                    <entry>Required</entry>
                </row>
            </thead>
            <tbody>
                <row>
                    <entry><literal>jar</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Location of the Liquibase jar file.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>classpath</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Additional classpath entries.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>changeLogFile</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>Location of the changelog file in which the changes get written or read from.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>username</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The username needed to connect to the database.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>password</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The password needed to connect to the database.</entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>
                <row>
                    <entry><literal>url</literal></entry>
                    <entry><literal role="type">String</literal></entry>
                    <entry>The JDBC Url representing the database datasource, e.g <literal>jdbc:mysql://localhost/mydatabase</literal></entry>
                    <entry>n/a</entry>
                    <entry>Yes</entry>
                </row>                
            </tbody>
        </tgroup>
    </table>
    <sect2>
        <title>Example</title>
        <programlisting language="xml">&lt;liquibase-update
  jar="/usr/local/lib/liquibase/liquibase.jar"
  classpathref="/usr/local/lib/liquibase/lib/mysql-connector-java-5.1.15-bin.jar"
  changelogFile="./changelogTest.xml"
  username="liquibase"
  password="liquibase"
  url="jdbc:mysql://localhost/mydatabase"
/></programlisting>
    </sect2>
</sect1>

    
    
    <sect1 role="taskdef" xml:id="MailTask">
        <title>MailTask</title>
        <para>A task to send email.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>from</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Email address of sender.</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>tolist</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Comma-separated list of recipients.</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>message</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Message to send in the body of the email.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>subject</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Email subject line.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;mail tolist="user@example.org" subject="build complete"">The build process is a success...&lt;/mail></programlisting>
        </sect2>

        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal>
                    </para>
                    <para>Files to be attached (not implemented at this time).</para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>   
    <sect1 role="taskdef" xml:id="ParallelTask">
        <title>ParallelTask</title>
        <para>Executes nested tasks in parallel.</para>
        <warning><para>This task is highly experimental, and will only work on *nix machines 
            that have the PHP <literal>pcntl</literal> extension installed.</para></warning>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>threadCount</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Maximum number of threads / processes to use.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;parallel threadCount="4">
    &lt;echo>Job 1&lt;/echo>
    &lt;echo>Job 2&lt;/echo>
    &lt;echo>Job 3&lt;/echo>
    &lt;echo>Job 4&lt;/echo>
&lt;/trycatch>\u0000</programlisting>
        </sect2>
    </sect1>
    
    
    <sect1 role="taskdef" xml:id="PatchTask">
        <title>PatchTask</title>
        <para> The <literal>PatchTask</literal> uses the <link
                xlink:href="http://savannah.gnu.org/projects/patch" role="extern">patch</link>
            program to apply diff file to originals.</para>
        <para>
            <emphasis role="bold">NB:</emphasis> the <literal>patch</literal> program must be in the
            system path! </para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>patchfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>File that includes the diff output</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>originalfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>File to patch. If not specified Task tries to guess it from the diff
                            file</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>destfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>File to send the output to instead of patching the file in
                            place</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>backups</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Keep backups of the unpatched files</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>quiet</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Work silently unless an error occurs</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>reverse</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Assume patch was created with old and new files swapped</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>ignorewhitespace</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Ignore whitespace differences</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>strip</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Strip the smallest prefix containing specified number of leading
                            slashes from filenames</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>dir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The directory in which to run the patch command</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonfailure</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stop the build process if the patching process encounters an
                            error.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;patch
  patchfile="/path/to/patches/file.ext.patch"
  dir="/path/to/original"
/></programlisting>
            <para>Apply "file.ext.path" to original file locataed in "/path/to/original"
                folder.</para>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="PDOSQLExecTask">
        <title>PDOSQLExecTask</title>
        <para> The <literal>PDOSQLExecTask</literal> executes SQL statements using PDO.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>url</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>PDO connection URL (DSN)</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>userid</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Username for connection (if it cannot be specified in URL) </entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The password to use for the connection (if it cannot be specified in
                            URL)</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <!--        <row>
<entry><literal>encoding</literal></entry>
          <entry><literal role="type">String</literal></entry>
          <entry>The database encoding.</entry>
          <entry>none</entry>
          <entry>No</entry>
        </row> -->
                    <row>
                        <entry><literal>src</literal></entry>
                        <entry>File</entry>
                        <entry>A single source file of SQL statements to execute.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>onerror</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The action to perform on error (continue, stop, or abort)</entry>
                        <entry>abort</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>delimiter</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The delimeter to separate SQL statements (e.g. "GO" in MSSQL)</entry>
                        <entry>;</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>delimitertype</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The delimiter type ("normal" or "row"). Normal means that any
                            occurence of the delimiter terminate the SQL command whereas with row,
                            only a line containing just the delimiter is recognized as the end of
                            the command.</entry>
                        <entry>normal</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>autocommit</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to autocommit every single statement.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>encoding</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Encoding to use for read SQL files</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;pdosqlexec url="pgsql:host=localhost dbname=test">
  &lt;fileset dir="sqlfiles">
	  &lt;include name="*.sql"/>
	  &lt;/fileset>
&lt;/pdosqlexec></programlisting>

            <programlisting language="xml">&lt;pdosqlexec url="mysql:host=localhost;dbname=test" userid="username" password="password">
  &lt;transaction src="path/to/sqlfile.sql"/>
  &lt;formatter type="plain" outfile="path/to/output.txt"/>
  &lt;/pdosqlexec></programlisting>
            <note>
                <para>Because of backwards compatiblity, the PDOSQLExecTask can also be called using
                    the <literal>'pdo'</literal> statement.</para>
            </note>
            <programlisting language="xml">&lt;pdo url="pgsql:host=localhost dbname=test">
  &lt;fileset dir="sqlfiles">
	  &lt;include name="*.sql"/>
  &lt;/fileset>

  &lt;!-- xml formatter -->
  &lt;formatter type="xml" output="output.xml"/>

  &lt;!-- custom formatter -->
  &lt;formatter classname="path.to.CustomFormatterClass">
    &lt;param name="someClassAttrib" value="some-value"/>
  &lt;/formatter>

  &lt;!-- No output file + usefile=false means it goes to phing log -->
  &lt;formatter type="plain" usefile="false" />
&lt;/pdo></programlisting>
        </sect2>

        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>transaction</literal>
                    </para>
                    <para>Wrapper for a single transaction. Transactions allow several files or
                        blocks of statements to be executed using the same PDO connection and commit
                        operation in between.</para>

                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>tsrcfile</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>File with statements to be run as one transaction</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
                <listitem>
                    <para><literal>fileset</literal>
                    </para>
                    <para>Files containing SQL statements.</para>
                </listitem>
                <listitem>
                    <para><literal>filelist</literal>
                    </para>
                    <para>Files containing SQL statements.</para>
                </listitem>
                <listitem>
                    <para><literal>formatter</literal>
                    </para>
                    <para>The results of any queries that are executed can be printed in different
                        formats. Output will always be sent to a file, unless you set the
                            <literal>usefile</literal> attribute to <literal>false</literal>. The
                        path to the output file file can be specified by the
                            <literal>outfile</literal> attribute; there is a default filename that
                        will be returned by the formatter if no output file is specified.</para>
                    <para>There are three predefined formatters - one prints the query results in
                        XML format, the other emits plain text. Custom formatters that extend
                        phing.tasks.pdo.PDOResultFormatter can be specified.</para>

                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>type</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Use a predefined formatter (either <literal>xml</literal>
                                        or <literal>plain</literal>). </entry>
                                    <entry>n/a</entry>
                                    <entry morerows="1">One of these attributes is required.</entry>
                                </row>
                                <row>
                                    <entry><literal>classname</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Name of a custom formatter class (must extend
                                        phing.tasks.ext.pdo.PDOResultFormatter).</entry>
                                    <entry>n/a</entry>
                                </row>
                                <row>
                                    <entry><literal>usefile</literal></entry>
                                    <entry><literal role="type">Boolean</literal></entry>
                                    <entry>Boolean that determines whether output should be sent to
                                        a file.</entry>
                                    <entry><literal>true</literal></entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>outfile</literal></entry>
                                    <entry>File</entry>
                                    <entry>Path to file in which to store result.</entry>
                                    <entry>Depends on formatter</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>showheaders</literal></entry>
                                    <entry><literal role="type">Boolean</literal></entry>
                                    <entry>(only applies to plain formatter) Whether to show column
                                        headers.</entry>
                                    <entry><literal>false</literal></entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>coldelim</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>(only applies to plain formatter) The column
                                        delimiter.</entry>
                                    <entry>,</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>rowdelim</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>(only applies to plain formatter) The row
                                        delimiter.</entry>
                                    <entry>\n</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>encoding</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>(only applies to XML formatter) The xml document
                                        encoding.</entry>
                                    <entry>(PHP default)</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>formatoutput</literal></entry>
                                    <entry><literal role="type">Boolean</literal></entry>
                                    <entry>(only applies to XML formatter) Whether to format XML
                                        output.</entry>
                                    <entry><literal>true</literal></entry>
                                    <entry>No</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="PearPackageTask">
        <title>PearPackageTask</title>
        <para> With the PearPackageTask, you can create a package.xml which can be installed using
            the PEAR installer. Use this in conjunction with the <xref xlink:href="#TarTask"/> to
            completely script the building of a PEAR package.</para>
        <note>
            <para>Note that this task creates a <literal>version 1</literal> package.xml
                file.</para>
        </note>
        <para> This task uses the <code>PEAR_PackageFileManager</code> class. In order to be
            maximally flexible, the majority of options are set generically (using
                <literal>&lt;option></literal> tag) and are set using
                <code>PEAR_PackageFileManager::setOptions()</code> . Use the
                <literal>&lt;mapping></literal> tag to represent complex values (which are turned
            into associative arrays and also set using <code>setOptions()</code> method).</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>name</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The name of the PEAR package.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>dir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The base directory of files to add to package.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>destFile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The file to create.</entry>
                        <entry>package.xml in base directory</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;pearpkg name="phing" dir="${build.src.dir}" destFile="${build.base.dir}/package.xml">
&lt;fileset dir=".">
  &lt;include name="**"/>
&lt;/fileset>
&lt;option name="notes">Sample release notes here.&lt;/option>
&lt;option name="description">Package description&lt;/option>
&lt;option name="summary">Short description&lt;/option>
&lt;option name="version" value="2.0.0b1"/>
&lt;option name="state" value="beta"/>
 &lt;mapping name="maintainers">
  &lt;element>
   &lt;element key="handle" value="hlellelid"/>
   &lt;element key="name" value="Hans"/>
   &lt;element key="email" value="hans@xmpl.org"/>
   &lt;element key="role" value="lead"/>
  &lt;/element>
&lt;/mapping>
&lt;/pearpkg></programlisting>
        </sect2>

        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
                <listitem>
                    <para><literal>option</literal></para>
                </listitem>
                <listitem>
                    <para><literal>mapping</literal></para>
                    <para> The &lt;mapping> tag represents a complex data type. You can use nested
                        &lt;mapping> (and nested &lt;element> with &lt;element> tags) to represent
                        the full complexity of the structure. Bear in mind that what you are
                        creating will be mapped to an associative array that will be passed in via
                            <code>PEAR_PackageFileMaintainer::setOptions()</code> .</para>
                    <programlisting language="xml">&lt;mapping name="option_name">
    &lt;element key="key_name" value="key_val"/>
    &lt;element key="key_name" value="key_val"/>
&lt;/mapping></programlisting>
                </listitem>
                <listitem>
                    <para> </para>
                    <para><literal>role</literal> See <link
                            xlink:href="http://pear.php.net/manual/en/package.pear.pear-packagefilemanager.pear-packagefilemanager.addrole.php"
                            role="extern">PEAR_PackageFileManager::addRole</link> for more
                        information.</para>
                    <table>
                        <title>Available options</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>extension</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>The file extension</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>role</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>The file extension</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="PearPackage2Task">
        <title>PearPackage2Task</title>
        <para> With the PearPackage2Task, you can create a <literal>version 2</literal> package.xml
            which can be installed using the PEAR installer. Use this in conjunction with the <link
                xlink:href="#TarTask">TarTask</link> to completely script the building of a PEAR
            package.</para>
        <para> This task uses the PEAR_PackageFileManager2 class. In order to be maximally flexible,
            the majority of options are set generically (using <literal>&lt;option></literal> tag)
            and are set using PEAR_PackageFileManager::setOptions(). Use the
                <literal>&lt;mapping></literal> tag to represent complex values.</para>
        <para> Note that Travis Swicegood has created a more complete implementation of this
            functionality which can be found here: <link xlink:href="http://pear.domain51.com/"
                role="extern">pear.domain51.com</link>.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>name</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The name of the PEAR package.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>dir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The base directory of files to add to package.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;pearpkg2 name="phing" dir="${build.src.dir}">
   &lt;option name="outputdirectory" value="./build"/>
   &lt;option name="packagefile" value="package2.xml"/>
   &lt;option name="packagedirectory" value="./${build.dist.dir}"/>
   &lt;option name="baseinstalldir" value="${pkg.prefix}"/>
   &lt;option name="channel" value="my.pear-channel.com"/>
   &lt;option name="summary" value="${pkg.summary}"/>
   &lt;option name="description" value="${pkg.description}"/>
   &lt;option name="apiversion" value="${pkg.version}"/>
   &lt;option name="apistability" value="beta"/>
   &lt;option name="releaseversion" value="${pkg.version}"/>
   &lt;option name="releasestability" value="beta"/>
   &lt;option name="license" value="none"/>
   &lt;option name="phpdep" value="5.0.0"/>
   &lt;option name="pearinstallerdep" value="1.4.6"/>
   &lt;option name="packagetype" value="php"/>
   &lt;option name="notes" value="${pkg.relnotes}"/>
   &lt;mapping name="maintainers">
    &lt;element>
     &lt;element key="handle" value="hlellelid"/>
     &lt;element key="name" value="Hans"/>
     &lt;element key="email" value="hans@xmpl.org"/>
     &lt;element key="role" value="lead"/>
    &lt;/element>
   &lt;/mapping>
&lt;/pearpkg2></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
                <listitem>
                    <para><literal>option</literal></para>
                    <table>
                        <title>Available options</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>summary</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry/>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>description</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry/>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>license</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry/>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>channel</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Channel name (not alias!). Must be registered
                                            (<literal>pear channel-discover channel</literal>) on
                                        the machine, where the build will be.</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>apiversion</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry/>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>releaseversion</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry/>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>releasestability</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>One from: snapshot, devel, alpha, beta or stable.</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>apistability</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>One from: devel, alpha, beta or stable.</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>note</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry/>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>packagetype</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry/>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>phpdep</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry/>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>pearinstallerdep</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry/>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
                <listitem>
                    <para><literal>mapping</literal></para>
                    <para>The <literal>&lt;mapping></literal> tag represents a complex data type.
                        You can use nested <literal>&lt;mapping></literal> (and nested
                            <literal>&lt;element></literal> with <literal>&lt;element></literal>
                        tags) to represent the full complexity of the structure. Bear in mind that
                        what you are creating will be mapped to an associative array that will be
                        passed in via <code>PEAR_PackageFileMaintainer::setOptions()</code> .</para>
                    <programlisting language="xml">&lt;mapping name="option_name">
    &lt;element key="key_name" value="key_val"/>
    &lt;element key="key_name" value="key_val"/>
&lt;/mapping></programlisting>
                    <para>Available mappings and they structures:</para>
                    <itemizedlist>
                        <listitem>
                            <para><literal>deps</literal> (optional) see <link
                                    xlink:href="http://pear.php.net/manual/en/package.pear.pear-packagefilemanager.pear-packagefilemanager.adddependency.php"
                                    >PEAR_PackageFileManager::addDependency()</link> for more info <table>
                                    <title>Parameters</title>
                                    <tgroup cols="5">
                                        <colspec colname="name" colnum="1" colwidth="1.5*"/>
                                        <colspec colname="type" colnum="2" colwidth="0.8*"/>
                                        <colspec colname="description" colnum="3" colwidth="3.5*"/>
                                        <colspec colname="default" colnum="4" colwidth="0.8*"/>
                                        <colspec colname="required" colnum="5" colwidth="1.2*"/>
                                        <thead>
                                            <row>
                                                <entry>Name</entry>
                                                <entry>Type</entry>
                                                <entry>Description</entry>
                                                <entry>Default</entry>
                                                <entry>Required</entry>
                                            </row>
                                        </thead>
                                        <tbody>
                                            <row>
                                                <entry><literal>channel</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>Channel name, from package is.</entry>
                                                <entry>n/a</entry>
                                                <entry>Yes</entry>
                                            </row>
                                            <row>
                                                <entry><literal>name</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>Package name in channel.</entry>
                                                <entry>n/a</entry>
                                                <entry>Yes</entry>
                                            </row>
                                            <row>
                                                <entry><literal>version</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>Minimal version.</entry>
                                                <entry>n/a</entry>
                                                <entry>Yes</entry>
                                            </row>
                                            <row>
                                                <entry><literal>max</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>Maximum version.</entry>
                                                <entry>Same as version.</entry>
                                                <entry>No</entry>
                                            </row>
                                            <row>
                                                <entry><literal>recommended</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>Recommended version.</entry>
                                                <entry>Same as version.</entry>
                                                <entry>No</entry>
                                            </row>
                                        </tbody>
                                    </tgroup>
                                </table>
                            </para>
                        </listitem>
                        <listitem>
                            <para><literal>extdeps</literal> (optional) see <link
                                    xlink:href="http://pear.php.net/manual/en/package.pear.pear-packagefilemanager.pear-packagefilemanager.adddependency.php"
                                    >PEAR_PackageFileManager::addDependency()</link> for more info <table>
                                    <title>Parameters</title>
                                    <tgroup cols="5">
                                        <colspec colname="name" colnum="1" colwidth="1.5*"/>
                                        <colspec colname="type" colnum="2" colwidth="0.8*"/>
                                        <colspec colname="description" colnum="3" colwidth="3.5*"/>
                                        <colspec colname="default" colnum="4" colwidth="0.8*"/>
                                        <colspec colname="required" colnum="5" colwidth="1.2*"/>
                                        <thead>
                                            <row>
                                                <entry>Name</entry>
                                                <entry>Type</entry>
                                                <entry>Description</entry>
                                                <entry>Default</entry>
                                                <entry>Required</entry>
                                            </row>
                                        </thead>
                                        <tbody>
                                            <row>
                                                <entry><literal>name</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>Package name.</entry>
                                                <entry>n/a</entry>
                                                <entry>Yes</entry>
                                            </row>
                                            <row>
                                                <entry><literal>version</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>Minimal version.</entry>
                                                <entry>n/a</entry>
                                                <entry>Yes</entry>
                                            </row>
                                            <row>
                                                <entry><literal>max</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>Maximum version.</entry>
                                                <entry>Same as version.</entry>
                                                <entry>No</entry>
                                            </row>
                                            <row>
                                                <entry><literal>recommended</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>Recommended version.</entry>
                                                <entry>Same as version.</entry>
                                                <entry>No</entry>
                                            </row>
                                        </tbody>
                                    </tgroup>
                                </table>
                            </para>
                        </listitem>
                        <listitem>
                            <para><literal>maintainers</literal> (required at least one) see <link
                                    xlink:href="http://pear.php.net/manual/en/package.pear.pear-packagefilemanager.pear-packagefilemanager.addmaintainer.php"
                                    >PEAR_PackageFileManager::addMaintainer()</link> for more info <table>
                                    <title>Parameters</title>
                                    <tgroup cols="5">
                                        <colspec colname="name" colnum="1" colwidth="1.5*"/>
                                        <colspec colname="type" colnum="2" colwidth="0.8*"/>
                                        <colspec colname="description" colnum="3" colwidth="3.5*"/>
                                        <colspec colname="default" colnum="4" colwidth="0.8*"/>
                                        <colspec colname="required" colnum="5" colwidth="1.2*"/>
                                        <thead>
                                            <row>
                                                <entry>Name</entry>
                                                <entry>Type</entry>
                                                <entry>Description</entry>
                                                <entry>Default</entry>
                                                <entry>Required</entry>
                                            </row>
                                        </thead>
                                        <tbody>
                                            <row>
                                                <entry><literal>handle</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>User identifier in channel.</entry>
                                                <entry>n/a</entry>
                                                <entry>Yes</entry>
                                            </row>
                                            <row>
                                                <entry><literal>name</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>Real name.</entry>
                                                <entry>n/a</entry>
                                                <entry>Yes</entry>
                                            </row>
                                            <row>
                                                <entry><literal>email</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry/>
                                                <entry>n/a</entry>
                                                <entry>Yes</entry>
                                            </row>
                                            <row>
                                                <entry><literal>role</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>One from: lead, developer, contributor or
                                                  helper.</entry>
                                                <entry>n/a</entry>
                                                <entry>Yes</entry>
                                            </row>
                                        </tbody>
                                    </tgroup>
                                </table>
                            </para>
                        </listitem>
                        <listitem>
                            <para><literal>replacements</literal> (optional) see <link
                                    xlink:href="http://pear.php.net/manual/en/package.pear.pear-packagefilemanager.pear-packagefilemanager.addreplacement.php"
                                    >PEAR_PackageFileManager::addReplacement()</link> for more info <table>
                                    <title>Parameters</title>
                                    <tgroup cols="5">
                                        <colspec colname="name" colnum="1" colwidth="1.5*"/>
                                        <colspec colname="type" colnum="2" colwidth="0.8*"/>
                                        <colspec colname="description" colnum="3" colwidth="3.5*"/>
                                        <colspec colname="default" colnum="4" colwidth="0.8*"/>
                                        <colspec colname="required" colnum="5" colwidth="1.2*"/>
                                        <thead>
                                            <row>
                                                <entry>Name</entry>
                                                <entry>Type</entry>
                                                <entry>Description</entry>
                                                <entry>Default</entry>
                                                <entry>Required</entry>
                                            </row>
                                        </thead>
                                        <tbody>
                                            <row>
                                                <entry><literal>path</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>Relative path of file.</entry>
                                                <entry>n/a</entry>
                                                <entry>Yes</entry>
                                            </row>
                                            <row>
                                                <entry><literal>type</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>Variable type, either php-const, pear-config
                                                  or package-info.</entry>
                                                <entry>n/a</entry>
                                                <entry>Yes</entry>
                                            </row>
                                            <row>
                                                <entry><literal>from</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>Text to replace in the source file.</entry>
                                                <entry>n/a</entry>
                                                <entry>Yes</entry>
                                            </row>
                                            <row>
                                                <entry><literal>to</literal></entry>
                                                <entry><literal role="type">String</literal></entry>
                                                <entry>Variable name to use for replacement.</entry>
                                                <entry>n/a</entry>
                                                <entry>Yes</entry>
                                            </row>
                                        </tbody>
                                    </tgroup>
                                </table>
                            </para>
                        </listitem>
                    </itemizedlist>
                </listitem>
                <listitem>
                    <para>
                        <literal>role</literal> See <link
                            xlink:href="http://pear.php.net/manual/en/package.pear.pear-packagefilemanager.pear-packagefilemanager.addrole.php"
                            role="extern">PEAR_PackageFileManager::addRole</link> for more
                        information.</para>
                    <para>Available options:</para>
                    <table>
                        <title>Parameters</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>extension</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>The file extension</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>role</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>The file extension</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="PharPackageTask">
        <title>PharPackageTask</title>
        <para>
            <link xlink:href="http://www.php.net/manual/en/book.phar.php" role="extern">Phar</link>
            packages generating with Phing. This task require <link
                xlink:href="http://pecl.php.net/package/phar" role="extern">PECL's Phar</link>
            extension to be installed on your system. Phar is built-in in PHP from 5.3
            version.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>basedir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Base directory, which will be deleted from each included file (from
                            path). Paths with deleted <literal>basedir</literal> part are local
                            paths in package.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>destfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Destination (output) file. Will be recreated, if exists!</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>compression</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Compression type (gzip, bzip2, none) to apply to the packed
                            files.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>webstub</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Relative path within the phar package to run, if accessed through a
                            web browser.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>clistub</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Relative path within the phar package to run, if accessed on the
                            command line.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>stub</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A path to a php file that contains a custom stub</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>alias</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>An alias to assign to the phar package</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>signature</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Signature algorithm (md5, sha1, sha256, sha512), used for this
                            package.</entry>
                        <entry>sha1</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <para>Sample build command:</para>
            <programlisting language="xml">&lt;pharpackage
  destfile="./build/package.phar"
  basedir="./">
  &lt;fileset dir="./classes">
    &lt;include name="**/**" />
  &lt;/fileset>
  &lt;metadata>
    &lt;element name="version" value="1.0" />
    &lt;element name="authors">
      &lt;element name="John Doe">
        &lt;element name="e-mail" value="john@example.com" />
      &lt;/element>
    &lt;/element>
  &lt;/metadata>
&lt;/pharpackage></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
                <!--
    TODO Describe metadata element.
  -->
                <listitem>
                    <para>metadata </para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="PhkPackageTask">
        <title>PhkPackageTask</title>
        <para> This task runs PHK_Creator.phk to build PHK-package. Learn more about build process
            in <link xlink:href="http://phk.tekwire.net/joomla/support/doc/builders_guide.htm"
                role="extern">PHK Builder's Guide</link>.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>phkcreatorpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to PHK_Creator.phk.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>inputdirectory</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to directory, that will be packed.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>outputfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Output PHK-file. Directory, where file will be stored, must
                            exist!</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>compress</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Compression type (gzip, bzip2, none) to apply to the packed
                            files.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>strip</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>When true, PHP source file(s) are stripped (filtered through
                            php_strip_whitespace()) before being stored into the archive.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>name</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The package's name (Information only).</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>webrunscript</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The script to run in web direct access mode. Subfile path.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>crccheck</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>If true, a CRC check will be forced every time the package is
                            mounted.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <para>Sample build command:</para>
            <programlisting language="xml">&lt;phkpackage
    phkcreatorpath="/path/to/PHK_Creator.phk"
    inputdirectory="src"
    outputfile="build/sample-project.phk"
    compress="gzip"
    strip="true"
    name="Sample Project"
    webrunscript="index.php">
    &lt;webaccess>
        &lt;paentry>/&lt;/paentry>
    &lt;/webaccess>
&lt;/phkpackage></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>webaccess</literal>
                    </para>
                    <para> Collection of <literal>path</literal> tags (see example below), that will
                        be visible outside package in web mode.</para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="PhpCodeSnifferTask">
        <title>PhpCodeSnifferTask</title>
        <para> This task runs <link xlink:href="http://pear.php.net/package/PHP_CodeSniffer"
                role="extern">PHP_CodeSniffer</link> to detect violations of a defined set of coding
            standards.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>standard</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The name of the standard to check for.</entry>
                        <entry>Generic</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>format</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The output format. The <literal>default</literal> format is specified
                            in the task itself. Additionally all report formats of PHP_CodeSniffer
                            can be choosen (ex. <literal>checkstyle</literal>,
                                <literal>full</literal>, <literal>summary</literal>, ...).</entry>
                        <entry>default</entry>
                        <entry>No Ignored if nested <literal>formatter</literal> elements are
                            supplied.</entry>
                    </row>
                    <row>
                        <entry><literal>showSniffs</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Print the list of used sniffs.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>showWarnings</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Print warnings.</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>showSources</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Flag that determines whether to show sources or not.</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>docGenerator</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The name of the doc generator (HTML, Text).</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>docFile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to write output file to. If not set documentation will be
                            written to STDOUT when <literal>docGenerator</literal> is set.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The file or folder to check (usually the nested tag
                                <literal>fileset</literal> is used instead).</entry>
                        <entry><literal>false</literal></entry>
                        <entry>Either this attribute or the nested tag <literal>fileset</literal> is
                            required.</entry>
                    </row>
                    <row>
                        <entry><literal>sniffs</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The list of allowed sniffs (separated by space, comma or semicolon).
                            The sniffs must be part of the choosen standard.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>verbosity</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>The verbosity level of CodeSniffer where level 1 prints progress
                            information and level 2 prints developer debug information.</entry>
                        <entry>0</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>encoding</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The encoding of the files to check</entry>
                        <entry>iso-8859-1</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>tabWidth</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Replaces tabs with the given number of spaces. If zero no replacing
                            is done.</entry>
                        <entry>0</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>reportWidth</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>The max. width for the report.</entry>
                        <entry>80</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>allowedFileExtensions</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The allowed file extensions / file types to process.
	                        Separated by space, comma or semicolon.</entry>
                        <entry>php, inc, js, css</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>ignorePatterns</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The patterns to ignore files and folders (separated by space, comma
                            or semicolon) when a directory is specified in the
                                <literal>file</literal> attribute.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>noSubdirectories</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Do not recurse into subdirectories when a directory is specified in
                            the <literal>file</literal> attribute.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonerror</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stop the build process if errors occurred during during the
                            run.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonwarning</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stop the build process if warnings occurred during the run.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>skipversioncheck</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Skips the version check when the task starts.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Examples</title>
            <para> Checks all files in the directory <literal>file</literal> matching the allowed
                file extension with the <literal>PEAR</literal> standard and prints the
                    <literal>summary</literal> report without warnings.</para>
            <programlisting language="xml">&lt;phpcodesniffer
  standard="PEAR"
  format="summary"
  file="/path/to/source-files"
  allowedFileExtensions="php php5 inc"/></programlisting>
            <para> Checks all matching files in the <literal>fileset</literal> with the
                    <literal>Zend</literal> standard, sets the <literal>zend_ca_path</literal>
                configuration which may be required by one of the sniffs, prints a list of used
                sniffs and prints the <literal>default</literal> report with warnings and the
                    <literal>checkstyle</literal> report to
                    <literal>/path/to/checkstyle.xml</literal>.</para>
            <programlisting language="xml">&lt;phpcodesniffer
  standard="Zend"
  showSniffs="true"
  showWarnings="true">
  &lt;fileset dir="/path/to/source-files">
    &lt;include name="**/*.php"/>
  &lt;/fileset>
  &lt;config name="zend_ca_path" value="/path/to/ZendStudio/bin/ZendCodeAnalyzer"/>
  &lt;formatter type="default" usefile="false"/>
  &lt;formatter type="checkstyle" outfile="/path/to/checkstyle.xml"/>
&lt;/phpcodesniffer></programlisting>
            <para> Checks all files in the directory <literal>file</literal> with the
                    <literal>PEAR</literal> standard and prints the <literal>checkstyle</literal>
                report without warnings. It also generates the documentation for the selected coding
                standard and writes it to the given file.</para>
            <programlisting language="xml">&lt;phpcodesniffer
  standard="PEAR"
  file="/path/to/source-files"
  docGenerator="HTML"
  docFile="/path/to/doc.html">
  &lt;formatter type="checkstyle" outfile="/path/to/checkstyle.xml"/>
&lt;/phpcodesniffer></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal>
                    </para>
                    <para>Either this nested tag or the attribute <literal>file</literal> is
                        required.</para>
                </listitem>
                <listitem>
                    <para><literal>config</literal>
                    </para>
                    <para>The configuration parameters which are usually loaded from the
                        CodeSniffer.conf can be set.</para>

                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>name</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Name of the configuration parameter.</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>value</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Value of the configuration parameter.</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
                <listitem>
                    <para><literal>formatter</literal>
                    </para>
                    <para>The results of the tests can be printed in different formats. Output will
                        always be sent to a file, unless you set the <literal>usefile</literal>
                        attribute to <literal>false.</literal>
                    </para>

                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>type</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>The output format. Accepts the the same values as the
                                            <literal>format</literal> attribute
                                            (<literal>default</literal>, <literal>xml</literal>,
                                            <literal>checkstyle</literal>, <literal>csv</literal>,
                                            <literal>report</literal>, <literal>summary</literal>
                                        &amp; <literal>doc</literal>).</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>usefile</literal></entry>
                                    <entry><literal role="type">Boolean</literal></entry>
                                    <entry>Boolean that determines whether output should be sent to
                                        a file.</entry>
                                    <entry><literal>true</literal></entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>outfile</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Path to write output file to.</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes, if <literal>usefile</literal> is
                                            <literal>true</literal>.</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="PHPCPDTask">
        <title>PHPCPDTask</title>
        <para> This task runs <link xlink:href="http://github.com/sebastianbergmann/phpcpd/"
                role="extern">phpcpd</link>, a Copy/Paste Detector (CPD) for PHP Code. You need an
            installed version of this software to use this task.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to source file or path</entry>
                        <entry>n/a</entry>
                        <entry>Only when there are <emphasis>no</emphasis> nested
                        <literal>fileset</literal> elements</entry>
                    </row>
                    <row>
                        <entry><literal>minTokens</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Sets the minimum number of identical tokens (default: 70)</entry>
                        <entry>70</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>minLines</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Sets the minimum number of identical lines (default: 5)</entry>
                        <entry>5</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>format</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The format for the report when no nested formatter is used.</entry>
                        <entry>default</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Examples</title>
            <programlisting language="xml">&lt;phpcpd file="path/to/source.php"/></programlisting>

            <para>Checking for copy/paste code in one particular source file. Sending Default-Report
                to STDOUT.</para>
            <programlisting language="xml">&lt;phpcpd file="path/to/source">
   &lt;formatter type="pmd" outfile="reports/pmd-cpd.xml"/>
 &lt;/phpcpd></programlisting>
            <para>Checking for copy/paste code in files of the given path.</para>
            <programlisting language="xml">&lt;phpcpd>
   &lt;fileset dir="${builddir}" id="filestocpd">
     &lt;include name="apps/**/*.php" />
     &lt;include name="lib/de/**/*.php" />
     &lt;include name="lib/task/**/*.php" />
     &lt;include name="lib/services/**/*.php" />
     &lt;include name="lib/form/**/*.php" />
     &lt;include name="lib/model/**/*.php" />
   &lt;/fileset>
   &lt;formatter type="pmd" outfile="reports/pmd-cpd.xml"/>
 &lt;/phpcpd></programlisting>

        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal>
                    </para>
                    <para>This nested tag is required when the <literal>file</literal> attribute is
                        not set.</para>
                </listitem>
                <listitem>
                    <para><literal>formatter</literal>
                    </para>
                    <para> The results of the copy/paste scan can be printed in different formats.
                        Output will always be sent to a file, unless you set the
                            <literal>usefile</literal> attribute to <literal>false</literal>.</para>

                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>type</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>The output format. Accepts the the same values as the
                                            <literal>format</literal> attribute
                                            (<literal>default</literal>,
                                        <literal>pmd</literal>).</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>useFile</literal></entry>
                                    <entry><literal role="type">Boolean</literal></entry>
                                    <entry>Flag that determines whether output should be sent to a
                                        file or not.</entry>
                                    <entry><literal>true</literal></entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>outfile</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Path to write output file to.</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    
    <sect1 role="taskdef" xml:id="PHPLocTask">
        <title>PHPLocTask</title>
        <para>This task runs <link xlink:href="http://github.com/sebastianbergmann/phploc/" role="extern">phploc</link>, a tool for measuring the size of PHP projects. You need an installed version of this tool (installable via PEAR) to use this task.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>reportType</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The type of the report. Available types are cli|csv|txt|xml.</entry>
                        <entry>cli</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>reportName</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The name of the report type without a file extension.</entry>
                        <entry>phploc-report</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>reportDirectory</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The directory to write the report file to.</entry>
                        <entry>false</entry>
                        <entry>Yes, when report type csv, txt or xml is defined.</entry>
                    </row>
                    <row>
                        <entry><literal>countTests</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Flag to count the projects tests or not.</entry>
                        <entry>false</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The name of the file to check.</entry>
                        <entry>n/a</entry>
                        <entry>Yes, when no nested fileset is defined.</entry>
                    </row>
                    <row>
                        <entry><literal>suffixes</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A comma-separated list of file suffixes to check.</entry>
                        <entry>php</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Examples</title>
                <programlisting language="xml">&lt;target name="-measure-and-log" description="Measures and logs the size of the project" hidden="true">
                  &lt;tstamp>
                    &lt;format property="check.date.time" pattern="%Y%m%d-%H%M%S" locale="en_US"/>
                  &lt;/tstamp>
                  &lt;phploc reportType="txt" reportName="${check.date.time}-report"
                          reportDirectory="phploc-reports">
                    &lt;fileset dir=".">
                      &lt;include name="**/*.php" />
                      &lt;include name="*.php" />
                    &lt;/fileset>
                  &lt;/phploc>
                &lt;/target></programlisting>
                <para>Checks the size of the project living in ${project.basedir} and writes the result as a txt report to ${project.basedir}/phploc-reports/${check.date.time}-report.txt.</para>
                <programlisting language="xml">&lt;target name="project-size-and-tests" description="Measures the size of the project and count it's tests">
                  &lt;phploc countTests="true">
                    &lt;fileset dir=".">
                      &lt;include name="**/*.php" />
                      &lt;include name="*.php" />
                    &lt;/fileset>
                  &lt;/phploc>
                &lt;/target></programlisting>
                <para>Checks the size of the project living in ${project.basedir}, counts the project tests and writes/logs the result to the CLI.</para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    
    <sect1 role="taskdef" xml:id="PHPMDTask">
        <title>PHPMDTask</title>
        <para> This task runs <link xlink:href="http://phpmd.org" role="extern">phpmd</link>, a
            Project Mess Detector (PMD) for PHP Code. You need an installed version of this software
            to use this task.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to source file or path</entry>
                        <entry>n/a</entry>
                        <entry>Only when there are <emphasis>no</emphasis> nested
                        <literal>fileset</literal> elements</entry>
                    </row>
                    <row>
                        <entry><literal>rulesets</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Sets the rulesets used for analyzing the source code</entry>
                        <entry>codesize, unusedcode</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>minimumPriority</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>The minimum priority for rules to load.</entry>
                        <entry>5</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>allowedFileExtensions</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Comma-separated list of valid file extensions (without dot) for
                            analyzed files.</entry>
                        <entry>php</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>ignorePatterns</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Comma-separated list of directory patterns to ignore.</entry>
                        <entry><literal>.git</literal>, <literal>.svn</literal>,
                                <literal>CVS</literal>, <literal>.bzr</literal>,
                                <literal>.hg</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>format</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The format for the report when no nested formatter is used.</entry>
                        <entry>text</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;phpmd file="path/to/source.php"/></programlisting>

            <para>Checking syntax of one particular source file. Sending Text-Report to
                STDOUT.</para>
            <programlisting language="xml">&lt;phpmd file="path/to/source">
   &lt;formatter type="html" outfile="reports/pmd.html"/>
 &lt;/phpmd></programlisting>
            <para>Checking syntax of source files in the given path.</para>
            <programlisting language="xml">&lt;phpmd>
   &lt;fileset dir="${builddir}">
     &lt;include name="apps/**/*.php" />
     &lt;include name="lib/de/**/*.php" />
   &lt;/fileset>
   &lt;formatter type="xml" outfile="reports/pmd.xml"/>
 &lt;/phpmd></programlisting>
            <para>Checking syntax of source files in the fileset pathes.</para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal>
                    </para>
                    <para> This nested tag is required when the <literal>file</literal> attribute is
                        not set.</para>
                </listitem>
                <listitem>
                    <para><literal>formatter</literal>
                    </para>
                    <para> The results of the analysis can be printed in different formats. Output
                        will always be sent to STDOUT, unless you set the <literal>usefile</literal>
                        attribute to <literal>true</literal> and set an filename in the
                            <literal>outfile</literal> attribute.</para>

                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>type</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>The output format. Accepts the the same values as the
                                            <literal>format</literal> attribute
                                            (<literal>xml</literal>, <literal>html</literal>,
                                            <literal>text</literal>).</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>usefile</literal></entry>
                                    <entry><literal role="type">Boolean</literal></entry>
                                    <entry>Boolean that determines whether output should be sent to
                                        a file.</entry>
                                    <entry><literal>true</literal></entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>outfile</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Path to write output file to.</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="PhpDependTask">
        <title>PhpDependTask</title>
        <para> This task runs <link xlink:href="http://pdepend.org" role="extern">PHP_Depend</link>,
            a software analyzer and metric tool for PHP Code. You need an installed version of this
            software to use this task.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to source file or path</entry>
                        <entry>n/a</entry>
                        <entry>Only when there are <emphasis>no</emphasis> nested
                                <literal>fileset</literal> elements</entry>
                    </row>
                    <row>
                        <entry><literal>configFile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to PHP_Depend configuration file</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>allowedFileExtensions</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Comma-separated list of valid file extensions (without dot) for
                            analyzed files.</entry>
                        <entry>php,php5</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>excludeDirectories</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Comma-separated list of directory patterns to ignore.</entry>
                        <entry><literal>.git</literal>, <literal>.svn</literal>,
                                <literal>CVS</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>excludePackages</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Comma-separated list of packages to ignore.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>withoutAnnotations</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Should the parse ignore doc comment annotations?</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>supportBadDocumentation</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Should PHP_Depend treat <literal>+global</literal> as a regular
                            project package?</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>debug</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Enable debug output?</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonerror</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stop the build process if errors occurred during the run.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;phpdepend file="path/to/source">
   &lt;logger type="phpunit-xml" outfile="reports/metrics.xml"/>
 &lt;/phpdepend></programlisting>

            <para>Running code analysis for source files in the given path.</para>
            <programlisting language="xml">&lt;phpdepend>
   &lt;fileset dir="${builddir}">
     &lt;include name="apps/**/*.php" />
     &lt;include name="lib/de/**/*.php" />
   &lt;/fileset>
   &lt;logger type="jdepend-xml" outfile="reports/jdepend.xml"/>
   &lt;analyzer type="coderank-mode" value="method"/>
 &lt;/phpdepend></programlisting>
            <para> Running code analysis for source files in the fileset pathes with CodeRank
                strategy <literal>method</literal>.</para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal>
                    </para>
                    <para> This nested tag is required when the <literal>file</literal> attribute is
                        not set.</para>
                </listitem>
                <listitem>
                    <para><literal>logger</literal>
                    </para>
                    <para>The results of the analysis can be parsed by differed loggers. At least
                        one logger is required. Output will always be sent to a file.</para>

                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>type</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>The name of the logger. Valid loggers are:
                                            <literal>jdepend-chart</literal>,
                                            <literal>jdepend-xml</literal>,
                                            <literal>overview-pyramid</literal>,
                                            <literal>phpunit-xml</literal> and
                                            <literal>summary-xml</literal>.</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>outfile</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Path to write output file to.</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
                <listitem>
                    <para><literal>analyzer</literal>
                    </para>
                    <para>Some additional analyzers can be added to the runner.</para>

                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>type</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>The name of the analyzer. Valid analyzers are:
                                            <literal>coderank-mode</literal>.</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                                <row>
                                    <entry><literal>value</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>The value for the analyzer.</entry>
                                    <entry>n/a</entry>
                                    <entry>Yes</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="PhpDocumentorTask">
        <title>PhpDocumentorTask</title>
        <para> <emphasis role="bold">This task is now deprecated in favor of the
            <xref xlink:href="#PhpDocumentor2Task"/>.</emphasis></para>
        <para> This task runs <link xlink:href="http://www.phpdoc.org/" role="extern"
                >phpDocumentor</link>, an auto-documentation tool for PHP similar to Javadoc.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>title</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Title for browser window / package index.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>destdir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Destination directory for output files.</entry>
                        <entry>n/a</entry>
                        <entry morerows="1">Yes</entry>
                    </row>
                    <row>
                        <entry><literal>target</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Alias of <literal>destdir</literal> ("target" is config param used by
                            PhpDocumentor)</entry>
                        <entry>n/a</entry>
                    </row>
                    <row>
                        <entry><literal>output</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Output format (such as <literal>HTML:Smarty:PHP</literal>).</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>sourcecode</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Generate syntax-highlighted sourcecode file for each file
                            parsed?</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>examplesdir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to directory in which to look for example documentation.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>parseprivate</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Parse @internal and elements marked private.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>javadocdesc</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>JavaDoc-compliant description parsing. Use on/off, default off (more
                            flexibility)</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>quiet</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Suppress output to STDOUT.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>packageoutput</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Output documentation only for selected packages. Use a
                            comma-delimited list</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>ignoretags</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Comma-separated list of tags to ignore (@package, @subpackage,
                            @access and @ignore may not be ignored).</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>defaultpackagename</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>name to use for the default package. If not specified, uses
                            'default'</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>defaultcategoryname</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>name to use for the default category. If not specified, uses
                            'default'</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>pear</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Treat parse dirs as PEAR repository? (package is directory, _members
                            are @access private)</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>templatebase</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Set base dirctory of all templates for this parse.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>undocumentedelements</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Control whether or not warnings will be shown for undocumented
                            elements. Useful for identifying classes and methods that haven't yet
                            been documented.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>customtags</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Custom tags, will be recognized and put in tags[] instead of
                            unknowntags[].</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>ignore</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>List of files to ignore, separated by ','.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;phpdoc title="API Documentation"
  destdir="apidocs"
  sourcecode="false"
  output="HTML:Smarty:PHP">
   &lt;fileset dir="./classes">
      &lt;include name="**/*.php" />
   &lt;/fileset>
   &lt;projdocfileset dir=".">
      &lt;include name="README" />
      &lt;include name="INSTALL" />
      &lt;include name="CHANGELOG" />
   &lt;/projdocfileset>
&lt;/phpdoc></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal> - Files that should be included for
                        parsing</para>
                </listitem>
                <listitem>
                    <para><literal>projdocfileset</literal> - Files that should be treated as
                        README/INSTALL/CHANGELOG files</para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="PhpDocumentor2Task">
        <title>DocBloxTask</title>
        <para> This task runs <link xlink:href="http://www.phpdoc.org/" role="extern"
                >phpDocumentor 2</link>, a PHP 5.3-compatible API documentation tool.
                This project is the result of the merge of the phpDocumentor
                and DocBlox projects.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>title</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Title of the project.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>destdir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Destination directory for output files.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>quiet</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Suppress DocBlox chatter.</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>template</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of the documentation template to use.</entry>
                        <entry><literal>responsive</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;phpdoc2 title="API Documentation"
  destdir="apidocs"
  template="responsive">
   &lt;fileset dir="./classes">
      &lt;include name="**/*.php" />
   &lt;/fileset>
&lt;/phpdoc2></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para>fileset - Files that should be included for parsing</para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="PhpDocumentorExternalTask">
        <title>PhpDocumentorExternalTask</title>
        <para> <emphasis role="bold">This task is now deprecated in favor of the
            <xref xlink:href="#PhpDocumentor2Task"/>.</emphasis></para>
        <para> This is the same as the <xref xlink:href="#PhpDocumentorTask"/> but uses the command
            line application. Use this as a fallback in case you're running into troubles when using
            the phpDocumentor-library with the PhpDocumentorTask directly, e.g. when you're using
            Smarty and have Smarty in your library path too.</para>
        <para>This task supports everything the PhpDocumentorTask supports, differences are
            documented below.</para>

        <table>
            <title>Parameters</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>programpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to the phpdoc executable (relative or absolute).</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>sourcepath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A directory to scan for parsable files. Supports multiple directories
                            separated with a comma.</entry>
                        <entry>n/a</entry>
                        <entry>Yes, if no <literal>&lt;fileset></literal> is given</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <table>
            <title>Unsupported Parameters</title>
            <tgroup cols="2">
                <colspec colname="c1" colnum="1" colwidth="1*"/>
                <colspec colname="c2" colnum="2" colwidth="2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>configdir</literal></entry>
                        <entry>Currently not supported. The attribute will be ignored and a warning
                            messag will be generated. The build continues (to ease when changing an
                            existing phpdoc task) however this may have unexpected side
                            effects.</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;phpdocext title="API Documentation"
  programpath="/usr/bin/phpdoc"
  destdir="apidocs"
  sourcecode="false"
  output="HTML:Smarty:PHP">
   &lt;fileset dir="./classes">
      &lt;include name="**/*.php" />
   &lt;/fileset>
   &lt;projdocfileset dir=".">
      &lt;include name="README" />
      &lt;include name="INSTALL" />
      &lt;include name="CHANGELOG" />
   &lt;/projdocfileset>
&lt;/phpdocext></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="PhpLintTask">
        <title>PhpLintTask</title>
        <para> The <literal>PhpLintTask</literal> checks syntax (lint) on one or more PHP source
            code files.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to source file</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonfailure</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stop the build process if the linting process encounters an
                            error.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>errorproperty</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The name of a property that will be set to contain the error string
                            (if any).</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>interpreter</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to alternative PHP interpreter</entry>
                        <entry>Defaults to the <literal>${php.command}</literal> property which is
                            the interpreter used to execute phing itself.</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>cachefile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>If set, enables writing of last-modified times to
                                <literal>cachefile</literal>, to speed up processing of files that
                            rarely change</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>level</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Control the level at which phplint reports status messages. One of
                                <literal>error</literal>, <literal>warning</literal>,
                                <literal>info</literal>, <literal>verbose</literal>,
                                <literal>debug</literal>.</entry>
                        <entry><literal>debug</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>tofile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>File to write list of 'bad files' to.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>deprecatedAsError</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to treat deprecated warnings (introduced in PHP 5.3) as
                            errors.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;phplint file="path/to/source.php"/></programlisting>

            <para>Checking syntax of one particular source file.</para>
            <programlisting language="xml">&lt;phplint>
  &lt;fileset dir="src">
    &lt;include name="**/*.php"/>
  &lt;/fileset>
&lt;/phplint></programlisting>
            <para>Check syntax of a fileset of source files.</para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>

        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="PHPUnitTask">
        <title>PHPUnitTask</title>
        <para> This task runs testcases using the <link xlink:href="http://www.phpunit.de/"
                role="extern">PHPUnit</link> framework. It is a functional port of the Ant <link
                xlink:href="http://ant.apache.org/manual/OptionalTasks/junit.html" role="extern"
                >JUnit</link> task.</para>
        <para>
            <emphasis role="bold">NB:</emphasis> the identifiers <literal>phpunit2</literal>
            (PHPUnit2Task) and <literal>phpunit3</literal> (PHPUnit3Task) have been deprecated! </para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>printsummary</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Print one-line statistics for each testcase.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>bootstrap</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The name of a bootstrap file that is run before executing the
                            tests.</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>codecoverage</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Gather code coverage information while running tests (requires
                            Xdebug).</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonerror</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stop the build process if an error occurs during the test
                            run.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonfailure</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stop the build process if a test fails (errors are considered
                            failures as well).</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonincomplete</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stop the build process if any incomplete tests are
                            encountered.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonskipped</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stop the build process if any skipped tests are encountered.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>failureproperty</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of property to set (to true) on failure.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>errorproperty</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of property to set (to true) on error.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>incompleteproperty</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of property to set (to true) on incomplete tests.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>skippedproperty</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of property to set (to true) on skipped tests.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>usecustomerrorhandler</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Use a custom Phing/PHPUnit error handler to process PHP
                            errors.</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>processisolation</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Enable process isolation when executing tests.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>configuration</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to a PHPUnit configuration file (such as
                        <literal>phpunit.xml</literal>). Supported elements are:
                        <literal>bootstrap</literal>,
                        <literal>processIsolation</literal>,
                        <literal>stopOnFailure</literal>,
                        <literal>stopOnError</literal>,
                        <literal>stopOnIncomplete</literal> and
                        <literal>stopOnSkipped</literal>. Values provided
                        <emphasis role="bold">overwrite</emphasis> other attributes!</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>formatter</literal>
                    </para>
                    <para>The results of the tests can be printed in different formats. Output will
                        always be sent to a file, unless you set the <literal>usefile</literal>
                        attribute to <literal>false</literal>. The name of the file is predetermined
                        by the formatter and can be changed by the <literal>outfile</literal>
                        attribute.</para>
                    <para>There are four predefined formatters - <literal>xml</literal> and
                            <literal>clover</literal> print the test results in the JUnit and Clover
                        XML formats, the other two emit plain text. The <literal>brief</literal>
                        formatter will only print detailed information for testcases that failed,
                        while <literal>plain</literal> emits a short statistics line for all test
                        cases. Custom formatters that implement
                        phing.tasks.ext.phpunit.formatter.PHPUnitResultFormatter can be
                        specified.</para>

                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>type</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Use a predefined formatter (either
                                        <literal>xml</literal>, <literal>plain</literal>,
                                            <literal>clover</literal>, or
                                        <literal>brief</literal>).</entry>
                                    <entry>n/a</entry>
                                    <entry morerows="1">One of these is required.</entry>
                                </row>
                                <row>
                                    <entry><literal>classname</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Name of a custom formatter class.</entry>
                                    <entry>n/a</entry>
                                </row>
                                <row>
                                    <entry><literal>usefile</literal></entry>
                                    <entry><literal role="type">Boolean</literal></entry>
                                    <entry>Boolean that determines whether output should be sent to
                                        a file.</entry>
                                    <entry><literal>true</literal></entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>todir</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Directory to write the file to.</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>outfile</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Filename of the result.</entry>
                                    <entry>Depends on formatter</entry>
                                    <entry>No</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
                <listitem>
                    <para><literal>batchtest</literal>
                    </para>
                    <para>Define a number of tests based on pattern matching.
                            <literal>batchtest</literal> collects the included files from any number
                        of nested &lt;fileset>s. It then generates a lists of classes that are
                        (in)directly defined by each PHP file.</para>

                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>exclude</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>A list of classes to exclude from the pattern matching.
                                        For example, when you have two baseclasses
                                            <literal>BaseWebTest</literal> and
                                            <literal>BaseMathTest</literal>, which are included a
                                        number of testcases (and thus added to the list of
                                        testclasses), you can exclude those classes from the list by
                                        typing <literal>exclude="BaseWebTest
                                        BaseMathTest"</literal>.</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>classpath</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Used to define more paths on which - besides the PHP
                                        include_path - to look for the test files.</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>name</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>The name that is used to create a testsuite from this
                                        batchtest.</entry>
                                    <entry>Phing Batchtest</entry>
                                    <entry>No</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
            </itemizedlist>
        </sect2>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;phpunit>
  &lt;formatter todir="reports" type="xml"/>
  &lt;batchtest>
    &lt;fileset dir="tests">
      &lt;include name="**/*Test*.php"/>
      &lt;exclude name="**/Abstract*.php"/>
    &lt;/fileset>
  &lt;/batchtest>
&lt;/phpunit></programlisting>
            <para> Runs all matching testcases in the directory <literal>tests</literal>, writing
                XML results to the directory <literal>reports</literal>.</para>
            <programlisting language="xml">&lt;phpunit codecoverage="true" haltonfailure="true" haltonerror="true">
  &lt;formatter type="plain" usefile="false"/>
  &lt;batchtest>
    &lt;fileset dir="tests">
      &lt;include name="**/*Test*.php"/>
    &lt;/fileset>
  &lt;/batchtest>
&lt;/phpunit></programlisting>
            <para> Runs all matching testcases in the directory <literal>tests</literal>, gathers
                code coverage information, writing plain text results to the console. The build
                process is aborted if a test fails.</para>
            <programlisting language="xml">&lt;phpunit bootstrap="src/autoload.php">
  &lt;formatter type="plain" usefile="false"/>
  &lt;batchtest>
    &lt;fileset dir="tests">
      &lt;include name="**/*Test*.php"/>
    &lt;/fileset>
  &lt;/batchtest>
&lt;/phpunit></programlisting>
            <para> Runs all matching testcases in the directory <literal>tests</literal>, writing
                plain text results to the console. Additionally, before executing the tests, the
                bootstrap file <literal>src/autoload.php</literal> is loaded.</para>
            <para>
                <emphasis role="bold">Important note:</emphasis> using a mechanism such as an
                "AllTests.php" file to execute testcases will bypass the Phing hooks used for
                reporting and counting, and could possibly lead to strange results. Instead, use one
                of more fileset's to provide a list of testcases to execute.</para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="PHPUnitReport">
        <title>PHPUnitReport</title>
        <para>This task transforms PHPUnit xml reports to HTML using XSLT.</para>
        <para>
            <emphasis role="bold">NB:</emphasis> the identifiers <literal>phpunit2report</literal>
            (PHPUnit2Report) and <literal>phpunit3report</literal> (PHPUnit3Report)have been
            deprecated! </para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>infile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The filename of the XML results file to use.</entry>
                        <entry>testsuites.xml</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>format</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The format of the generated report. Must be
                                <literal>noframes</literal> or <literal>frames</literal>.</entry>
                        <entry>noframes</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>styledir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The directory where the stylesheets are located. They must conform to
                            the following conventions: frames format: the stylesheet must be named
                                <filename>phpunit-frames.xsl</filename>. noframes format: the
                            stylesheet must be named <filename>phpunit-noframes.xsl</filename>. If
                            unspecified, the task will look for the stylesheet(s) in the following
                            directories: the PHP include path, the Phing home directory and the PEAR
                            data directory (if applicable). </entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>todir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>An existing directory where the files resulting from the
                            transformation should be written to.</entry>
                        <entry/>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>usesorttable</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to use the sorttable JavaScript library (see <link
                                xlink:href="http://www.kryogenix.org/code/browser/sorttable/"
                                >http://www.kryogenix.org/code/browser/sorttable/</link>)</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;phpunitreport infile="reports/testsuites.xml" 
    format="frames" 
    todir="reports/tests" 
    styledir="/home/phing/etc"/></programlisting>
            <para> Generates a framed report in the directory <literal>reports/tests</literal> using
                the file <literal>reports/testsuites.xml</literal> as input.</para>
            <para>
                <emphasis role="bold">Important note:</emphasis> testclasses that are not explicitly
                placed in a package (by using a '@package' tag in the class-level DocBlock) are
                listed under the "default" package.</para>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="rSTTask">
        <title>rSTTask</title>
        <para> Renders rST (reStructuredText) files into different output formats.</para>
        <para> This task requires the <literal>python docutils</literal> installed. They contain
                <literal>rst2html</literal>, <literal>rst2latex</literal>,
                <literal>rst2man</literal>, <literal>rst2odt</literal>, <literal>rst2s5</literal>,
                <literal>rst2xml</literal>.</para>
        <para> Homepage: <link xlink:href="https://gitorious.org/phing/rsttask"
                >https://gitorious.org/phing/rsttask</link>
        </para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>rST input file to render</entry>
                        <entry>n/a</entry>
                        <entry>Yes (or fileset)</entry>
                    </row>
                    <row>
                        <entry><literal>format</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>
                            <para>Output format:</para>
                            <itemizedlist>
                                <listitem>
                                    <para>html</para>
                                </listitem>
                                <listitem>
                                    <para>latex</para>
                                </listitem>
                                <listitem>
                                    <para>man</para>
                                </listitem>
                                <listitem>
                                    <para>odt</para>
                                </listitem>
                                <listitem>
                                    <para>s5</para>
                                </listitem>
                                <listitem>
                                    <para>xml</para>
                                </listitem>
                            </itemizedlist>
                        </entry>
                        <entry>html</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>destination</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to store the rendered file to. Used as directory if it ends with
                            a <literal>/</literal>.</entry>
                        <entry>magically determined from input file</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>uptodate</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Only render if the input file is newer than the target file</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>toolpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to the rst2* tool</entry>
                        <entry>determined from <literal>format</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>toolparam</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Additional commandline parameters to the rst2* tool</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>mode</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>The mode to create directories with.</entry>
                        <entry>From umask</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Features</title>
            <itemizedlist>
                <listitem>
                    <para>renders single files</para>
                </listitem>
                <listitem>
                    <para>render nested filesets</para>
                </listitem>
                <listitem>
                    <para>mappers to generate output file names based on the rst ones</para>
                </listitem>
                <listitem>
                    <para>multiple output formats</para>
                </listitem>
                <listitem>
                    <para>filter chains to e.g. replace variables after rendering</para>
                </listitem>
                <listitem>
                    <para>custom parameters to the rst2* tool</para>
                </listitem>
                <listitem>
                    <para>configurable rst tool path</para>
                </listitem>
                <listitem>
                    <para>uptodate check</para>
                </listitem>
                <listitem>
                    <para>automatically overwrites old files</para>
                </listitem>
                <listitem>
                    <para>automatically creates target directories</para>
                </listitem>
            </itemizedlist>
        </sect2>
        <sect2>
            <title>Examples</title>
            <para>Render a single rST file to HTML </para>
            <para>By default, HTML is generated. If no target file is specified, the input file name
                is taken, and its extension replaced with the correct one for the output
                format.</para>
            <programlisting language="xml">&lt;?xml version="1.0" encoding="utf-8"?>
&lt;project name="example" basedir="." default="single">
  &lt;target name="single" description="render a single rST file to HTML">

    &lt;rST file="path/to/file.rst" />

  &lt;/target>
&lt;/project></programlisting>
            <para> Render a single rST file to any supported format </para>
            <para> The <literal>format</literal> attribute determines the output format: </para>
            <programlisting language="xml">&lt;?xml version="1.0" encoding="utf-8"?>
&lt;project name="example" basedir="." default="single">
  &lt;target name="single" description="render a single rST file to S5 HTML">

    &lt;rST file="path/to/file.rst" format="s5" />

  &lt;/target>
&lt;/project></programlisting>
            <para> Specifying the output file name </para>
            <programlisting language="xml">&lt;?xml version="1.0" encoding="utf-8"?>
&lt;project name="example" basedir="." default="single">
  &lt;target name="single" description="render a single rST file">

    &lt;rST file="path/to/file.rst" destination="path/to/output/file.html" />

  &lt;/target>
&lt;/project></programlisting>
            <para> Rendering multiple files </para>
            <para> A nested <literal>fileset</literal> tag may be used to specify multiple
                files.</para>
            <programlisting language="xml">&lt;?xml version="1.0" encoding="utf-8"?>
&lt;project name="example" basedir="." default="multiple">
  &lt;target name="multiple" description="renders several rST files">

    &lt;rST>
     &lt;fileset dir=".">
       &lt;include name="README.rst" />
       &lt;include name="docs/*.rst" />
     &lt;/fileset>
    &lt;/rST>

  &lt;/target>
&lt;/project></programlisting>
            <para> Rendering multiple files to another directory </para>
            <para> A nested <literal>mapper</literal> may be used to determine the output file
                names.</para>
            <programlisting language="xml">&lt;?xml version="1.0" encoding="utf-8"?>
&lt;project name="example" basedir="." default="multiple">
  &lt;target name="multiple" description="renders several rST files">

    &lt;rST>
     &lt;fileset dir=".">
       &lt;include name="README.rst" />
       &lt;include name="docs/*.rst" />
     &lt;/fileset>
     &lt;mapper type="glob" from="*.rst" to="path/to/my/*.xhtml"/>
    &lt;/rST>

  &lt;/target>
&lt;/project></programlisting>
            <para> Modifying files after rendering </para>
            <para>You may have variables in your rST code that can be replaced after rendering, i.e.
                the version of your software.</para>
            <programlisting language="xml">&lt;?xml version="1.0" encoding="utf-8"?>
&lt;project name="example" basedir="." default="filterchain">
  &lt;target name="filterchain" description="renders several rST files">

    &lt;rST>
     &lt;fileset dir=".">
       &lt;include name="README.rst" />
       &lt;include name="docs/*.rst" />
     &lt;/fileset>
     &lt;filterchain>
       &lt;replacetokens begintoken="##" endtoken="##">
         &lt;token key="VERSION" value="1.23.0" />
       &lt;/replacetokens>
     &lt;/filterchain>
    &lt;/rST>

  &lt;/target>
&lt;/project></programlisting>
            <para> Rendering changed files only </para>
            <para> The <literal>uptodate</literal> attribute determines if only those files should
                be rendered that are newer than their output file.</para>
            <programlisting language="xml">&lt;?xml version="1.0" encoding="utf-8"?>
&lt;project name="example" basedir="." default="multiple">
  &lt;target name="multiple" description="renders several rST files">

    &lt;rST uptodate="true">
     &lt;fileset dir=".">
       &lt;include name="docs/*.rst" />
     &lt;/fileset>
    &lt;/rST>

  &lt;/target>
&lt;/project></programlisting>
            <para> Specify a custom CSS file </para>
            <para> You may pass any additional parameters to the rst conversion tools with the
                    <literal>toolparam</literal> attribute.</para>
            <programlisting language="xml">&lt;?xml version="1.0" encoding="utf-8"?>
&lt;project name="example" basedir="." default="single">
  &lt;target name="single" description="render a single rST file to S5 HTML">

    &lt;rST file="path/to/file.rst" toolparam="--stylesheet-path=custom.css" />

  &lt;/target>
&lt;/project></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
                <listitem>
                    <para><literal>mapper</literal></para>
                </listitem>
                <listitem>
                    <para><literal>filterchain</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="S3PutTask">
        <title>S3PutTask</title>
        <para> Uploads an object to Amazon S3. This task requires the PEAR package <link
                xlink:href="http://pear.php.net/package/Services_Amazon_S3" role="extern"
                >Services_Amazon_S3</link>
        </para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>key</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Amazon S3 key</entry>
                        <entry>n/a</entry>
                        <entry>Yes (or defined before task call as: amazon.key)</entry>
                    </row>
                    <row>
                        <entry><literal>secret</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Amazon S3 secret</entry>
                        <entry>n/a</entry>
                        <entry>Yes (or defined before task call as: amazon.secret)</entry>
                    </row>
                    <row>
                        <entry><literal>bucket</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Bucket to store the object in</entry>
                        <entry>n/a</entry>
                        <entry>Yes (or defined before task call as: amazon.bucket)</entry>
                    </row>
                    <row>
                        <entry><literal>content</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Content to store in the object</entry>
                        <entry>n/a</entry>
                        <entry>Yes (or source or fileset)</entry>
                    </row>
                    <row>
                        <entry><literal>source</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Where to read content for the object from</entry>
                        <entry>n/a</entry>
                        <entry>Yes (or content or fileset)</entry>
                    </row>
                    <row>
                        <entry><literal>object</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Object name</entry>
                        <entry>n/a</entry>
                        <entry>Yes (unless fileset)</entry>
                    </row>
                    <row>
                    	<entry><literal>contentType</literal></entry>
                    	<entry><literal role="type">String</literal></entry>
                    	<entry>Content type of the object, set to
                    	<literal>auto</literal> if you want to autodetect
                    	the content type based on the source file
                    	extension</entry>
                    	<entry>binary/octet-stream</entry>
                    	<entry>No</entry>
                    </row>
                     <row>
                        <entry><literal>fileNameOnly</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether filenames should contain paths when uploaded to a bucket</entry>
                        <entry>false</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <para>Uploading a file</para>
            <programlisting language="xml">&lt;s3put source="/path/to/file.txt" object="file.txt" bucket="mybucket" key="AmazonKey" secret="AmazonSecret" /></programlisting>
            <para>You can also define "bucket, key, secret" outside of the task call:</para>
            <programlisting language="xml">&lt;property name="amazon.key" value="my_key" />
&lt;property name="amazon.secret" value="my_secret" />
&lt;property name="amazon.bucket" value="mybucket" />

&lt;s3put source="/path/to/file.txt" object="file.txt" /></programlisting>
            <para>You can also specify inline content instead of a file to upload:</para>
            <programlisting language="xml">&lt;property name="amazon.key" value="my_key" />
&lt;property name="amazon.secret" value="my_secret" />
&lt;property name="amazon.bucket" value="mybucket" />

&lt;s3put content="Some content here" object="file.txt" /></programlisting>
            <para>It also works with filesets</para>
            <programlisting language="xml">&lt;property name="amazon.key" value="my_key" />
&lt;property name="amazon.secret" value="my_secret" />
&lt;property name="amazon.bucket" value="mybucket" />
&lt;s3put>
	&lt;fileset dir="${project.basedir}">
		&lt;include name="**/*.jpg" />
	&lt;/fileset>
&lt;/s3put></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="S3GetTask">
        <title>S3GetTask</title>
        <para> Downloads an object from Amazon S3. This task requires the PEAR package <link
                xlink:href="http://pear.php.net/package/Services_Amazon_S3" role="extern"
                >Services_Amazon_S3</link>
        </para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>key</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Amazon S3 key</entry>
                        <entry>n/a</entry>
                        <entry>Yes (or defined before task call as: amazon.key)</entry>
                    </row>
                    <row>
                        <entry><literal>secret</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Amazon S3 secret</entry>
                        <entry>n/a</entry>
                        <entry>Yes (or defined before task call as: amazon.secret)</entry>
                    </row>
                    <row>
                        <entry><literal>bucket</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Bucket containing the object</entry>
                        <entry>n/a</entry>
                        <entry>Yes (or defined before task call as: amazon.bucket)</entry>
                    </row>
                    <row>
                        <entry><literal>object</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Object name</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>target</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Where to store the object after download</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <para>Downloading an object</para>
            <programlisting language="xml">&lt;s3get object="file.txt" target="${project.basedir}" bucket="mybucket" key="AmazonKey" secret="AmazonSecret" /></programlisting>
            <para>You can also define "bucket, key, secret" outside of the task call:</para>
            <programlisting language="xml">&lt;property name="amazon.key" value="my_key" />
&lt;property name="amazon.secret" value="my_secret" />
&lt;property name="amazon.bucket" value="mybucket" />

&lt;s3get object="file.txt" target="${project.basedir}" /></programlisting>
        </sect2>

    </sect1>
    <sect1 role="taskdef" xml:id="ScpTask">
        <title>ScpTask</title>
        <para> The <literal>ScpTask</literal> copies files to and from a remote host using scp. This
            task requires the <link xlink:href="http://pecl.php.net/package/ssh2" role="extern">PHP
                SSH2 extension</link> to function.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>host</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Remote host</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>port</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Remote port</entry>
                        <entry>22</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>username</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Username to use for the connection</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Password to use for the connection</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>pubkeyfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Public key file (OpenSSH format) to use for the connection</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>privkeyfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Private key file (OpenSSH format) to use for the connection</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>privkeyfilepassphrase</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Private key file passphrase to use for the connection</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>autocreate</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to autocreate remote directories</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>todir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Directory to put file(s) in</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Filename to use</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>fetch</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to fetch (instead of copy to) the file</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>level</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Control the level at which the task reports status messages. One of
                                <literal>error</literal>, <literal>warning</literal>,
                                <literal>info</literal>, <literal>verbose</literal>,
                                <literal>debug</literal>.</entry>
                        <entry><literal>verbose</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;scp username="john" password="smith"
host="webserver" fetch="true"
todir="/home/john/backup"
file="/www/htdocs/test.html" /></programlisting>

            <para>Fetches a single file from the remote server.</para>
            <programlisting language="xml">&lt;scp username="john" password="smith"
host="webserver"
todir="/www/htdocs/"
file="/home/john/dev/test.html" /></programlisting>
            <para>Copies a single file to the remote server.</para>
            <programlisting language="xml">&lt;scp username="john" password="smith"
host="webserver" todir="/www/htdocs/project/">
    &lt;fileset dir="test">
        &lt;include name="*.html" />
    &lt;/fileset>
&lt;/scp></programlisting>
            <para>Copies multiple files to the remote server.</para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
                <listitem>
                    <para><literal>sshconfig</literal>
                    </para>
                    <para>Sometimes it is necessary to set specific configuration parameters on the ssh connection
                        when connecting to a remote server.  You can set them with the sshconfig nested tag.  Set the parameters
                        to specify connection and encryption options.  These are the parameters as specified by the $methods
                        parameter of the ssh2_connect function.  See <a href="http://us3.php.net/ssh2_connect" target="_blank">ssh2_connect</a>
                        for more information</para>
                    <para>sshconfig can also be used as project level parameter with a refid so the same parameters can be re-used
                        across a project easily.</para>

                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>kex</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>List of key exchange methods to advertise, comma separated in order of preference.</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>hostkey</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>List of hostkey methods to advertise, come separated in order of preference.</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>client</literal></entry>
                                    <entry><literal role="type">Nested Tag</literal></entry>
                                    <entry>Element containing attributes crypt, comp, and mac method preferences for messages sent from client to server.  All attributes are optional.</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>server</literal></entry>
                                    <entry><literal role="type">Nested Tag</literal></entry>
                                    <entry>Element containing attributes crypt, comp, and mac method preferences for messages sent from server to client.  All attributes are optional.</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="SshTask">
        <title>SshTask</title>
        <para> The <literal>SshTask</literal> executes commands on a remote host using ssh. This
            task requires the <link xlink:href="http://pecl.php.net/package/ssh2" role="extern">PHP
                SSH2 extension</link> to function.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>host</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Remote host</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>port</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Remote port</entry>
                        <entry>22</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>username</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Username to use for the connection</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Password to use for the connection</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>pubkeyfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Public key file (OpenSSH format) to use for the connection</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>privkeyfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Private key file (OpenSSH format) to use for the connection</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>privkeyfilepassphrase</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Private key file passphrase to use for the connection</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>command</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Command to execute on the remote server</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>property</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The name of the property to capture (any) output of the
                            command</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>display</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to display the output of the command</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;ssh username="john" password="smith"
host="webserver" command="ls" /></programlisting>

            <para>Executes a single command on the remote server.</para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>sshconfig</literal>
                    </para>
                    <para>Sometimes it is necessary to set specific configuration parameters on the ssh connection
                        when connecting to a remote server.  You can set them with the sshconfig nested tag.  Set the parameters
                        to specify connection and encryption options.  These are the parameters as specified by the $methods
                        parameter of the ssh2_connect function.  See <a href="http://us3.php.net/ssh2_connect" target="_blank">ssh2_connect</a>
                        for more information</para>
                    <para>sshconfig can also be used as project level parameter with a refid so the same parameters can be re-used
                        across a project easily.</para>

                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>kex</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>List of key exchange methods to advertise, comma separated in order of preference.</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>hostkey</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>List of hostkey methods to advertise, come separated in order of preference.</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>client</literal></entry>
                                    <entry><literal role="type">Nested Tag</literal></entry>
                                    <entry>Element containing attributes crypt, comp, and mac method preferences for messages sent from client to server.  All attributes are optional.</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>server</literal></entry>
                                    <entry><literal role="type">Nested Tag</literal></entry>
                                    <entry>Element containing attributes crypt, comp, and mac method preferences for messages sent from server to client.  All attributes are optional.</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
            </itemizedlist>

        </sect2>

    </sect1>
    <sect1 role="taskdef" xml:id="SimpleTestTask">
        <title>SimpleTestTask</title>
        <para> This task runs testcases using the <link xlink:href="http://www.simpletest.org/"
                role="extern">SimpleTest</link> framework.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>printsummary</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Print one-line statistics for each testcase.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonerror</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stop the build process if an error occurs during the test
                            run.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonfailure</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stop the build process if a test fails (errors are considered
                            failures as well).</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>failureproperty</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of property to set (to true) on failure.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>errorproperty</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of property to set (to true) on error.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>debug</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Switch debugging on/off</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;simpletest>
  &lt;formatter type="plain"/>
  &lt;fileset dir="tests">
    &lt;include name="**/*Test*.php"/>
    &lt;exclude name="**/Abstract*.php"/>
  &lt;/fileset>
&lt;/simpletest></programlisting>

            <para> Runs all matching testcases in the directory <literal>tests</literal>, writing
                plain text results to the console.</para>
            <programlisting language="xml">&lt;simpletest haltonfailure="true" haltonerror="true">
  &lt;formatter type="plain" usefile="false"/>
  &lt;fileset dir="tests">
    &lt;include name="**/*Test*.php"/>
  &lt;/fileset>
&lt;/simpletest></programlisting>
            <para> Runs all matching testcases in the directory <literal>tests</literal>, writing
                plain text results to the console. The build process is aborted if a test fails.
            </para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>formatter</literal>
                    </para>
                    <para>The results of the tests can be printed in different formats. Output will
                        always be sent to a file, unless you set the <literal>usefile</literal>
                        attribute to <literal>false</literal>. The name of the file is predetermined
                        by the formatter and can be changed by the <literal>outfile</literal>
                        attribute.</para>
                    <para>There are three predefined formatters - one prints the test results in XML
                        format, the other emits plain text. The formatter named brief will only
                        print detailed information for testcases that failed, while plain gives a
                        little statistics line for all test cases. Custom formatters that implement
                        phing.tasks.ext.PHPUnitResultFormatter can be specified.</para>
                    <para>If you use the XML formatter, it may not include the same output that your
                        tests have written as some characters are illegal in XML documents and will
                        be dropped.</para>

                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><literal>type</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Use a predefined formatter (either
                                        <literal>xml</literal>, <literal>plain</literal>, or
                                            <literal>summary</literal>).</entry>
                                    <entry>n/a</entry>
                                    <entry morerows="1">One of these is required.</entry>
                                </row>
                                <row>
                                    <entry><literal>classname</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Name of a custom formatter class.</entry>
                                    <entry>n/a</entry>
                                </row>
                                <row>
                                    <entry><literal>usefile</literal></entry>
                                    <entry><literal role="type">Boolean</literal></entry>
                                    <entry>Boolean that determines whether output should be sent to
                                        a file.</entry>
                                    <entry><literal>true</literal></entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>todir</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Directory to write the file to.</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry><literal>outfile</literal></entry>
                                    <entry><literal role="type">String</literal></entry>
                                    <entry>Filename of the result.</entry>
                                    <entry>Depends on formatter</entry>
                                    <entry>No</entry>
                                </row>
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>

        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="SvnCheckoutTask">
        <title>SvnCheckoutTask</title>
        <para> The <literal>SvnCheckoutTask</literal> checks out a Subversion repository to a local
            directory.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>svnpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Subversion binary</entry>
                        <entry>/usr/bin/svn</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repositoryurl</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>URL of SVN repository</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>username</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A username used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A password used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>nocache</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Connection credentials will not be cached</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>todir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to export to</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>recursive</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Recursive behavior</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>ignoreexternals</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Ignore externals definitions</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>trustServerCert</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Trust self-signed certificates</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;svncheckout
   svnpath="/usr/bin/svn"
   username="anony"
   password="anony"
   nocache="true"
   repositoryurl="svn://localhost/project/trunk/"
   todir="/home/user/svnwc"/></programlisting>

            <programlisting language="xml">&lt;svncheckout
   svnpath="C:/Subversion/bin/svn.exe"
   repositoryurl="svn://localhost/project/trunk/"
   todir="C:/projects/svnwc"/></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="SvnCommitTask">
        <title>SvnCommitTask</title>
        <para>The <literal>SvnCommitTask</literal> commits a local working copy to a SVN repository
            and sets the specified property ( default <literal>svn.committedrevision</literal>) to
            the revision number of the committed revision.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>svnpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Subversion binary</entry>
                        <entry>/usr/bin/svn</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>username</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A username used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A password used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>nocache</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Connection credentials will not be cached</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>recursive</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Recurse into all subdirectories</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>workingcopy</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Working copy</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>message</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The commit message</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>ignoreexternals</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Ignore externals definitions</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>trustServerCert</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Trust self-signed certificates</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>propertyname</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of property to set to the last committed revision number</entry>
                        <entry>svn.committedrevision</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;svncommit
    svnpath="/usr/bin/svn"
    username="anony"
    password="anony"
    nocache="true"
    workingcopy="/home/joe/dev/project"    
    message="Updated documentation, fixed typos" /></programlisting>
            <para>The most basic usage only needs the working copy and the commit message as
                in</para>
            <programlisting language="xml">&lt;svncommit
    workingcopy="/home/joe/dev/project"
    message="Updated documentation, fixed typos" />
&lt;echo message="Committed revision: ${svn.committedrevision}"/></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="SvnCopyTask">
        <title>SvnCopyTask</title>
        <para> The <literal>SvnCopyTask</literal> duplicates something in a working copy or
            repository, remembering history.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>message</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Log message</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>svnpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Subversion binary</entry>
                        <entry>/usr/bin/svn</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repositoryurl</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>URL of SVN repository</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>username</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A username used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A password used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>force</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Force overwrite files if they already exist</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>nocache</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Connection credentials will not be cached</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>todir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to export to</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>recursive</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Recursive behavior</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>trustServerCert</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Trust self-signed certificates</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;svncopy
   svnpath="/usr/bin/svn"
   username="anony"
   password="anony"
   nocache="true"
   repositoryurl="svn://localhost/project/trunk/"
   todir="svn://localhost/project/tags/0.1"/></programlisting>
        </sect2>

    </sect1>
    <sect1 role="taskdef" xml:id="SvnExportTask">
        <title>SvnExportTask</title>
        <para> The <literal>SvnExportTask</literal> exports a Subversion repository to a local
            directory.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>revision</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Revision to use in export</entry>
                        <entry>HEAD</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>svnpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Subversion binary</entry>
                        <entry>/usr/bin/svn</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repositoryurl</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>URL of SVN repository</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>username</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A username used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A password used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>nocache</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Connection credentials will not be cached</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>todir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to export to</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>recursive</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Recursive behavior</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>ignoreexternals</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Ignore externals definitions</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>trustServerCert</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Trust self-signed certificates</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;svnexport
   svnpath="/usr/bin/svn"
   username="anony"
   password="anony"
   force="true"
   nocache="true"
   repositoryurl="svn://localhost/project/trunk/"
   todir="/home/user/svnwc"/></programlisting>

            <programlisting language="xml">&lt;svnexport
   svnpath="C:/Subversion/bin/svn.exe"
   repositoryurl="svn://localhost/project/trunk/"
   todir="C:/projects/svnwc"/></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="SvnInfoTask">
        <title>SvnInfoTask</title>
        <para> The <literal>SvnInfoTask</literal> parses the output of the 'svn info --xml' command
            and extracts one specified element (+ optional sub element) from that output.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>svnpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Subversion binary</entry>
                        <entry>/usr/bin/svn</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>workingcopy</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Working copy directory</entry>
                        <entry>none</entry>
                        <entry>Yes, or <literal>repositoryurl</literal></entry>
                    </row>
                    <row>
                        <entry><literal>repositoryurl</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>URL of remote repository</entry>
                        <entry>none</entry>
                        <entry>Yes, or <literal>workingcopy</literal></entry>
                    </row>
                    <row>
                        <entry><literal>username</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A username used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A password used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>propertyname</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of property to use</entry>
                        <entry>svn.info</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>element</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Sets whether to store actual last changed revision of the
                            directory/file mentioned</entry>
                        <entry>url</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>subelement</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Sets whether to force compatibility with older SVN versions (&lt;
                            1.2)</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;svninfo
   svnpath="/usr/bin/svn"
   workingcopy="/home/user/svnwc"
   element="url"
   propertyname="svn.url"/></programlisting>
            <programlisting language="xml">&lt;svninfo
   repositoryurl="http://svn.phing.info/"
   element="commit"
   subelement="author"
   propertyname="svn.author"/></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="SvnLastRevisionTask">
        <title>SvnLastRevisionTask</title>
        <para> The <literal>SvnLastRevisionTask</literal> stores the number of the last revision of
            a Subversion workingcopy in a property.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>svnpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Subversion binary</entry>
                        <entry>/usr/bin/svn</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>workingcopy</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Working copy directory</entry>
                        <entry>none</entry>
                        <entry>Yes, or <literal>repositoryurl</literal></entry>
                    </row>
                    <row>
                        <entry><literal>repositoryurl</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>URL of remote repository</entry>
                        <entry>none</entry>
                        <entry>Yes, or <literal>workingcopy</literal></entry>
                    </row>
                    <row>
                        <entry><literal>username</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A username used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A password used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>propertyname</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of property to use</entry>
                        <entry>svn.lastrevision</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>lastChanged</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Sets whether to store actual last changed revision of the
                            directory/file mentioned</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>forceCompatible</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry><strong>Deprecated:</strong> Sets whether to force compatibility with older SVN versions (&lt;
                            1.2)</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;svnlastrevision
   svnpath="/usr/bin/svn"
   workingcopy="/home/user/svnwc"
   propertyname="svn.lastrevision"/></programlisting>
            <programlisting language="xml">&lt;svnlastrevision
   svnpath="C:/Subversion/bin/svn.exe"
   workingcopy="C:/projects/svnwc"
   propertyname="svn.lastrevision"/></programlisting>
            <programlisting language="xml">&lt;svnlastrevision
   svnpath="C:/Subversion/bin/svn.exe"
   repositoryurl="http://svn.phing.info/"
   propertyname="svn.lastrevision"/></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="SvnListTask">
        <title>SvnListTask</title>
        <para>The <literal>SvnListTask</literal> stores the output of a svn list command on a
            workingcopy or repositoryurl in a property. The result will be stored in an array,
            one string that is separated by ' | ' (in words: space pipe space) for easy parsing.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>svnpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Subversion binary</entry>
                        <entry>/usr/bin/svn</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>workingcopy</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Working copy directory</entry>
                        <entry>none</entry>
                        <entry morerows="1">One of the two</entry>
                    </row>
                    <row>
                        <entry><literal>repositoryurl</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>URL of remote repository</entry>
                        <entry>none</entry>
                    </row>
                    <row>
                        <entry><literal>username</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A username used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A password used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>propertyname</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of property to use</entry>
                        <entry>svn.list</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>forceCompatible</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry><strong>Deprecated:</strong> Sets whether to force compatibility with older SVN versions (&lt;
                            1.2)</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>limit</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Limits the number of items to get back from the command</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>orderDescending</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Sets whether to reverse the order of the listed items</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;svnlist svnpath="/usr/bin/svn" workingcopy="/home/user/svnwc" propertyname="svn.list"/></programlisting>
            <programlisting language="xml">&lt;svnlist svnpath="/usr/bin/svn" repositoryurl="http://svn.example.com/myrepo/tags" orderDescending="true" limit="10" /></programlisting>
            <para>The latter example could produce a list of your tags like this:</para>
            <programlisting language="xml">revision | author | date         | item
4028     | tony   | May 19 18:31 | Release_2.9.1.7
4026     | tony   | May 18 14:33 | Release_2.9.1.6
4023     | tony   | May 16 15:53 | Release_2.9.1.5
4018     | tony   | May 13 11:55 | Release_2.9.1.4
4005     | tony   | Apr 27 12:09 | Release_2.9.1.3
...</programlisting>
        </sect2>

    </sect1>
    <sect1 role="taskdef" xml:id="SvnLogTask">
        <title>SvnLogTask</title>
        <para>The <literal>SvnLogTask</literal> stores the output of a svn log command on a
            workingcopy or repositoryurl in a property. The result will be stored in an array,
            one string that is separated by ' | ' (in words: space pipe space) for easy parsing.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>svnpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Subversion binary</entry>
                        <entry>/usr/bin/svn</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>workingcopy</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Working copy directory</entry>
                        <entry>none</entry>
                        <entry morerows="1">One of the two</entry>
                    </row>
                    <row>
                        <entry><literal>repositoryurl</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>URL of remote repository</entry>
                        <entry>none</entry>
                    </row>
                    <row>
                        <entry><literal>username</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A username used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A password used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>propertyname</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of property to use</entry>
                        <entry>svn.list</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>forceCompatible</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry><strong>Deprecated:</strong> Sets whether to force compatibility with older SVN versions (&lt;
                            1.2)</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>limit</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Limits the number of items to get back from the command</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;svnlog svnpath="/usr/bin/svn" workingcopy="/home/user/svnwc" propertyname="svn.log"/></programlisting>
            <programlisting language="xml">&lt;svnlog svnpath="/usr/bin/svn" repositoryurl="http://svn.example.com/myrepo/trunk" limit="10" /></programlisting>
            <para>The latter example could produce a history of the latest revisions in the
                trunk:</para>
            <programlisting language="xml">4033 | tony  | 2011-05-23T14:21:12.496274Z  | some svn commit comment
4032 | tony  | 2011-05-23T13:24:46.496265Z  | some svn commit comment
4031 | tony  | 2011-05-23T09:23:28.093167Z  | some svn commit comment
...</programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="SvnUpdateTask">
        <title>SvnUpdateTask</title>
        <para> The <literal>SvnUpdateTask</literal> updates a local directory.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>svnpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Subversion binary</entry>
                        <entry>/usr/bin/svn</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>username</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A username used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A password used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>nocache</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Connection credentials will not be cached</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>todir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to the working copy</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>revision</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Specific revision to update the working copy to</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>ignoreexternals</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Ignore externals definitions</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>trustServerCert</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Trust self-signed certificates</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;svnupdate
   svnpath="/usr/bin/svn"
   username="anony"
   password="anony"
   nocache="true"
   todir="/home/user/svnwc"/></programlisting>

            <programlisting language="xml">&lt;svnupdate
   svnpath="C:/Subversion/bin/svn.exe"
   todir="C:/projects/svnwc"/></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="SvnSwitchTask">
        <title>SvnSwitchTask</title>
        <para> The <literal>SvnSwitchTask</literal> changes a local directory from one repository to
            another.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>svnpath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Subversion binary</entry>
                        <entry>/usr/bin/svn</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>repositoryurl</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>URL of remote repository</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>todir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to the checked out project</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>username</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A username used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>password</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>A password used to connect to the SVN server</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>nocache</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Connection credentials will not be cached</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>recursive</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Recursive behavior</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>ignoreexternals</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Ignore externals definitions</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>trustServerCert</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Trust self-signed certificates</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;svnswitch
   svnpath="/usr/bin/svn"
   username="anony"
   password="anony"
   nocache="true"
   repositoryurl="http://svn.phing.info/tags/2.4.2"
   todir="/home/user/svnwc"/></programlisting>
            <programlisting language="xml">&lt;svnswitch
   svnpath="C:/Subversion/bin/svn.exe"
   repositoryurl="http://svn.phing.info/tags/2.4.2"
   todir="C:/projects/svnwc"/></programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="SymfonyConsoleTask">
        <title>SymfonyConsoleTask</title>
        <para>Executes Symfony2 console commands</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>command</entry>
                        <entry>String</entry>
                        <entry>The Symfony Console command to execute</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry>console</entry>
                        <entry>String</entry>
                        <entry>The path to symfony console application</entry>
                        <entry>app/console</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Examples</title>
            <para>Simple example</para>
            <programlisting language="xml">&lt;SymfonyConsole command="cache:clear"/>
            </programlisting>
            <para>Complex example</para>
            <programlisting language="xml">&lt;SymfonyConsole command=&quot;cache:warmup">
  &lt;arg name="env" value="prod" />
  &lt;arg value="some/path/or/single/value" quotes="true">
&lt;/SymfonyConsole></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>arg</literal></para>
                    <table>
                        <title>Attributes</title>
                        <tgroup cols="5">
                            <colspec colname="name" colnum="1" colwidth="1.5*"/>
                            <colspec colname="type" colnum="2" colwidth="0.8*"/>
                            <colspec colname="description" colnum="3" colwidth="3.5*"/>
                            <colspec colname="default" colnum="4" colwidth="0.8*"/>
                            <colspec colname="required" colnum="5" colwidth="1.2*"/>
                            <thead>
                                <row>
                                    <entry>Name</entry>
                                    <entry>Type</entry>
                                    <entry>Description</entry>
                                    <entry>Default</entry>
                                    <entry>Required</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry>name</entry>
                                    <entry>String</entry>
                                    <entry>the name for this argument, -- will be appended</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry>value</entry>
                                    <entry>String</entry>
                                    <entry>the value for the argument</entry>
                                    <entry>n/a</entry>
                                    <entry>No</entry>
                                </row>
                                <row>
                                    <entry>quotes</entry>
                                    <entry>String</entry>
                                    <entry>set to true if the value should be enclosed in double quotes</entry>
                                    <entry>false</entry>
                                    <entry>No</entry>
                                </row>                                
                            </tbody>
                        </tgroup>
                    </table>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="SymlinkTask">
        <title>SymlinkTask</title>
        <para>Creates symlink(s) to a specified file / directory or a collection of files /
            directories.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>target</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>What you're trying to symlink from</entry>
                        <entry>n/a</entry>
                        <entry>Yes (or nested FileSet)</entry>
                    </row>
                    <row>
                        <entry><literal>link</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Where you'd like the symlink(s)</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>overwrite</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to override the symlink if it exists but points to a
                            different location</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <para>Single symlink</para>
            <programlisting language="xml">&lt;symlink target="/path/to/original/file" link="/where/to/symlink" /></programlisting>
            <para>Using filesets</para>
            <programlisting language="xml">&lt;symlink link="/where/to/symlink">
	&lt;fileset dir="/some/directory">
		&lt;include name="*" />
	&lt;/fileset>
&lt;/symlink></programlisting>
            <para>In the fileset example, assuming the contents of "/some/directory" were:</para>
            <itemizedlist>
                <listitem>
                    <para>Somedir</para>
                </listitem>
                <listitem>
                    <para>somefile</para>
                </listitem>
            </itemizedlist>
            <para>Then the contents of "/where/to/symlink" would be:</para>
            <itemizedlist>
                <listitem>
                    <para>Somedir -> /some/directory/Somedir</para>
                </listitem>
                <listitem>
                    <para>somefile -> /some/directory/somefile</para>
                </listitem>
            </itemizedlist>
        </sect2>


        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="TarTask">
        <title>TarTask</title>
        <para> The <literal>TarTask</literal> creates a tarball from a fileset or directory.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>destfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Tarball filename</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>basedir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Base directory to tar (if no fileset specified, entire directory
                            contents will be included in tar)</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>compression</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Type of compression to use (gzip, bzip2, none)</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>includeemptydirs</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>If set to <literal>true</literal>, also empty directories are copied. </entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>longfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>How to handle long files, those with a path > 100 chars. Allowable
                            values are: <literal>truncate</literal> - paths are truncated to the
                            maximum length, <literal>fail</literal> - paths greater than the maximim
                            cause a build exception <literal>warn</literal> - paths greater than the
                            maximum cause a warning and GNU is used, <literal>gnu</literal> - GNU
                            extensions are used for any paths greater than the maximum,
                                <literal>omit</literal> - paths greater than the maximum are omitted
                            from the archive </entry>
                        <entry>warn</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>prefix</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>File path prefix to use when adding files to archive</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <note>
            <para>files are not replaced if they are already present in the archive.</para>
        </note>
        <note>
            <para>using basedir and fileset simultaneously can result in strange contents in the
                archive.</para>
        </note>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;tar destfile="phing.tar">
 &lt;fileset dir=".">
	 &lt;include name="**/**" />
 &lt;/fileset>
&lt;/tar></programlisting>

            <para>The above example uses a fileset to determine which files to include in the
                archive.</para>
            <programlisting language="xml">&lt;tar destfile="phing.tar.gz" basedir="." compression="gzip"/></programlisting>
            <para>The second example uses the basedir attribute to include the contents of that
                directory (including subdirectories) in the archive,
                compressing the archive using gzip.</para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="UntarTask">
        <title>UntarTask</title>
        <para> The <literal>UntarTask</literal> unpacks one or more tar archives.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Archive filename</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>todir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Directory to unpack the archive(s) to</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>removepath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to remove from files in the archive(s)</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>forceExtract</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>When set to false, only extract files if the destination does not
                            exist yet or is older than the archive. When set to true, always extract
                            files.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;untar file="testtar.tar.gz" todir="dest">
  &lt;fileset dir=".">
    &lt;include name="*.tar.gz"/>
    &lt;include name="*.tar"/>
  &lt;/fileset>
&lt;/untar></programlisting>
        </sect2>

        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="UnzipTask">
        <title>UnzipTask</title>
        <para> The <literal>UnzipTask</literal> unpacks one or more ZIP archives.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Archive filename</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>todir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Directory to unpack the archive(s) to</entry>
                        <entry>none</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>forceExtract</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>When set to false, only extract files if the destination does not
                            exist yet or is older than the archive. When set to true, always extract
                            files.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;unzip file="testzip.zip" todir="dest">
  &lt;fileset dir=".">
    &lt;include name="*.zip"/>
  &lt;/fileset>
&lt;/unzip></programlisting>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="VersionTask">
        <title>VersionTask</title>
        <para> The <literal>VersionTask</literal> increments a three-part version number from a
            given file and writes it back to the file. The resulting version number is also
            published under supplied property.</para>
        <para>The version number in the text file is expected in the format of Major.Minor.Bugfix
            (e.g. 1.3.2).</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>releasetype</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Specifies desired version release (Major, Minor or Bugfix)</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>File containing three-part version number to increment</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>property</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Property which contains the resulting version number</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;version releasetype="Major" file="version.txt" property="version.number"/></programlisting>
        </sect2>

    </sect1>
    <sect1 role="taskdef" xml:id="XmlLintTask">
        <title>XmlLintTask</title>
        <para>The <literal>XmlLintTask</literal> checks syntax (lint) one or more XML files against
            an XML Schema Definition.</para>
        <para><literal>Note:</literal> This assumes that the DOM extension is loaded in PHP5 since
            this is used to drive the validation process.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>schema</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to XSD file</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to XML file</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonfailure</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stops the build when validation fails</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>useRNG</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Set to Yes if the Schema is in the n Relax NG format</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Examples</title>
            <programlisting language="xml">&lt;xmllint schema="schema.xsd" file="config.xml"/></programlisting>
            <para>Validate one XML file against one XSD file.</para>
            <programlisting language="xml">&lt;xmllint schema="schema.xsd">
  &lt;fileset dir=".">
    &lt;include name="**/config.xml"/>
  &lt;/fileset>
&lt;/xmllint></programlisting>
            <para>Validate more XML files against one XSD file.</para>

            <programlisting language="xml">&lt;fileset dir="./sources" id="sources">
  &lt;include name="main.xml"/>
  &lt;include name="chapter*.xml"/>
  &lt;include name="appendix*.xml"/>
&lt;/fileset>
&lt;property name="docbook.relaxng" value="/usr/share/xml/docbook/schema/rng/5.0/docbookxi.rng"/>

&lt;xmllint schema="${docbook.relaxng}" useRNG="yes">
  &lt;fileset refid="sources" />
&lt;/xmllint></programlisting>
            <para>Validate a set of DocBook files against the DocBook RNG grammar</para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="XmlPropertyTask">
        <title>XmlPropertyTask</title>
        <para>Loads property values from a well-formed xml file. There are no other restrictions
            than "well-formed".</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The XML file to parse.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>prefix</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>The prefix to prepend to each property</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>keepRoot</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Keep the xml root tag as the first value in the property
                            name.</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>collapseAttributes</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Treat attributes as nested elements.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>delimiter</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Delimiter for splitting multiple values.</entry>
                        <entry>,</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>required</literal></entry>
                        <entry><literal>Boolean</literal></entry>
                        <entry>If this is set to <literal>true</literal> then a build exception will
                            be raised if the file cannot be found otherwise only a warning will be
                            logged.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <para>Consider the following XML file:</para>
            <programlisting language="xml">&lt;root-tag myattr="true">
    &lt;inner-tag someattr="val">Text&lt;/inner-tag>
    &lt;a2>&lt;a3>&lt;a4>false&lt;/a4>&lt;/a3>&lt;/a2>
&lt;/root-tag></programlisting>
            <para> Used with the the following entry (<emphasis role="bold">default</emphasis>): </para>
            <programlisting language="xml">&lt;xmlproperty file="somefile.xml"/></programlisting>
            <para>results in the following properties:</para>
            <programlisting language="xml">root-tag(myattr)=true
root-tag.inner-tag=Text
root-tag.inner-tag(someattr)=val
root-tag.a2.a3.a4=false</programlisting>
            <para> Used with the the following entry (<literal>collapseAttributes=true</literal>): </para>
            <programlisting language="xml">&lt;xmlproperty file="somefile.xml" collapseAttributes="true"/></programlisting>
            <para>results in the following properties:</para>
            <programlisting language="xml">root-tag.myattr=true
root-tag.inner-tag=Text
root-tag.inner-tag.someatt=val
root-tag.a2.a3.a4=false</programlisting>
            <para> Used with the the following entry (<literal>keepRoot=false</literal>): </para>
            <programlisting language="xml">&lt;xmlproperty file="somefile.xml" keepRoot="false"/></programlisting>
            <para>results in the following properties:</para>
            <programlisting language="xml">inner-tag=Text
inner-tag(someattr)=val
a2.a3.a4=false</programlisting>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="ZendCodeAnalyzerTask">
        <title>ZendCodeAnalyzerTask</title>
        <para> The <literal>ZendCodeAnalyzerTask</literal> analyze PHP source files using the Zend
            Code Analyzer tool that ships with all versions of Zend Studio.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>analyzerPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to Zend Code Analyzer binary</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>file</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to PHP source file</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>disable</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Disable warnings separated by comma</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>enable</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Enable warnings separated by comma</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>haltonwarning</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Stop the build process if warnings occurred during the run. </entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;zendcodeanalyzer 
  analyzerPath="/usr/local/Zend/ZendStudioClient-5.1.0/bin/ZendCodeAnalyzer" 
  file="SomeClass.php"/></programlisting>

            <para>Analyze one PHP source file with all default warnings enabled.</para>
            <programlisting language="xml">&lt;zendcodeanalyzer 
  analyzerPath="/usr/local/Zend/ZendStudioClient-5.1.0/bin/ZendCodeAnalyzer" 
  disable="var-ref-notmodified,if-if-else">
  &lt;fileset dir=".">
    &lt;include name="**/*.php"/>
  &lt;/fileset>
&lt;/zendcodeanalyzer></programlisting>
            <para>Analyze a set of PHP source files and disable a few warnings.</para>
            <para>
                <emphasis role="bold">NOTE:</emphasis> the <literal>analyze</literal> tag has been
                deprecated as of Phing 2.4.</para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="ZendGuardEncodeTask">
        <title>ZendGuardEncodeTask</title>
        <para> The <literal>ZendGuardEncodeTask</literal> is a wrapper for ZendGuard zendenc
            executable. It pre-compiles the PHP code which improves speed and can prevent
            unauthorized code modification. Additionally it allows signing or licensing the code so
            it can only be used with a valid license.</para>
        <para> For more information about ZendGuard encode parameters see the <link
                xlink:href="http://static.zend.com/topics/Zend-Guard-User-Guidev5x.pdf">ZendGuard
                documentation</link>.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>zendEncoderPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to zendenc or zendenc5 binary.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>deleteSource</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Whether to delete the original file and replace with encoded.</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>renameSourceExt</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>If defined the original file will be copied to
                            originalfile.renameSourceExt before encoding. This property overrides
                            the deleteSource property.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>shortTags</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Turns on/off support for PHP short tags (&lt;?). True to enable
                            support.</entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>aspTags</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Turns on/off support for ASP tags (&lt;%). True to enable
                            support.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>noHeader</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Disables the PHP-compatible header that is added to the top of every
                            encoded file by default and is displayed if the Zend Optimizer is not
                            properly installed.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>useCrypto</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Enables cryptography support.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>encodedOnly</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>If enabled the encoded files will only work with other encoded files
                            ( I.e. encoded and not-encoded files cannot be used together).</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>forceEncode</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Allow encoding previously encoded files. Not recommended.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>expires</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Make an encoded file to expire on the given data. Date is in
                            yyyy-mm-dd format.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>obfuscationLevel</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Level of obfuscation. Defaults to 0 (no obfuscation). </entry>
                        <entry>0</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>optMask</literal></entry>
                        <entry><literal role="type">Integer</literal></entry>
                        <entry>Optimization mask. Integer representing a bit mask.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>privateKeyPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to the company private key. This is required when either
                            signProduct or licenseProduct is enabled.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>licenseProduct</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Enabled product licensing. The encoded files won't work without a
                            valid license. If enabled privateKeyPath property also needs to be
                            defined.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>signProduct</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Enabled product signing. If signing is enabled the files will be
                            encoded with license support. However valid license won't be required
                            for the files to work. If enabled privatKeyPath property also needs to
                            be defined.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>productName</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of the product. This must match the product name in the license
                            and is required when either licenseProduct or signProduct is
                            enabled.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>prologFile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to a file containing a text that will be prepended to each
                            encoded file and displayed in case the Zend Optimizer is not
                            installed.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;zendguardencode
 shortTags="false"
 productName="Phing"
 privateKeyPath="/var/data/phing.key"
 licenseProduct="true"
 zendEncoderPath="/usr/local/Zend/ZendGuard-5_0_1/bin/zendenc5"
 >

 &lt;fileset dir="src">
   &lt;include name="**/*.php" />
   &lt;exclude name="cache/**" />
   &lt;exclude name="plugins/**" />
 &lt;/fileset>
 
 &lt;fileset dir="src">
   &lt;include name="plugins/cs*/**/*.php" />
   &lt;include name="plugins/cs*/*.php" />
 &lt;/fileset>
&lt;/zendguardencode></programlisting>

            <para>Encode all php files in the current directory and subdirectories. Exlude
                everything in <filename role="dir">cache/</filename> and <filename role="dir"
                    >plugins/</filename> but include everything in plugins that starts with
                cs.</para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="ZendGuardLicenseTask">
        <title>ZendGuardLicenseTask</title>
        <para> The <literal>ZendGuardLicenseTask</literal> is a wrapper for ZendGuard
                <literal>zendenc_sign</literal> executable. It generates ZendGuard license either
            from a license template file or from the defined properties.</para>
        <para> For more information about ZendGuard sign parameters see the <link
                xlink:href="http://static.zend.com/topics/Zend-Guard-User-Guidev5x.pdf">ZendGuard
                documentation</link>.</para>

        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>zendsignPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to zendenc_sign binary.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>privateKeyPath</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to the company private key. </entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>outputFile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path where should the license be generated.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>licenseTemplate</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Path to a license template file. If defined all other licensing
                            properties will be ignored (even if they are otherwise
                            required).</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>productName</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name of the product. This has to match the product name that was used
                            to encode the files (see ZendGuardEncodeTask).</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>registeredTo</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Name to which the product will be registered to.</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>expires</literal></entry>
                        <entry>Mixed</entry>
                        <entry>This allows to define when the license will expire. The license can
                            be issued so it either never expires or expires at a specified data.
                            Use: <literal>'Never'</literal>, 0 or false to set expiry data to Never.
                            Date in yyyy-mm-dd format to set the expiry date to a specific date.
                            Relative format supported by strtotime function (e.g. '+6 months' to
                            generate a license that will expire in half a year). </entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>ipRange</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Limits the use of the license to IP addresses that fall within
                            specification. Supports wildcards for any of the IP place holders, as
                            well as the two types of the net masks (e.g. 10.1.0.0/16 or
                            10.1.0.0./255.255.0.0).</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>hardwareLocked</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>Option that indicates if the license will be locked to a specific
                            machine using the Zend Host ID code(s). If set to true the Host-ID
                            property is required.</entry>
                        <entry><literal>false</literal></entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>hostID</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Coded string (Zend Host ID) used to lock the license to a specific
                            hardware. The Zend Host Id obtained from the machine where the encoded
                            files and license are to be installed. Can be obtained by using the
                            zendid utility. This is REQUIRED if the Hardware-Locked property is set
                            to true. You can define multiple Host IDs separated by
                            semicolon.</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>userDefinedValues</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Optional user defined values in format key=value. Multiple key-value
                            pairs can be defined and separated by semicolon. These values then will
                            be part of the license and can be obtained using the zend guard api
                            (provided by Zend Optimizer). These values CANNOT be modified after the
                            license is generated. Their modification would invalidate the license.
                            Example: Drink=Tea;Material=Wood</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>xUserDefinedValues</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Optional user defined values in format key=value. Multiple key-value
                            pairs can be defined and separated by semicolon. These values then will
                            be part of the license and can be obtained using the zend guard api
                            (provided by Zend Optimizer). These values CAN be modified after the
                            license is generated. Their modification won't invalidate the license.
                            Example: Drink=Tea;Material=Wood</entry>
                        <entry>n/a</entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>


        <sect2>
            <title>Examples</title>
            <programlisting language="xml">&lt;zendguardlicense
            privateKeyPath="/var/data/phing.key"
            zendsignPath="/usr/local/Zend/ZendGuard-5_0_1/bin/zendenc_sign"
            outputFile="./data/license/license.zl"
            productName="Phing"
            registeredTo="YourCustomerName"
            hardwareLocked="true"
            expires="+6 months"
            HostID="H:MFM43-Q9CXC-B9EDX-GWYSU;H:MFM43-Q9CXC-B9EDX-GWYTY"
            ipRange="10.1.*.*"
            userDefinedValues="Drink=Tea;Material=Wood"
            xUserDefinedValues="Drink=Tea;Material=Wood"
/></programlisting>
            <para>Creates a license using the given properties.</para>
            <programlisting language="xml">&lt;zendguardlicense
            privateKeyPath="/var/data/phing.key"
            zendsignPath="/usr/local/Zend/ZendGuard-5_0_1/bin/zendenc_sign"
            outputFile="./data/license/license.zl"
            licenseTemplate="./data/license/license.template.zl"
/></programlisting>
            <para>Creates a license using a license template file.</para>
        </sect2>
    </sect1>
    <sect1 role="taskdef" xml:id="ZipTask">
        <title>ZipTask</title>
        <para> The <literal>ZipTask</literal> creates a .zip archive from a fileset or
            directory.</para>
        <table>
            <title>Attributes</title>
            <tgroup cols="5">
                <colspec colname="name" colnum="1" colwidth="1.5*"/>
                <colspec colname="type" colnum="2" colwidth="0.8*"/>
                <colspec colname="description" colnum="3" colwidth="3.5*"/>
                <colspec colname="default" colnum="4" colwidth="0.8*"/>
                <colspec colname="required" colnum="5" colwidth="1.2*"/>
                <thead>
                    <row>
                        <entry>Name</entry>
                        <entry>Type</entry>
                        <entry>Description</entry>
                        <entry>Default</entry>
                        <entry>Required</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><literal>destfile</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>.ZIP filename</entry>
                        <entry>n/a</entry>
                        <entry>Yes</entry>
                    </row>
                    <row>
                        <entry><literal>basedir</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>Base directory to zip (if no fileset specified, entire directory
                            contents will be included in the archive)</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>prefix</literal></entry>
                        <entry><literal role="type">String</literal></entry>
                        <entry>File path prefix to use when adding files to zip</entry>
                        <entry>none</entry>
                        <entry>No</entry>
                    </row>
                    <row>
                        <entry><literal>includeemptydirs</literal></entry>
                        <entry><literal role="type">Boolean</literal></entry>
                        <entry>If set to <literal>true</literal>, also empty directories are copied. </entry>
                        <entry><literal>true</literal></entry>
                        <entry>No</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <para>
            <emphasis role="bold">Important note:</emphasis> using basedir and fileset
            simultaneously can result in strange contents in the archive.</para>
        <sect2>
            <title>Example</title>
            <programlisting language="xml">&lt;zip destfile="phing.zip">
 &lt;fileset dir=".">
	 &lt;include name="**/**" />
 &lt;/fileset>
&lt;/zip></programlisting>

            <para>The above example uses a fileset to determine which files to include in the
                archive.</para>
            <programlisting language="xml">&lt;zip destfile="phing.zip" basedir="."/></programlisting>
            <para>The second example uses the basedir attribute to include the contents of that
                directory (including subdirectories) in the archive.</para>
        </sect2>
        <sect2 role="nestedtags">
            <title>Supported Nested Tags</title>
            <itemizedlist>
                <listitem>
                    <para><literal>fileset</literal></para>
                </listitem>
            </itemizedlist>
        </sect2>
    </sect1>
</appendix>
