<?xml version="1.0" encoding="UTF-8"?>
<project name="gitlist" default="build">
    <property name="vendordir" value="${basedir}/vendor/bin" />
    <target name="build" depends="prepare,lint,phploc,pdepend,phpmd,phpcpd,phpunit,phpcs" />
    <target name="build-package" depends="prepare-package,package" />

    <target name="clean" description="Clean build artifacts">
        <delete dir="${basedir}/build"/>
    </target>

    <target name="get-composer" description="Get Composer">
        <exec executable="/bin/bash">
            <arg value="-c" />
            <arg value="curl -s https://getcomposer.org/installer | php" />
        </exec>
    </target>

    <target name="prepare" depends="clean,get-composer" description="Prepare for build">
        <mkdir dir="${basedir}/build/logs"/>
        <mkdir dir="${basedir}/build/pdepend"/>
        <copy file="config.ini-example" tofile="config.ini"/>
        <exec executable="${basedir}/composer.phar" failonerror="true">
            <arg value="install" />
            <arg value="--dev" />
        </exec>
    </target>

    <target name="prepare-package" description="Prepare for build">
        <delete dir="${basedir}/vendor"/>
        <exec executable="${basedir}/composer.phar" failonerror="true">
            <arg value="install" />
            <arg value="--optimize-autoloader" />
        </exec>
    </target>

    <target name="lint" description="Perform syntax check of sourcecode files">
        <apply executable="php" failonerror="true">
        <arg value="-l" />

        <fileset dir="${basedir}/">
            <include name="**/*.php" />
            <exclude name="vendor/" />
            <exclude name="cache/" />
            <modified />
        </fileset>
        </apply>
    </target>

    <target name="phploc" description="Measure project size using PHPLOC">
        <exec executable="${vendordir}/phploc">
            <arg value="--log-csv" />
            <arg value="${basedir}/build/logs/phploc.csv" />
            <arg path="${basedir}/src" />
        </exec>
    </target>

    <target name="pdepend" description="Calculate software metrics using PHP_Depend">
        <exec executable="${vendordir}/pdepend">
            <arg value="--jdepend-xml=${basedir}/build/logs/jdepend.xml" />
            <arg value="--jdepend-chart=${basedir}/build/pdepend/dependencies.svg" />
            <arg value="--overview-pyramid=${basedir}/build/pdepend/overview-pyramid.svg" />
            <arg value="--ignore=${basedir}/cache,${basedir}/vendor" />
            <arg path="${basedir}/src" />
        </exec>
    </target>

    <target name="phpmd" description="Perform project mess detection using PHPMD creating a log file for the continuous integration server">
        <exec executable="${vendordir}/phpmd">
            <arg path="${basedir}/src" />
            <arg value="xml" />
            <arg value="codesize,design,unusedcode,naming" />
            <arg value="--reportfile" />
            <arg value="${basedir}/build/logs/pmd.xml" />
        </exec>
    </target>

    <target name="phpcpd" description="Find duplicate code using PHPCPD">
        <exec executable="${vendordir}/phpcpd">
            <arg value="--log-pmd" />
            <arg value="${basedir}/build/logs/pmd-cpd.xml" />
            <arg path="${basedir}/src" />
        </exec>
    </target>

    <target name="phpunit" description="Run unit tests with PHPUnit">
        <exec executable="${vendordir}/phpunit" failonerror="true"/>
    </target>

    <target name="phpcs" description="Find coding standard violations using PHP_CodeSniffer creating a log file for the continuous integration server">
        <exec executable="${vendordir}/phpcs" output="/dev/null">
            <arg value="--report=checkstyle" />
            <arg value="--report-file=${basedir}/build/logs/checkstyle.xml" />
            <arg value="--standard=PSR2" />
            <arg path="${basedir}/src" />
        </exec>
    </target>

    <target name="package" description="Package the application for distribution">
        <copy todir="${basedir}/build/gitlist/">
            <fileset dir="${basedir}" excludes="cache/**, build/**, tests/**, pkg_builder/**, phpunit.xml.dist, cache.properties, .gitignore, .travis.yml, build.xml, composer.json, composer.lock, config.ini" />
        </copy>

        <tar destfile="${basedir}/build/gitlist-master.tar.gz"
            basedir="${basedir}/build/"
            compression="gzip"
            longfile="gnu"
            excludes="gitlist-master.tar.gz, **/logs/**, **/pdepend/**"
        />
    </target>
</project>