<?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="lucene-solr" default="-projecthelp" basedir=".">
  <import file="lucene/common-build.xml"/>

  <property name="svnkit.version" value="1.8.10"/>

  <property name="tests.heap-dump-dir" location="heapdumps"/>
  
  <property name="maven-build-dir" value="maven-build"/>
  <property name="maven-version" value="2.2.1"/>
  <property name="maven.dependencies.filters.file" location="lucene/build/maven.dependencies.filters.properties"/>

  <property name="smokeTestRelease.dir" location="lucene/build/smokeTestRelease/dist"/>
  <property name="smokeTestRelease.tmp" location="lucene/build/smokeTestRelease/tmp"/>
  <property name="smokeTestRelease.testArgs" value=""/>

  <target name="-projecthelp">
    <java fork="false" classname="org.apache.tools.ant.Main" taskname="-">
      <arg value="-projecthelp"/>
      <arg value="-f"/>
      <arg value="${ant.file}"/>
    </java>
  </target>

  <target name="test-help" description="Test runner help">
    <subant buildpath="lucene" target="test-help" inheritall="false" failonerror="true"/>
  </target>

  <target name="precommit" description="Run basic checks before committing"
          depends="check-svn-working-copy,validate,documentation-lint"/>

  <target name="test" description="Test both Lucene and Solr" depends="resolve-groovy">
    <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>
        <propertyset refid="uptodate.and.compiled.properties"/>
        <propertyref name="tests.totals.tmpfile" />
      </propertyset>      
    </subant>

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

  <target name="jacoco" depends="resolve-groovy" description="Generates JaCoCo code coverage reports">
    <subant target="jacoco" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>

  <target name="pitest" depends="resolve-groovy" description="Run PITest on both Lucene and Solr">
    <subant target="pitest" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>

  <target name="beast">
    <fail message="The Beast only works inside of individual modules"/>
  </target>

  <target name="documentation" depends="resolve-pegdown" description="Generate Lucene and Solr Documentation">
    <subant target="documentation" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>

  <target name="documentation-lint" depends="resolve-pegdown,-ecj-javadoc-lint-unsupported,-ecj-resolve" description="Validates the generated documentation (HTML errors, broken links,...)">
    <subant target="documentation-lint" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>

  <target name="check-forbidden-apis" depends="-install-forbidden-apis" description="Check forbidden API calls in compiled class files.">
    <subant target="check-forbidden-apis" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>

  <target name="validate" description="Validate dependencies, licenses, etc." depends="-validate-source-patterns,resolve-groovy,rat-sources-typedef,-install-forbidden-apis">
    <subant target="validate" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
    <subant buildpath="lucene" target="check-lib-versions" inheritall="false" failonerror="true">
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>
  
  <target name="-validate-source-patterns" unless="disable.source-patterns">
    <!-- check that there are no @author javadoc tags, tabs, svn keywords or nocommits: -->
    <property name="validate.currDir" location="."/>
    <pathconvert pathsep="${line.separator}" dirsep="/" property="validate.patternsFound" setonempty="false">
      <fileset dir="${validate.currDir}">
        <include name="**/*.java"/>
        <include name="**/*.py"/>
        <or>
          <containsregexp expression="@author\b" casesensitive="yes"/>
          <containsregexp expression="\bno(n|)commit\b" casesensitive="no"/>
          <containsregexp expression="\bTOOD:" casesensitive="yes"/>
          <containsregexp expression="\t" casesensitive="no"/>
          <containsregexp expression="\$(?:LastChanged)?Date\b" casesensitive="yes"/>
          <containsregexp expression="\$(?:(?:LastChanged)?Revision|Rev)\b" casesensitive="yes"/>
          <containsregexp expression="\$(?:LastChangedBy|Author)\b" casesensitive="yes"/>
          <containsregexp expression="\$(?:Head)?URL\b" casesensitive="yes"/>
          <containsregexp expression="\$Id\b" casesensitive="yes"/>
          <containsregexp expression="\$Header\b" casesensitive="yes"/>
          <containsregexp expression="\$Source\b" casesensitive="yes"/>
        </or>
      </fileset>
      <map from="${validate.currDir}${file.separator}" to="* "/>
    </pathconvert>
    <fail if="validate.patternsFound">The following files contain @author tags, tabs, TOODs, svn keywords or nocommits:${line.separator}${validate.patternsFound}</fail>
  </target>
	
  <target name="rat-sources" description="Runs rat across all sources and tests" depends="common.rat-sources">
    <subant target="rat-sources" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>

  <target name="resolve" description="Resolves all dependencies">
    <subant target="resolve" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>

  <!-- lucene/test-framework and solr/test-framework are excluded from compilation -->
  <target name="compile" description="Compile Lucene and Solr">
    <subant target="compile" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>

  <target name="compile-core" description="Compile Lucene Core">
    <subant target="compile-core" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>

  <target name="compile-test" description="Compile Lucene and Solr tests and test-frameworks">
    <subant target="compile-test" inheritAll="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>

  <target name="jar" description="Build Lucene and Solr Jar files">
    <subant target="jar" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml"/>
      <fileset dir="solr" includes="build.xml"/>
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>

  <target name="jar-src" description="Build Lucene and Solr Source Jar files">
    <subant target="jar-src" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml"/>
      <fileset dir="solr" includes="build.xml"/>
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>

  <target name="get-maven-poms" depends="resolve" 
          description="Copy Maven POMs from dev-tools/maven/ to maven-build/">
    <ant dir="lucene" target="-get-maven-poms" inheritall="false"/>
  </target>

  <target name="clean-maven-build"
          description="Clean up Maven POMs in working copy">
    <delete failonerror="true" dir="${maven-build-dir}/"/>
  </target>

  <target name="generate-maven-artifacts" depends="resolve,resolve-groovy,resolve-pegdown,install-maven-tasks"
          description="Generate Maven Artifacts for Lucene and Solr">
    <property name="maven.dist.dir"  location="dist/maven" />
    <mkdir dir="${maven.dist.dir}" />
    <ant dir="lucene" inheritall="false">
      <target name="-unpack-lucene-tgz"/>
      <target name="-filter-pom-templates"/>
      <propertyset refid="uptodate.and.compiled.properties"/>
    </ant>
    <ant dir="solr" target="-unpack-solr-tgz" inheritall="false">
      <propertyset refid="uptodate.and.compiled.properties"/>
    </ant>
    <subant target="-dist-maven" inheritall="false" failonerror="true">
      <property name="maven.dist.dir"  location="${maven.dist.dir}" />
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>

  <target name="validate-maven-dependencies" depends="generate-maven-artifacts"
          description="Validates maven dependencies, licenses, etc.">
    <subant target="-validate-maven-dependencies" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml"/>
      <fileset dir="solr" includes="build.xml"/>
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>
  
  <target name="run-maven-build" depends="get-maven-poms,install-maven-tasks,resolve-groovy" description="Runs the Maven build using automatically generated POMs">
    <groovy><![CDATA[
      import groovy.xml.NamespaceBuilder;
      import org.apache.tools.ant.Project;
      def userHome = properties['user.home'], commonDir = properties['common.dir'];
      def propPrefix = '-mvn.inject.'; int propPrefixLen = propPrefix.length();
      def subProject = project.createSubProject();
      project.copyUserProperties(subProject);
      subProject.initProperties();
      new AntBuilder(subProject).sequential{
        property(file: userHome+'/lucene.build.properties', prefix: propPrefix);
        property(file: userHome+'/build.properties', prefix: propPrefix);
        property(file: commonDir+'/build.properties', prefix: propPrefix);
      };
      def cmdlineProps = subProject.properties
        .findAll{ k, v -> k.startsWith(propPrefix) }
        .collectEntries{ k, v -> [k.substring(propPrefixLen), v] };
      cmdlineProps << project.userProperties.findAll{ k, v -> !k.startsWith('ant.') };
      def artifact = NamespaceBuilder.newInstance(ant, 'antlib:org.apache.maven.artifact.ant');
      task.log('Running Maven with props: ' + cmdlineProps.toString(), Project.MSG_INFO);
      artifact.mvn(pom: properties['maven-build-dir']+'/pom.xml', mavenVersion: properties['maven-version'], failonerror: true, fork: true) {
        cmdlineProps.each{ k, v -> arg(value: '-D' + k + '=' + v) };
        arg(value: '-fae');
        arg(value: 'install');
      };
    ]]></groovy>
  </target>
  
  <target name="remove-maven-artifacts" description="Removes all Lucene/Solr Maven artifacts from the local repository">
    <echo message="Removing all Lucene/Solr Maven artifacts from '${user.home}/.m2/repository'..."/>
    <delete includeemptydirs="true">
      <fileset dir="${user.home}/.m2/repository" erroronmissingdir="false">
        <include name="org/apache/lucene/**"/>
        <include name="org/apache/solr/**"/>
      </fileset>
    </delete>
  </target>

  <target name="netbeans" depends="resolve" description="Setup Netbeans configuration">
    <pathconvert property="netbeans.fileset.sourcefolders" pathsep="|" dirsep="/">
      <dirset dir="${basedir}/lucene" includes="**/src/java, **/src/examples, **/src/test, **/src/resources" 
              excludes="tools/**, build/**" />
      <dirset dir="${basedir}/solr" includes="**/src/java, **/src/examples, **/src/test, **/src/resources" 
              excludes="build/**" />
      <map from="${basedir}/" to=""/>
    </pathconvert>
    <!-- TODO: find a better way to exclude duplicate JAR files & fix the servlet-api mess! -->
    <pathconvert property="netbeans.path.libs" pathsep=":" dirsep="/">
      <fileset dir="${basedir}/lucene" includes="**/lib/*.jar" 
               excludes="**/*servlet-api*.jar, analysis/uima/**, tools/**, build/**"/>
      <fileset dir="${basedir}/solr" includes="**/test-lib/*.jar,**/lib/*.jar" 
               excludes="core/test-lib/*servlet-api*.jar, contrib/analysis-extras/**, test-framework/lib/junit*, test-framework/lib/ant*, test-framework/lib/randomizedtesting*, build/**, dist/**, package/**, server/solr-webapp/**" />
      <map from="${basedir}/" to=""/>
    </pathconvert>
    <mkdir dir="nbproject"/>
    <copy todir="nbproject" overwrite="true">
      <fileset dir="dev-tools/netbeans/nbproject"/>
    </copy>
    <xslt in="${ant.file}" out="nbproject/project.xml" style="dev-tools/netbeans/nb-project.xsl" force="true">
      <outputproperty name="indent" value="yes"/>
      <param name="netbeans.fileset.sourcefolders" expression="${netbeans.fileset.sourcefolders}"/>
      <param name="netbeans.path.libs" expression="${netbeans.path.libs}"/>
      <param name="netbeans.source-level" expression="1.7"/>
    </xslt>
  </target>

  <target name="clean-netbeans" description="Removes all Netbeans configuration files">
    <delete dir="nbproject" failonerror="true"/>
    <delete dir="nb-build" failonerror="true"/>
  </target>

  <target name="eclipse" depends="resolve" description="Setup Eclipse configuration">
    <basename file="${basedir}" property="eclipseprojectname"/>
      <copy file="dev-tools/eclipse/dot.project" tofile=".project" overwrite="false" encoding="UTF-8">
      <filterset>
        <filter token="ECLIPSEPROJECTNAME" value="${eclipseprojectname}"/>
      </filterset>
    </copy>
    <mkdir dir=".settings"/>
    <copy todir=".settings/" overwrite="true">
      <fileset dir="dev-tools/eclipse/dot.settings" includes="*.prefs" />
    </copy>
    
    <pathconvert property="eclipse.fileset.sourcefolders" pathsep="|" dirsep="/">
      <dirset dir="${basedir}/lucene" includes="**/src/java, **/src/resources, **/src/test, **/src/test-files, **/src/examples" excludes="tools/**, build/**" />
      <dirset dir="${basedir}/solr" includes="**/src/java, **/src/resources, **/src/test, **/src/test-files, **/src/examples" excludes="build/**" />
      <map from="${basedir}/" to=""/>
    </pathconvert>
    <!-- TODO: find a better way to exclude duplicate JAR files & fix the servlet-api mess! -->
    <pathconvert property="eclipse.fileset.libs" pathsep="|" dirsep="/">
      <fileset dir="${basedir}/lucene" includes="**/lib/*.jar" excludes="**/*servlet-api*.jar, analysis/uima/**, tools/**, build/**"/>
      <fileset dir="${basedir}/solr" includes="**/test-lib/*.jar,**/lib/*.jar" excludes="core/test-lib/*servlet-api*.jar, contrib/analysis-extras/**, test-framework/lib/junit*, test-framework/lib/ant*, test-framework/lib/randomizedtesting*, build/**, dist/**, package/**" />
      <map from="${basedir}/" to=""/>
    </pathconvert>
    <xslt in="${ant.file}" out=".classpath" style="dev-tools/eclipse/dot.classpath.xsl" force="true">
      <outputproperty name="indent" value="yes"/>
      <param name="eclipse.fileset.libs" expression="${eclipse.fileset.libs}"/>
      <param name="eclipse.fileset.sourcefolders" expression="${eclipse.fileset.sourcefolders}"/>
    </xslt>

    <echo>
      SUCCESS: You must right-click your project and choose Refresh.
               Your project must use a Java 7 JRE.
    </echo>
  </target>

  <target name="clean-eclipse" description="Removes all Eclipse configuration files">
    <delete dir=".settings" failonerror="true"/>
    <delete failonerror="true">
      <fileset dir="." includes=".classpath,.project"/>
    </delete>
    <delete dir="eclipse-build" failonerror="true"/>
  </target>

  <target name="idea" depends="resolve" description="Setup IntelliJ IDEA configuration">
    <condition property="idea.jdk.is.set">
      <isset property="idea.jdk"/>
    </condition>
    <!-- Define ${idea.jdk} if it's not yet defined - otherwise literal "${idea.jdk}" is substituted -->
    <property name="idea.jdk" value=""/>
    <!-- delete those files first, so they are regenerated by the filtering below
      (add more files with dynamic properties like versions here): -->
    <delete dir=".idea" includes="misc.xml workspace.xml"/>
    <!-- Copy files with filtering: -->
    <copy todir="." overwrite="false" encoding="UTF-8">
      <fileset dir="dev-tools/idea"/>
      <filterset begintoken="subst.=&quot;" endtoken="&quot;">
        <filter token="idea.jdk" value="${idea.jdk}"/>
      </filterset>
      <filterset>
        <filter token="version" value="${version}"/>
        <filter token="version.base" value="${version.base}"/>
      </filterset>
    </copy>
    <antcall target="-post-idea-instructions"/>
  </target>
  
  <target name="-post-idea-instructions" unless="idea.jdk.is.set">
    <echo>
