<!--
   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="to be included into customTargets.xml">

    <import file="fetchSvnAll.xml"/>

    <path id="project.classpath">
        <pathelement location="${buildHome}/build-files/svn/svnant.jar"/>
        <pathelement location="${buildHome}/build-files/svn/svnClientAdapter.jar"/>
    </path>
    
    <target name="fetchSubversion" if="is.svn.fetch">
         <taskdef resource="svntask.properties" classpathref="project.classpath"/>
         <property name="fetchTag" value="HEAD"/>
         <antcall target="fetch.svn.all"/>
    </target>
    
    <target name="svn.co">
        <property name="target.dir" value="${element.id}"/>
        <condition property="svn.url" value="${pluginbuilder.svn.url}" else="${url}">
            <isset property="pluginbuilder.svn.url"/>
        </condition>
        <svn javahl="false" username="${pluginbuilder.svn.user}" password="${pluginbuilder.svn.password}">
            <checkout revision="${fetchTag}" url="${svn.url}/${project.name}" destPath="${buildDirectory}/${target}/${target.dir}" />
        </svn>      
    </target>  

</project>
