<!--/*******************************************************************************
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
*   Ant naming conventions:
*   - regardless of the actual OS platform,'/' is the directory separator
*     (Ant will convert as appropriate).
*   - multi-word properties use periods '.'
*     - properties ending in .jar define jarfile names only (no path)
*     - properties ending in .lib are fully qualified jars (path and filename)
*     - properties ending in .dir are directory paths
*     - properties ending in .path are path refid names (classpath fragments)
*   - multi-word targets use hyphens '-'
*     - targets beginning with test- are reserved for high level test targets,
*       and are used in test results parsing
*     - targets typically use the form <action>-<object>-<type> (ie. package-bundle-zip)
*   - multi-word macros use underscores '_'
*   - multi-word macro attributes are concatenated
*     e.g. 'runpathref'
*   - multi-word tasks (taskdef) names are concatenated
*     e.g. 'validateconnection'
*   - OS environment variables are in ALLCAPS and have 'env' as a prefix
*     e.g. ${env.XXX}.
*   - Ant properties are lower case.
*
* Contributors:
*     egwin - initial API and implementation
#******************************************************************************/-->
<!---
For each oracle project
Find out if current checkin is latest hash
  find current hash
  find checked in hash
  compare hash if != mark for build
if build=true
  set build arguments
  build
  checkin results
-->