To complete IntelliJ IDEA setup, you must manually configure
File | Project Structure | Project | Project SDK.
      
You won't have to do this in the future if you define property
$${idea.jdk}, e.g. in ~/lucene.build.properties, ~/build.properties
or lucene/build.properties, with a value consisting of the
following two XML attributes/values (adjust values according to
JDKs you have defined locally - see 
File | Project Structure | Platform Settings | SDKs):

    idea.jdk = project-jdk-name="1.7" project-jdk-type="JavaSDK"
    </echo>
  </target>

  <target name="clean-idea"
          description="Removes all IntelliJ IDEA configuration files">
    <delete dir=".idea" failonerror="true"/>
    <delete failonerror="true">
      <fileset dir="." includes="*.iml,*.ipr,*.iws"/>
      <fileset dir="solr" includes="**/*.iml"/>
      <fileset dir="lucene" includes="**/*.iml"/>
    </delete>
    <delete dir="idea-build" failonerror="true"/>
  </target>

  <target name="clean" description="Clean Lucene and Solr build dirs">
    <delete dir="dist" />
    <delete dir="${tests.heap-dump-dir}" />
    <subant target="clean" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>

  <target name="clean-jars" description="Remove all JAR files from lib folders in the checkout">
    <delete failonerror="true">
      <fileset dir=".">
        <include name="**/*.jar"/>
        <exclude name="*/build/**"/>
        <exclude name="*/dist/**"/>
        <exclude name="*/package/**"/>
        <exclude name="*/example/exampledocs/**"/>
      </fileset>
    </delete>
  </target>

  <target name="jar-checksums" description="Recompute SHA1 checksums for all JAR files.">
    <subant target="jar-checksums" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>
  
  <target name="-nightly-smoke-java8params" if="smokeTestRelease.java8">
    <!-- convert path to UNIX style, so windows backslashes don't hurt escaping: -->
    <pathconvert targetos="unix" property="-smokeTestRelease.java8params">
      <regexpmapper from="^(.*)$" to="--test-java8 '\1'"/>
      <path location="${smokeTestRelease.java8}"/>
    </pathconvert>
  </target>

  <target name="nightly-smoke" description="Builds an unsigned release and smoke tests it (pass '-DsmokeTestRelease.java8=/path/to/jdk1.8.0' to additionally test with Java 8)"
    depends="clean,resolve-groovy,resolve-pegdown,install-maven-tasks,-nightly-smoke-java8params">
    <fail message="To run nightly smoke, the JDK must be exactly Java 1.7, was: ${java.specification.version}">
      <condition>
        <not><equals arg1="${java.specification.version}" arg2="1.7"/></not>
      </condition>
    </fail>
    <property name="-smokeTestRelease.java8params" value=""/><!-- (if not yet defined) -->
    <exec executable="${python32.exe}" failonerror="true" taskname="python32">
      <arg value="-V"/>
    </exec>
    <subant target="prepare-release-no-sign" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <!-- pass ${version.base} here to emulate a real release, without appendix like "-SNAPSHOT": -->
      <property name="version" value="${version.base}" />
      <propertyset refid="uptodate.and.compiled.properties"/>
   </subant>
    <mkdir dir="${smokeTestRelease.dir}"/>
    <copy todir="${smokeTestRelease.dir}/lucene">
      <fileset dir="lucene/dist"/>
    </copy>
    <copy todir="${smokeTestRelease.dir}/solr">
      <fileset dir="solr/package"/>
    </copy>
    <local name="url"/>
    <makeurl file="${smokeTestRelease.dir}" validate="false" property="url"/>
    <exec executable="${python32.exe}" failonerror="true" taskname="smoker">
      <arg value="-u"/>
      <!-- Tell Python not to write any bytecode cache into the filesystem: -->
      <arg value="-B"/>
      <arg file="dev-tools/scripts/smokeTestRelease.py"/>
      <arg line="${-smokeTestRelease.java8params}"/>
      <arg value="--revision"/>
      <arg value="skip"/>
      <!-- pass ${version.base} here to emulate a real release, without appendix like "-SNAPSHOT": -->
      <arg value="--version"/>
      <arg value="${version.base}"/>
      <arg value="--tmp-dir"/>
      <arg file="${smokeTestRelease.tmp}"/>
      <arg value="--not-signed"/>
      <arg value="${url}"/>
      <arg value="${smokeTestRelease.testArgs}"/>
    </exec>
    <delete dir="${smokeTestRelease.dir}"/>
    <delete dir="${smokeTestRelease.tmp}"/>
  </target>
  
  <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>

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

  <target name="run-clover" description="Runs all tests to measure coverage and generates report (pass &quot;ANT_OPTS=-Xmx1536M&quot; as environment)" depends="clean">
    <antcall inheritAll="false">
      <param name="run.clover" value="true"/>
      <!-- must be 1, as clover does not like parallel test runs: -->
      <param name="tests.jvms.override" value="1"/>
      <!-- Also override some other props to be fast: -->
      <param name="tests.multiplier" value="1"/>
      <param name="tests.nightly" value="false"/>
      <param name="tests.weekly" value="false"/>
      <param name="tests.badapples" value="true"/>
      <!-- The idea behind Clover is to determine test coverage, so be immune to failing tests: -->
      <param name="tests.haltonfailure" value="false"/>
      
      <target name="clover"/>
      <target name="test"/>
      <target name="-generate-clover-reports"/>
      
      <propertyset refid="uptodate.and.compiled.properties"/>
    </antcall>
  </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"/>
    </fileset>
    <clover-report projectName="Apache Lucene/Solr">
      <current outfile="${clover.report.dir}" title="Apache Lucene/Solr ${version}" numThreads="0">
        <format type="html" filter="assert"/>
        <testresults refid="clover.test.result.files"/>
      </current>
      <current outfile="${clover.report.dir}/clover.xml" title="Apache Lucene/Solr ${version}">
        <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="test-with-heapdumps" depends="resolve-groovy,-test-with-heapdumps-enabled,-test-with-heapdumps-disabled" description="Runs tests with heap dumps on OOM enabled (if VM supports this)"/>
  
  <condition property="vm.supports.heapdumps">
    <or>
      <contains string="${java.vm.name}" substring="hotspot" casesensitive="false"/>
      <contains string="${java.vm.name}" substring="openjdk" casesensitive="false"/>
    </or>
  </condition>

  <target name="-test-with-heapdumps-enabled" if="vm.supports.heapdumps">
    <echo level="info" message="${java.vm.name}: Enabling heap dumps on OutOfMemoryError to dir '${tests.heap-dump-dir}'."/>
    <mkdir dir="${tests.heap-dump-dir}"/>
    <delete includeEmptyDirs="true">
      <fileset dir="${tests.heap-dump-dir}"  includes="**/*"/>
    </delete>
    <antcall inheritAll="false" target="test">
      <param name="tests.heapdump.args" value="-XX:+HeapDumpOnOutOfMemoryError &quot;-XX:HeapDumpPath=${tests.heap-dump-dir}&quot;"/>
      <propertyset refid="uptodate.and.compiled.properties"/>
    </antcall>
    <pathconvert property="heapdumps.list" setonempty="false" pathsep="${line.separator}">
      <fileset dir="${tests.heap-dump-dir}"/>
      <map from="${tests.heap-dump-dir}${file.separator}" to="* "/>
    </pathconvert>
    <fail if="heapdumps.list" message="Some of the tests produced a heap dump, but did not fail. Maybe a suppressed OutOfMemoryError? Dumps created:${line.separator}${heapdumps.list}"/>
    <delete dir="${tests.heap-dump-dir}"/>
  </target>

  <target name="-test-with-heapdumps-disabled" unless="vm.supports.heapdumps">
    <echo level="warning" message="WARN: The used JVM (${java.vm.name}) does not support HPROF heap dumps on OutOfMemoryError."/>
    <antcall target="test">
      <propertyset refid="uptodate.and.compiled.properties"/>
    </antcall>
  </target>

  <target name="regenerate" description="Runs all code regenerators">
    <subant target="regenerate" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <!-- todo:
      <fileset dir="solr" includes="build.xml" />-->
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </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>

  <!-- TODO: remove me when jenkins works -->
  <target name="regenerateAndCheck" depends="regenerate,-check-after-regeneration"/>

  <target name="-append-all-modules-dependencies-properties">
    <delete file="lucene/build/module.dependencies.properties"/>
    <subant target="-append-module-dependencies-properties" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
      <propertyset refid="uptodate.and.compiled.properties"/>
    </subant>
  </target>
  
  <!-- Jenkins tasks -->
  <target name="-jenkins-base" depends="-print-java-info,clean,test-with-heapdumps,validate,documentation-lint,jar-checksums,check-svn-working-copy"/>
  
  <target name="-print-java-info">
    <echo level="info" taskname="java-info">java version &quot;${java.version}&quot;
