<?xml version="1.0"?>

<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at
 
        http://www.apache.org/licenses/LICENSE-2.0
 
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
 -->

<project name="extra-targets" basedir=".">
  <description>
    This file is designed for importing into a main build file, and not intended
    for standalone use.
  </description>
  
  <import file="lucene/common-build.xml"/>

  <target name="-run-test">
    <mkdir dir="lucene/build" />
    <tempfile property="tests.totals.tmpfile"
          destdir="lucene/build"
          prefix=".test-totals-"
          suffix=".tmp"
          deleteonexit="true"
          createfile="true" />

    <subant target="test" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset>
        <propertyref name="tests.totals.tmpfile" />
      </propertyset>      
    </subant>

    <property name="tests.totals.toplevel" value="true" />
    <antcall target="-check-totals" />
  </target>

  <!--
   Run after Junit tests.
   
   This target is in a separate file, as it needs to include common-build.xml,
   but must run from top-level!
   -->
  <target name="-generate-clover-reports" depends="clover">
    <fail unless="run.clover">Clover not enabled!</fail>
    <mkdir dir="${clover.report.dir}"/>
    <fileset dir="." id="clover.test.result.files">
      <include name="*/build/**/test/TEST-*.xml"/>
      <exclude name="lucene/build/backwards/**"/>
    </fileset>
    <clover-report>
      <current outfile="${clover.report.dir}" title="${final.name}" numThreads="0">
        <format type="html" filter="assert"/>
        <testresults refid="clover.test.result.files"/>
      </current>
      <current outfile="${clover.report.dir}/clover.xml" title="${final.name}">
        <format type="xml" filter="assert"/>
        <testresults refid="clover.test.result.files"/>
      </current>
    </clover-report>
    <echo>You can find the merged Lucene/Solr Clover report in '${clover.report.dir}'.</echo>
  </target>

  <target name="-run-maven-build" depends="install-maven-tasks">
    <mvn xmlns="antlib:org.apache.maven.artifact.ant" pom="${maven-build-dir}/pom.xml"
      mavenVersion="${maven-version}" failonerror="true" fork="true">
      <arg value="-fae"/>
      <arg value="install"/>
      <syspropertyset>
        <propertyref builtin="commandline"/>
      </syspropertyset>
    </mvn>
  </target>

  <target name="-check-svn-working-copy" depends="ivy-availability-check,ivy-fail,ivy-configure,resolve-groovy">
    <svn-checker failonmodifications="false"/>
  </target>

  <!-- should only be called by jenkins, not precommit! -->
  <target name="-check-after-regeneration" depends="ivy-availability-check,ivy-fail,ivy-configure,resolve-groovy">
    <svn-checker failonmodifications="true"/>
  </target>
  
  <property name="svnkit.version" value="1.8.4"/>

  <macrodef xmlns:ivy="antlib:org.apache.ivy.ant" name="svn-checker">
    <attribute name="failonmodifications" default="true"/> <!-- false if file modifications are allowed -->
    <sequential>
    <ivy:cachepath organisation="org.tmatesoft.svnkit" module="svnkit" revision="${svnkit.version}"
      inline="true" conf="default" transitive="true" pathid="svnkit.classpath"/>
    <local name="svn.checkprops.failed"/>
    <local name="svn.unversioned.failed"/>
    <local name="svn.changed.failed"/>
    <groovy taskname="svn" classpathref="svnkit.classpath"><![CDATA[
      import org.tmatesoft.svn.core.*;
      import org.tmatesoft.svn.core.wc.*;
      import org.apache.tools.ant.Project;
      
      SVNClientManager manager = SVNClientManager.newInstance();
      SVNStatusClient statusClient = manager.getStatusClient();
      SVNWCClient wcClient = manager.getWCClient();
      
      File basedir = new File(project.getProperty('basedir')).getAbsoluteFile();
      int baseLen = basedir.toString().length();

      // do some fake check, to verify if this is valid SVN working copy. If this fails ignore checks but log some useful message.
      task.log('Initializing working copy...');
      try {
        wcClient.doInfo(basedir, SVNRevision.WORKING);
      } catch (SVNException ex) {
        def ec = ex.getErrorMessage().getErrorCode();
        int code = ec.getCode();
        int category = ec.getCategory();
        if (code == SVNErrorCode.WC_NOT_DIRECTORY.getCode() || code == SVNErrorCode.WC_NOT_FILE.getCode()) {
          task.log('WARNING: Development directory is not an SVN checkout! Disabling checks...', Project.MSG_WARN);
          return;
        } else if (category == SVNErrorCode.WC_CATEGORY) {
          task.log('WARNING: Development directory is not a valid SVN checkout (' + ex.getErrorMessage() + '). Disabling checks...', Project.MSG_WARN);
          return;
        } else {
          throw ex;
        }
      }
      
      def convertRelative = {
        file -> '.' + file.getAbsolutePath().substring(baseLen).replace(File.separatorChar, (char)'/');
      }

      Set missingProps = new TreeSet(), unversioned = new TreeSet(), changed = new TreeSet();

      task.log('Getting all versioned and unversioned files...');
      statusClient.doStatus(basedir, SVNRevision.WORKING, SVNDepth.fromRecurse(true), false, true, false, false, {
        status ->
        SVNStatusType nodeStatus = status.getNodeStatus();
        if (nodeStatus == SVNStatusType.STATUS_UNVERSIONED || nodeStatus == SVNStatusType.STATUS_MISSING) {
          unversioned.add(convertRelative(status.getFile()));
        } else if (status.getKind() == SVNNodeKind.FILE && nodeStatus != SVNStatusType.STATUS_DELETED) {
          missingProps.add(convertRelative(status.getFile()));
        }
        if (nodeStatus == SVNStatusType.STATUS_MODIFIED || nodeStatus == SVNStatusType.STATUS_REPLACED ||
            nodeStatus == SVNStatusType.STATUS_DELETED  || nodeStatus == SVNStatusType.STATUS_ADDED) {
          changed.add(convertRelative(status.getFile()));
        }
      } as ISVNStatusHandler, null);

      task.log('Filtering files with existing svn:eol-style...');
      wcClient.doGetProperty(basedir, 'svn:eol-style', SVNRevision.WORKING, SVNRevision.WORKING, true, {
        file, prop -> missingProps.remove(convertRelative(file));
      } as ISVNPropertyHandler);
      
      task.log('Filtering files with binary svn:mime-type...');
      wcClient.doGetProperty(basedir, 'svn:mime-type', SVNRevision.WORKING, SVNRevision.WORKING, true, {
        file, prop ->
        prop = SVNPropertyValue.getPropertyAsString(prop.getValue());
        if (prop.startsWith('application/') || prop.startsWith('image/')) {
          missingProps.remove(convertRelative(file));
        }
      } as ISVNPropertyHandler);
      
      def convertSet2String = {
        set -> set ? ('* ' + set.join(project.getProperty('line.separator') + '* ')) : null
      };
      project.setProperty('svn.checkprops.failed', convertSet2String(missingProps));
      project.setProperty('svn.unversioned.failed', convertSet2String(unversioned));
      project.setProperty('svn.changed.failed', convertSet2String(changed));
    ]]></groovy>
    <fail if="svn.checkprops.failed"
      message="The following files are missing svn:eol-style (or binary svn:mime-type):${line.separator}${svn.checkprops.failed}"/>
    <fail if="svn.unversioned.failed"
      message="Source checkout is dirty after running tests!!! Offending files:${line.separator}${svn.unversioned.failed}"/>
    <fail message="Source checkout is modified !!! Offending files:${line.separator}${svn.changed.failed}">
      <condition>
        <and>
           <istrue value="@{failonmodifications}"/>
           <isset property="svn.changed.failed"/>
        </and>
      </condition>
    </fail>
    </sequential>
  </macrodef>
</project>
