<?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 name="upload" default="upload" basedir=".">
    <description>
        Ant build file used to upload binaries to openjpa.apache.org/builds/latest.
    </description>
    <target name="upload">

        <property name="build.dir" value="/home/mikedd/public_html/nightly.builds"/>
        <property name="host" value="people.apache.org"/>

        <mkdir dir="target/site/tempDocs" />
        <unzip dest="target/site/tempDocs">
            <fileset dir="target/site/downloads">
                <include name="*binary*.zip" />
            </fileset>
            <patternset>
                <include name="**/javadoc/**" />
                <include name="**/docbook/**" />
                <include name="**/schema/**"/>
            </patternset>
        </unzip>
        
        <zip destfile="target/site/tempDocs/docs.zip">
            <fileset dir="target/site/tempDocs">
                <include name="**/javadoc/**"/>
                <include name="**/docbook/**"/>
                <include name="**/schema/**"/>
                <exclude name="docs/**"/>
            </fileset>
        </zip>
        <checksum>
            <fileset dir="target/site/downloads/">
                <include name="*.zip" />
            </fileset>
        </checksum>

        <!-- update ${build.dir}/apache-openjpa-${project.version}/docs -->
        <scp todir="${nightly.user.name}@${host}:${build.dir}" keyfile="${nightly.keyfile}" passphrase="${nightly.passphrase}" trust="true" sftp="true">
            <fileset dir="target/site/tempDocs">
                <include name="docs.zip"/>
            </fileset>
        </scp>
        <sshexec host="${host}" username="${nightly.user.name}" keyfile="${nightly.keyfile}" passphrase="${nightly.passphrase}" command="rm -Rf ${build.dir}/apache-openjpa-${project.version}/docs ${build.dir}/apache-openjpa-${project.version}/examples" trust="true" />
        <sshexec host="${host}" username="${nightly.user.name}" keyfile="${nightly.keyfile}" passphrase="${nightly.passphrase}" command="unzip -qq -d ${build.dir}/ ${build.dir}/docs.zip" trust="true" />
        <sshexec host="${host}" username="${nightly.user.name}" keyfile="${nightly.keyfile}" passphrase="${nightly.passphrase}" command="rm ${build.dir}/docs.zip" trust="true" />

        <!-- update ${build.dir}/apache-openjpa-${project.version}/downloads -->
        <sshexec host="${host}" username="${nightly.user.name}" keyfile="${nightly.keyfile}" passphrase="${nightly.passphrase}" command="rm -Rf ${build.dir}/apache-openjpa-${project.version}/downloads" trust="true" />
        <sshexec host="${host}" username="${nightly.user.name}" keyfile="${nightly.keyfile}" passphrase="${nightly.passphrase}" command="mkdir ${build.dir}/apache-openjpa-${project.version}/downloads " trust="true" />
        <scp todir="${nightly.user.name}@${host}:${build.dir}/apache-openjpa-${project.version}/downloads" keyfile="${nightly.keyfile}" passphrase="${nightly.passphrase}" trust="true">
            <fileset dir="target/site/downloads" />
        </scp>

        <!-- update ACLs in ${build.dir}/apache-openjpa-${project.version} -->
        <sshexec host="${host}" username="${nightly.user.name}" keyfile="${nightly.keyfile}" passphrase="${nightly.passphrase}" command="find ${build.dir}/apache-openjpa-${project.version} -user ${nightly.user.name} -type d | xargs chmod 775" trust="true" />
        <sshexec host="${host}" username="${nightly.user.name}" keyfile="${nightly.keyfile}" passphrase="${nightly.passphrase}" command="find ${build.dir}/apache-openjpa-${project.version} -user ${nightly.user.name} -type f | xargs chmod 664" trust="true" />

        <delete>
            <fileset dir="target/site/tempDocs" />
        </delete>
    </target>
</project>