${java.runtime.name} (${java.runtime.version}, ${java.vendor})
${java.vm.name} (${java.vm.version}, ${java.vm.vendor})
Test args: [${args}]</echo>
  </target>
  
  <target name="jenkins-hourly">
    <antcall>
      <param name="is.jenkins.build" value="true"/>
      <target name="-jenkins-base"/>
    </antcall>
  </target>
  
  <target name="jenkins-nightly">
    <antcall>
      <param name="is.jenkins.build" value="true"/>
      <param name="tests.nightly" value="true"/>
      <target name="-jenkins-base"/>
    </antcall>
  </target>
  
  <target name="jenkins-maven-nightly" depends="-print-java-info,clean,clean-maven-build,resolve-groovy,resolve-pegdown,install-maven-tasks">
    <!-- step 1: build, install, deploy, and validate ANT-generated maven artifacts: -->
    <antcall>
      <param name="is.jenkins.build" value="true"/>
      <target name="remove-maven-artifacts"/>
      <!-- this implicitely publishes the maven artifacts: -->
      <target name="validate-maven-dependencies"/>
    </antcall>
    <!-- step 2: run the maven build to check that the pom templates also work to drive "mvn": -->
    <antcall>
      <param name="is.jenkins.build" value="true"/>
      <target name="remove-maven-artifacts"/>
      <target name="run-maven-build"/>
    </antcall>
  </target>
  
  <target name="jenkins-clover" depends="-print-java-info">
    <antcall>
      <param name="is.jenkins.build" value="true"/>
      <target name="run-clover"/>
    </antcall>
  </target>

  <!-- useless targets (override common-build.xml): -->
  <target name="generate-test-reports"/>
</project>
