<?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.5"/>

  <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.keywords.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(properties['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(), withKeywords = 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);
      
      task.log('Scanning for files with svn:keywords property...');
      wcClient.doGetProperty(basedir, 'svn:keywords', SVNRevision.WORKING, SVNRevision.WORKING, true, {
        file, prop -> withKeywords.add(convertRelative(file));
      } as ISVNPropertyHandler);
      
      def setProjectPropertyFromSet(prop, set) {
        if (set) {
          properties[prop] = '* ' + set.join(properties['line.separator'] + '* ');
        }
      };
      setProjectPropertyFromSet('svn.checkprops.failed', missingProps);
      setProjectPropertyFromSet('svn.keywords.failed', withKeywords);
      setProjectPropertyFromSet('svn.unversioned.failed', unversioned);
      setProjectPropertyFromSet('svn.changed.failed', 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.keywords.failed"
      message="The following files have the svn:keywords property set:${line.separator}${svn.keywords.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>
