<?xml version="1.0" encoding="UTF-8"?>

<!--
  ~ 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 default="preparecheckout">
  <target name="svn">
    <java classpath="${plugin_classpath}" classname="org.tmatesoft.svn.cli.SVN" fork="true">
      <arg line="${arg}"/>
    </java>
  </target>
  <target name="preparecheckout">
    <antcall target="svn">
      <param name="arg" value="checkout --depth immediates ${svnUrl} ${scmPubCheckoutDirectory}"/>
    </antcall>
    <antcall target="svn">
      <param name="arg" value="update --set-depth exclude ${scmPubCheckoutDirectory}/ref ${scmPubCheckoutDirectory}/docs ${scmPubCheckoutDirectory}/redback" />
    </antcall>

    <pathconvert pathsep=" " property="dirs">
      <dirset dir="${scmPubCheckoutDirectory}" includes="*" />
    </pathconvert>
    <antcall target="svn">
      <param name="arg" value="update --set-depth infinity ${dirs}" />
   </antcall>
  </target>
</project>