<project name="oraclebuild" default="build" basedir=".">

    <!-- Default ant target, compiles and translates resources, does not run tests. -->
    <target name="build"               depends="clean-oracle, build-oracle, build-nosql"/>
    <target name="process-control"     depends="build, commit-oracle, commit-nosql, validate-commits"/>

    <target name="init">
        <!-- The following variables should be passed from Hudson:
                 env.JAVA_HOME   - JAVA_HOME as defined by Hudson
                 git.exec        - fully qualified path to git executable
                 hudson.workspace- WORKSPACE as defined by the Hudson slave
                 M2_HOME         - location of Maven3 install (on build server)
                 branch          - name of Git branch (master, 2.3, 2.4, 2.5, etc)

             However, just in case default values are set:
        -->
        <property name="git.exec"        value="/usr/bin/git"/>
        <property name="branch"          value="master"/>

        <echo message=" "/>
        <echo message="os.name         = '${os.name}'"/>
        <echo message="os.arch         = '${os.arch}'"/>
        <echo message="os.version      = '${os.version}'"/>
        <echo message=" ---"/>
        <echo message="env.JAVA_HOME   = '${env.JAVA_HOME}'"/>
        <echo message="git.exec        = '${git.exec}'"/>
        <echo message="hudson.workspace= '${hudson.workspace}'"/>
        <echo message="M2_HOME         = '${M2_HOME}'"/>
        <echo message="branch          = '${branch}'"/>
        <echo message=" ---"/>

        <tstamp>
           <format property="oraclebuild.build.date" pattern="yyyyMMdd"/>
           <format property="oraclebuild.build.time" pattern="HHmm"/>
        </tstamp>
        <echo message="oraclebuild.build.date          = '${oraclebuild.build.date}'"/>
        <echo message="oraclebuild.build.time          = '${oraclebuild.build.time}'"/>
        <echo message=" ---"/>

        <!-- Convert basedir to *nix format to avoid pathing issues with certain commands -->
        <dirname  property="oraclebuild.build.location_temp" file="${ant.file.oraclebuild}"/>
        <pathconvert targetos="unix" property="oraclebuild.build.location">
            <path>
                <pathelement location="${oraclebuild.build.location_temp}"/>
            </path>
        </pathconvert>
        <!-- oraclelibs.2.base.dir needs to be explicit (not relative) for antcall usage            -->
        <property name="oraclebuild.2.base.dir"           value="${oraclebuild.build.location}"/>
        <property name="oraclebuild.2.buildsystem.dir"    value="${oraclebuild.build.location}/buildsystem"/>
        <property name="oraclebuild.2.common.plugins.dir" value="${oraclebuild.2.base.dir}/plugins"/>
        <property name="oraclebuild.2.nosql.dir"          value="${oraclebuild.2.base.dir}/foundation/org.eclipse.persistence.nosql"/>
        <property name="oraclebuild.2.oracle.dir"         value="${oraclebuild.2.base.dir}/foundation/org.eclipse.persistence.oracle"/>
        <property name="oraclebuild.2.oracle.nosql.dir"   value="${oraclebuild.2.base.dir}/foundation/org.eclipse.persistence.oracle.nosql"/>

        <echo message="ant.project.name                = '${ant.project.name}'"/>
        <echo message="basedir                         = '${basedir}'"/>
        <echo message="oraclebuild.build.location      = '${oraclebuild.build.location}'"/>
        <echo message="oraclebuild.2.base.dir          = '${oraclebuild.2.base.dir}'"/>
        <echo message="oraclebuild.2.common.plugins.dir= '${oraclebuild.2.common.plugins.dir}'"/>
        <echo message="oraclebuild.2.nosql.dir         = '${oraclebuild.2.nosql.dir}'"/>
        <echo message="oraclebuild.2.oracle.dir        = '${oraclebuild.2.oracle.dir}'"/>
        <echo message="oraclebuild.2.oracle.nosql.dir  = '${oraclebuild.2.oracle.nosql.dir}'"/>
        <echo message=" ---"/>

        <condition property="custom.properties.message" value="Loading user defined properties from: '${user.home}/build.properties'"
                                                         else="No custom properties file at '${user.home}/build.properties'. Continuing build using defaults.">
            <available file="${user.home}/build.properties"/>
        </condition>
        <echo message="${custom.properties.message}"/>
        <property file="${user.home}/build.properties"/>
        <echo message=" "/>
        <property file="${oraclebuild.2.base.dir}/antbuild.properties"/>
        <property name="oraclebuild.target" value="build-oracle-extension"/>

        <!-- Sets default for all extensions.depend dir locations to static paths -->
        <property name="oracle.extensions.depend.dir" value="${oraclebuild.2.base.dir}/../extension.oracle.lib.external"/>
        <echo message="oracle.extensions.depend.dir   = '${oracle.extensions.depend.dir}'"/>
        <!-- This HAS to be defined after allowing user redefinitions (which will cause the condition not to set anything) -->
        <!-- This tests to make sure the extensions dir exists, if not sets to a existant dummy location -->
        <condition property="extensions.depend.dir"   value="${oraclebuild.2.base.dir}/../extension.lib.external"
                                                       else="${oraclebuild.build.location}">
            <available file="${oraclebuild.2.base.dir}/../extension.lib.external" type="dir"/>
        </condition>
        <echo message="extensions.depend.dir          = '${extensions.depend.dir}'"/>

        <!-- Custom task definitions -->
        <property name="custom.tasks.lib"               value="${oraclebuild.2.buildsystem.dir}/ant_customizations.jar"/>
        <property name="custom.echo.task.class"         value="org.eclipse.persistence.buildtools.ant.taskdefs.Say"/>
        <property name="custom.selectbundle.task.class" value="org.eclipse.persistence.buildtools.ant.taskdefs.SelectBundle"/>
        <echo message="custom.tasks.lib               ='${custom.tasks.lib}'"/>
        <echo message="custom.echo.task.class         ='${custom.echo.task.class}'"/>
        <echo message="custom.selectbundle.task.class ='${custom.selectbundle.task.class}'"/>
        <echo message=" ---"/>
        <taskdef name="say"          classname="${custom.echo.task.class}"         classpath="${custom.tasks.lib}"/>
        <taskdef name="selectbundle" classname="${custom.selectbundle.task.class}" classpath="${custom.tasks.lib}"/>

        <!-- Feature Dependency variables -->
        <property name="oracle.ext.prefix"     value="org.eclipse.persistence.oracle"/>
        <property name="oracle.ext.criteria"   value="[0.0.1,9.0.0)"/>
        <property name="oracle.nosql.prefix"   value="org.eclipse.persistence.oracle.nosql"/>
        <property name="oracle.nosql.criteria" value="[0.0.1,9.0.0)"/>

        <condition property="windows.os" value="true">
            <contains string="${os.name}" substring="Win"/>
        </condition>
        <say  message="Windows OS detected. Command-line Git tools will likely not run properly."         if="windows.os"/>
        <say  message="    To build manually use:"                                                        if="windows.os"/>
        <say  message="         ant -f antbuild.xml -Doracle.target=&lt;target&gt; ${oraclebuild.target}" if="windows.os"/>
        <say  message=" "                                                                                 if="windows.os"/>
        <say  message="Aborting...."                                                                      if="windows.os"/>
        <fail message="This buildfile should be used with a *nix or OS X operating system."               if="windows.os"/>
        <!-- Verify validity of 'git.exec' value -->
        <available file="${git.exec}" property="git.exec.exist"/>
        <fail message="Cannot find: ${git.exec}" unless="git.exec.exist"/>
    </target>

    <target name="establish-baseline" if="git.exec" depends="init">
        <!-- Determine starting hash values of repo in specific locations (base proj, oracle, and nosql dirs) -->
        <get_git_hash githashproperty="prebuild.git.hash"   repoprojectdir="${oraclebuild.2.base.dir}"/>
        <get_git_hash githashproperty="prebuild.ext.hash"   repoprojectdir="${oraclebuild.2.oracle.dir}"/>
        <get_git_hash githashproperty="prebuild.nosql.hash" repoprojectdir="${oraclebuild.2.oracle.nosql.dir}"/>
        <!-- Report results -->
        <say  message="prebuild.git.hash              = '${prebuild.git.hash}'"       if="prebuild.git.hash"/>
        <say  message="prebuild.ext.hash              = '${prebuild.ext.hash}'"       if="prebuild.ext.hash"/>
        <say  message="prebuild.nosql.hash            = '${prebuild.nosql.hash}'"     if="prebuild.nosql.hash"/>
        <say  message="prebuild.git.hash              = undefined"                unless="prebuild.git.hash"/>
        <say  message="prebuild.ext.hash              = undefined"                unless="prebuild.ext.hash"/>
        <say  message="prebuild.nosql.hash            = undefined"                unless="prebuild.nosql.hash"/>

        <!-- Determine existing bundle versions -->
        <selectbundle basename="${oracle.ext.prefix}"     directory="${oraclebuild.2.common.plugins.dir}"
                     criterion="${oracle.ext.criteria}"    property="prebuild.oracle.ext.version"  versiononly="true"
        />
        <selectbundle basename="${oracle.nosql.prefix}"   directory="${oraclebuild.2.common.plugins.dir}"
                     criterion="${oracle.nosql.criteria}"  property="prebuild.oracle.nosql.version"   versiononly="true"
        />

        <!-- Report results -->
        <say  message="prebuild.oracle.ext.version    = '${prebuild.oracle.ext.version}'"                     if="prebuild.oracle.ext.version"/>
        <say  message="prebuild.oracle.nosql.version  = '${prebuild.oracle.nosql.version}'"                   if="prebuild.oracle.nosql.version"/>
        <say  message="prebuild.oracle.ext.version    = '${oracle.ext.prefix}_*.jar' bundle not found."   unless="prebuild.oracle.ext.version"/>
        <say  message="prebuild.oracle.nosql.version  = '${oracle.nosql.prefix}_*.jar' bundle not found." unless="prebuild.oracle.nosql.version"/>
        <echo message=" ---"/>

        <!-- Validate we have what we need to proceed -->
        <condition property="missing.hash" value="true">
            <or>
                <not> <isset property="prebuild.git.hash"/> </not>
                <not> <isset property="prebuild.ext.hash"/> </not>
                <not> <isset property="prebuild.nosql.hash"/> </not>
            </or>
        </condition>
        <fail message="Cannot determine repository state (one or more hashes undefined). Aborting..." if="missing.hash"/>
    </target>

    <target name="set-build-required" depends="establish-baseline">
        <!-- This could get increadibly complex: To compile both bundles together, not only do I need to determine if both bundles -->
        <!-- should be built, but I need to figure out if the qualifiers are the same (based upon the hash of the project itself). -->
        <!-- This means the potential of three build paths: (compile both together [if same hash], compile one, compile both       -->
        <!-- [different qualifiers]). So it looks like while compiling together is more efficient with Maven, it would only add    -->
        <!-- more complexity to this process. Therefore, the variables will be set to call the compile for each bundle if it is    -->
        <!-- required and use the bundles already determined hash, regardless of whether the hashes match.                         -->

        <!-- Determine if Oracle Extension needs rebuild                                                                           -->
        <condition property="oracle.current" value="true">
            <contains string="${prebuild.oracle.ext.version}" substring="${prebuild.ext.hash}"/>
        </condition>
        <!-- Determine if Oracle NoSQL Extension needs rebuild -->
        <condition property="nosql.current" value="true">
            <contains string="${prebuild.oracle.nosql.version}" substring="${prebuild.nosql.hash}"/>
        </condition>
        <say  message="oracle.current                 = '${oracle.current}'     ('prebuild.oracle.ext.version' contains 'prebuild.ext.hash')"        if="oracle.current"/>
        <say  message="nosql.current                  = '${nosql.current}'     ('prebuild.oracle.nosql.version' contains 'prebuild.nosql.hash')"     if="nosql.current"/>
        <say  message="oracle.current                 = undefined ('prebuild.oracle.ext.version' doesn't contain 'prebuild.ext.hash')"           unless="oracle.current"/>
        <say  message="nosql.current                  = undefined ('prebuild.oracle.nosql.version' doesn't contain 'prebuild.nosql.hash')"       unless="nosql.current"/>

        <!-- set what should clean -->
        <!-- if either oracle or nosql need rebuild (clean will need to happen in either case)-->
        <condition property="clean.target" value="oracle">
            <and>
                <not> <isset property="oracle.current"/> </not>
                <not> <isset property="nosql.current"/>  </not>
            </and>
        </condition>
        <condition property="clean.target" value="oracle.ext">
            <and>
                <not> <isset property="oracle.current"/> </not>
                <isset property="nosql.current"/>
            </and>
        </condition>
        <condition property="clean.target" value="oracle.nosql">
            <and>
                <isset property="oracle.current"/>
                <not> <isset property="nosql.current"/>  </not>
            </and>
        </condition>

        <say  message="clean.target                   = '${clean.target}'"      if="clean.target"/>
        <say  message="clean.target                   = undefined"          unless="clean.target"/>
    </target>

    <!-- ================================================================ -->
    <!--  BUILD TARGETS                                                   -->
    <!-- ================================================================ -->
    <target name="report-build-not-required" unless="clean.target" depends="set-build-required">
        <echo message="Oracle extensions appear current. Conditions not met for rebuild. Build target will be bypassed."/>
    </target>


    <target name="clean-oracle" if="clean.target" depends="report-build-not-required">
        <!-- === Which extensions targeted is based on ${oracle.target} === -->
        <!--   oracle.target = oracle.ext:   build oracle extension         -->
        <!--                 = oracle.nosql: build oracle nosql extension   -->
        <!--                 = oracle:       build both                     -->
        <ant antfile="antbuild.xml" dir="${oraclebuild.2.base.dir}"     target="clean-oracle-extension">
           <property name="version.qualifier" value="v${oraclebuild.build.date}-${prebuild.git.hash}"/>
           <property name="oracle.target" value="${clean.target}"/>
        </ant>
        <!-- Also need to clean the compdeps repo so it is forced to regenerate -->
        <ant antfile="antbuild.xml" dir="${oraclebuild.2.base.dir}"     target="generate-local-compdeps">
           <property name="generate.compdeps" value="true"/>
        </ant>
        <!-- What about the oracle repo? force regen, or allow manual install of local repo? -->
    </target>

    <target name="build-oracle" unless="oracle.current" >
        <!-- === Which extensions targeted is based on ${oracle.target} === -->
        <!--   oracle.target = oracle.ext:   build oracle extension         -->
        <!--                 = oracle.nosql: build oracle nosql extension   -->
        <!--                 = oracle:       build both                     -->
        <build_extension          qualifierhash="prebuild.ext.hash" buildtarget="oracle.ext"/>

        <selectbundle basename="${oracle.ext.prefix}"     directory="${oraclebuild.2.common.plugins.dir}"
                     criterion="${oracle.ext.criteria}"    property="postbuild.oracle.ext.version"  versiononly="true"
        />
        <validate_extension_build prebuildhashproperty="prebuild.ext.hash"   currentversionproperty="postbuild.oracle.ext.version"   prebuildversion="${prebuild.oracle.ext.version}"   successproperty="commit.oracle" failureproperty="oracle.build.failed"/>
    </target>

     <target name="build-nosql" unless="nosql.current" >
        <!-- === Which extensions targeted is based on ${oracle.target} === -->
        <!--   oracle.target = oracle.ext:   build oracle extension         -->
        <!--                 = oracle.nosql: build oracle nosql extension   -->
        <!--                 = oracle:       build both                     -->
        <build_extension          qualifierhash="prebuild.nosql.hash"  buildtarget="oracle.nosql"/>
        <selectbundle basename="${oracle.nosql.prefix}"   directory="${oraclebuild.2.common.plugins.dir}"
                     criterion="${oracle.nosql.criteria}"  property="postbuild.oracle.nosql.version"   versiononly="true"
        />
        <validate_extension_build prebuildhashproperty="prebuild.nosql.hash" currentversionproperty="postbuild.oracle.nosql.version" prebuildversion="${prebuild.oracle.nosql.version}" successproperty="commit.nosql" failureproperty="nosql.build.failed"/>
    </target>

    <!-- ================================================================ -->
    <!--  COMMIT TARGETS                                                  -->
    <!-- ================================================================ -->
    <target name="oracle-failed" if="oracle.build.failed" depends="">
        <echo message="cannot commit oracle extention, no bundle to commit"/>
        <!-- revert?? -->
    </target>

    <target name="commit-oracle" if="commit.oracle" depends="oracle-failed">
        <echo message="commit-oracle"/>
        <!-- Need:
            ${oracle.ext.prefix} prefix of bundles to commit
            ${postbuild.oracle.ext.version} version of bundles to commit
            ${prebuild.oracle.ext.version} to delete old bundle from repo
        -->
        <commit_extension targetprefix="${oracle.ext.prefix}" currentversion="${postbuild.oracle.ext.version}" prebuildversion="${prebuild.oracle.ext.version}"/>
    </target>

    <target name="nosql-failed" if="nosql.build.failed" depends="">
        <echo message="cannot commit oracle nosql extention, no bundle to commit"/>
        <!-- revert?? -->
    </target>

    <target name="commit-nosql" if="commit.nosql" depends="nosql-failed">
        <echo message="commit-nosql"/>
        <!-- Need:
            ${oracle.nosql.prefix} prefix of bundles to commit
            ${postbuild.oracle.nosql.version} version of bundles to commit
            ${prebuild.oracle.nosql.version} to delete old bundle from repo
        -->
        <commit_extension targetprefix="${oracle.nosql.prefix}" currentversion="${postbuild.oracle.nosql.version}" prebuildversion="${prebuild.oracle.nosql.version}"/>
    </target>

   <target name="validate-commits">
        <!-- If (! oracle.current) and commit.oracle.hash != prebuild.git.hash /was supposed to build post-commit-hash not equal prebuild haash -->


        <!-- Determine if Oracle Extension was commited       -->
        <condition property="oracle.comitted" value="true">
            <and>
                <not> <isset property="oracle.current"/> </not>
                <contains string="${postbuild.oracle.ext.version}" substring="${postbuild.ext.hash}"/>
            </and>
        </condition>
        <!-- Determine if Oracle NoSQL Extension was commited -->
        <condition property="nosql.comitted" value="true">
            <and>
                <not> <isset property="nosql.current"/>  </not>
                <contains string="${postbuild.oracle.nosql.version}" substring="${postbuild.nosql.hash}"/>
            </and>
        </condition>
    </target>

    <!-- ================================================================ -->
    <!--  MACRO DEFINITIONS                                               -->
    <!-- ================================================================ -->
    <!-- Needed to reduce code redunancy:                                 -->
    <!--   antcall is both memory intensive, and operate                  -->
    <!--   outside current environment                                    -->
    <!-- ================================================================ -->
    <macrodef name="get_git_hash">
        <attribute name="githashproperty"/>
        <attribute name="repoprojectdir"/>
        <sequential>
            <!-- echo message="gitHashProperty = '@{githashproperty}'"/>
            <echo message="repoProjectDir  = '@{repoprojectdir}'"/ -->
            <exec outputproperty="@{githashproperty}"
                failonerror="false"
                failifexecutionfails="false"
                errorproperty="githash.failed"
                logError="true"
                executable="${git.exec}">
                <arg value="log"/>
                <arg value="-1"/>
                <arg value="--format=%h"/>
                <arg line="@{repoprojectdir}"/>
            </exec>
        </sequential>
    </macrodef>

    <macrodef name="build_extension">
        <attribute name="qualifierhash"/>
        <attribute name="buildtarget"/>
        <sequential>
        <!-- === Which extensions targeted is based on ${oracle.target} === -->
        <!--   oracle.target = oracle.ext:   build oracle extension         -->
        <!--                 = oracle.nosql: build oracle nosql extension   -->
        <!--                 = oracle:       build both                     -->
        <ant antfile="antbuild.xml" dir="${oraclebuild.2.base.dir}"     target="build-oracle-extension">
           <property name="version.qualifier" value="v${oraclebuild.build.date}-${@{qualifierhash}}"/>
           <property name="oracle.target" value="@{buildtarget}"/>
        </ant>
        </sequential>
    </macrodef>

    <macrodef name="validate_extension_build">
        <!-- Verify build was successful.                                             -->
        <!-- Compare:                                                                 -->
        <!--    ${currentversionproperty} to prebuildversion (shouldn't match)        -->
        <!--    ${prebuildhashproperty} should be a substring of currentversion       -->
        <!-- Set:                                                                     -->
        <!--    successproperty to true if above true                                 -->
        <!--    (implies <extension>.current was false & so build was needed)         -->
        <!--    failureproperty is set if above is false                              -->
        <!--    (implies build was necessary, but something failed)                   -->
        <!--    (need separate property for process flow: "task if=" tests existance) -->
        <attribute name="prebuildhashproperty"/>
        <attribute name="currentversionproperty"/>
        <attribute name="prebuildversion"/>
        <attribute name="successproperty"/>
        <attribute name="failureproperty"/>
        <sequential>
            <condition property="@{successproperty}" value="true">
                <and>
                    <isset property="@{currentversionproperty}"/>
                    <not> <equals arg1="${@{currentversionproperty}}" arg2="@{prebuildversion}"/>  </not>
                    <contains string="${@{currentversionproperty}}" substring="${@{prebuildhashproperty}}"/>
                </and>
            </condition>
            <condition property="@{failureproperty}" value="true">
                <not> <isset property="@{successproperty}"/> </not>
            </condition>
            <say message="Bundle was successfully generated:"                                                     if="@{successproperty}"/>
            <say message="    @{currentversionproperty} ('${@{currentversionproperty}}') != '@{prebuildversion}'" if="@{successproperty}"/>
            <say message="    and '${@{prebuildhashproperty}}' is a substring of '${@{currentversionproperty}}'"  if="@{successproperty}"/>
            <say message="Bundle generation failure detected."                                                    if="@{failureproperty}"/>
        </sequential>
    </macrodef>


    <macrodef name="commit_extension">
        <!-- Commit built artifacts -->
        <attribute name="targetprefix"/>
        <attribute name="currentversion"/>
        <attribute name="prebuildversion"/>
        <sequential>
        <!-- Checkin process -->
            <!-- git pull -->
            <exec
                failonerror="false"
                failifexecutionfails="false"
                errorproperty="githash.failed"
                logError="true"
                executable="${git.exec}">
                <arg value="pull"/>
            </exec>
            <!-- cd plugins -->
            <!-- git rm ${targetprefix}_${prebuildversion}.jar ${targetprefix}.source_${prebuildversion}.jar -->
            <exec
                dir="plugins"
                failonerror="false"
                failifexecutionfails="false"
                errorproperty="githash.failed"
                logError="true"
                executable="${git.exec}">
                <arg value="rm"/>
                <arg line="@{targetprefix}_@{prebuildversion}.jar @{targetprefix}.source_@{prebuildversion}.jar"/>
            </exec>
            <!-- git add -f ${targetprefix}_${currentversion}.jar ${targetprefix}.source_${currentversion}.jar -->
            <exec
                dir="plugins"
                failonerror="false"
                failifexecutionfails="false"
                errorproperty="githash.failed"
                logError="true"
                executable="${git.exec}">
                <arg value="add"/>
                <arg value="-f"/>
                <arg line="@{targetprefix}_@{currentversion}.jar @{targetprefix}.source_@{currentversion}.jar"/>
            </exec>
            <!-- Not needed:   git status -->
            <!-- git commit -m "contribute new oracle bundles" -->
            <exec
                failonerror="false"
                failifexecutionfails="false"
                errorproperty="githash.failed"
                logError="true"
                executable="${git.exec}">
                <arg value="commit"/>
                <arg value="-s"/>
                <arg line="-m 'contribute new oracle bundles for @{targetprefix}'"/>
                <arg line="-m '@{targetprefix}_@{currentversion}.jar @{targetprefix}.source_@{currentversion}.jar'"/>
            </exec>
            <!-- git push -->
            <!-- DO NOT push changes for now -->
            <!--
            <exec
                failonerror="false"
                failifexecutionfails="false"
                errorproperty="githash.failed"
                logError="true"
                executable="${git.exec}">
                <arg value="push"/>
            </exec>
            -->
        </sequential>
    </macrodef>
</project>
