<!--
   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>