#!/usr/bin/env bash
# script to copy update jars from their working area to the staging area

# finds file on users path, before current directory
# hence, non-production users can set their own values for test machines
source aggr_properties.shsource

function removeLock
{   
    # remove lock file from hundson build's "pauseAll.sh" script once we are all done.
    # remember, we need to _always_ remove the lock file, so do not "exit" from script with calling removeLock
    rm -vf "${BUILD_HOME}"/lockfile
}

function checkForErrorExit
{   
    # arg 1 must be return code, $?
    # arg 2 (remaining line) can be message to print before exiting do to non-zer exit code
    exitCode=$1
    shift
    message="$*"
    if [ "${exitCode}" -ne "0" ]
    then
        echo
        echo "   ERROR. exit code: ${exitCode}"  ${message}
        echo
        removeLock
        exit "${exitCode}"
    fi
}


fromDirectory=${AGGREGATOR_RESULTS}
toDirectory=${stagingDirectory} 

# TODO remove this? who uses it? 
tempDir=${HOME}/temp/work

# make sure 'toDirectory' has been defined and is no zero length, or 
# else following will eval to "rm -fr /*" ... potentially catastrophic
if [ -z "${toDirectory}" ]
then
    checkForErrorExit 1 "The variable 'toDirectory' must be defined to run this script"
else
    echo
    echo "    Count of old features, bundle jars, and packed jars prior to promotion";
    "${BUILD_TOOLS_DIR}"/printStats.sh
    checkForErrorExit $? "printStats did not return normally"
    echo 

    echo 
    echo "    Removing previous staging directory files at"
    echo "    "${toDirectory} 
    echo 

    if [ -d ${toDirectory} ]
    then
        rm -fr "${toDirectory}"/*
        checkForErrorExit $? "could not remove " ${toDirectory}
    fi

    echo 
    echo "    Copying new plugins and features "
    echo "        from  ${fromDirectory}"
    echo "          to  ${toDirectory}"
    echo 

    # plugins and features
    rsync -rvp ${fromDirectory}/final/aggregate ${toDirectory}
    checkForErrorExit $? "could not copy files as expected"

    # composite artifact and content files
    rsync -vp ${fromDirectory}/final/*.jar ${toDirectory}
    checkForErrorExit $? "could not copy files as expected"

    # copy standard index page
    rsync -vp templateFiles/staging/index.html ${toDirectory}
    checkForErrorExit $? "could not copy files as expected"

    "${BUILD_TOOLS_DIR}"/addRepoProperties-staging.sh
    checkForErrorExit $? "repo properties could not be updated as expected"

    # TODO: eventually, we could make "sanity check" test on number of files, etc., and fail if more than 10% off, or similar
    echo
    echo "    Count of new features, bundle jars, and packed jars after promotion";
    "${BUILD_TOOLS_DIR}"/printStats.sh
    checkForErrorExit $? "printStats did not return normally"
    echo

fi

removeLock

