#!/usr/bin/env bash
#

if [ $# -ne 1 ]; then
    echo USAGE: $0 env_file
    exit 1
fi

if [ ! -r "$1" ]; then
    echo "$1" cannot be read
    echo USAGE: $0 env_file
    exit 1
fi

SCRIPT_PATH=${SCRIPT_PATH:-$(pwd)}

source $SCRIPT_PATH/build-functions.shsource

source "$1"

# derived values
gitCache=$( fn-git-cache "$BUILD_ROOT" "$BRANCH" )
aggDir=$( fn-git-dir "$gitCache" "$AGGREGATOR_REPO" )

if [ -z "$BUILD_ID" ]; then
    BUILD_ID=$(fn-build-id "$BUILD_TYPE" )
fi

buildDirectory=$( fn-build-dir "$BUILD_ROOT" "$BUILD_ID" "$STREAM" )
basebuilderDir=$( fn-basebuilder-dir "$BUILD_ROOT" "$BUILD_ID" "$STREAM" )

$SCRIPT_PATH/getEBuilderForDropDir.sh $buildDirectory $EBUILDER_HASH

fn-checkout-basebuilder "$basebuilderDir"

launcherJar=$( fn-basebuilder-launcher "$basebuilderDir" )

EBuilderDir="$buildDirectory"/eclipse.platform.releng.aggregator/eclipse.platform.releng.tychoeclipsebuilder

# compute update site on build server
function updateSiteOnBuildMachine()
{
    checkNArgs $# 3
    ROOT="$1"; shift
    BUILD_ID="$1"; shift
    STREAM="$1"; shift

    buildType=${BUILD_ID:0:1}


    # contrary to intuition (and previous behavior, bash 3.1) do NOT use quotes around right side of expression.
    if [[ "${STREAM}" =~ ^([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)$ ]]
    then
        eclipseStreamMajor=${BASH_REMATCH[1]}
        eclipseStreamMinor=${BASH_REMATCH[2]}
        eclipseStreamService=${BASH_REMATCH[3]}
    else
        echo "STREAM, $STREAM, must contain major, minor, and service versions, such as 4.3.0" >${TRACE_OUTPUT}
        return 1
    fi

    siteDir=${ROOT}/siteDir
    updatesSuffix="builds"
    siteDirOnBuildMachine=$siteDir/updates/${eclipseStreamMajor}.${eclipseStreamMinor}-${buildType}-${updatesSuffix}/${BUILD_ID}
    mkdir -p ${siteDirOnBuildMachine}
    RC=$?
    if [[ $RC != 0 ]]
    then 
        echo "ERROR: could not create update site on build machine. RC: $RC" >${TRACE_OUTPUT}
        echo "       obtained error trying to create ${siteDirOnBuildMachine}" >${TRACE_OUTPUT}
        return 1
    fi

    echo $siteDirOnBuildMachine
}

siteDirOnBuildMachine=$( updateSiteOnBuildMachine "$BUILD_ROOT" "$BUILD_ID" "$STREAM" )
echo "siteDirOnBuildMachine: ${siteDirOnBuildMachine}"
repositoryDir=${buildDirectory}/repository
echo "repositoryDir: ${repositoryDir}"

# leave both old and new methods for now, so true (1) ==> old straight copy. 
# change to false (0) to test new method.
if (( 1 )) 
then
    DO_NOT_MIRROR_IN_ASSEMBLY="-DdoNotMirror=true"
    # for now, straight copy from what was produced to local build machine directory. 
    # This is partially done so that 
    #   rest of scripts stay common
    #   but eventually, we might put in some mirror/comparator/remove tasks here.

    # NOTE: we are using the "safe copy" we put in drop directory on build machine.

    # make posiitive ${repositoryDir} is not empty, or we are basically copying
    # all of root! (and, if repositoryDir is empty if we had a failed build! 
    # and should not be calling this method, anyway.)
    if [[ -n "${repositoryDir}" && -d "${repositoryDir}" && -n "${siteDirOnBuildMachine}" && -d "${siteDirOnBuildMachine}" ]]
    then
        rsync --times --omit-dir-times --recursive "${repositoryDir}/" "${siteDirOnBuildMachine}/"
        RC=$? 
        if [[ $RC != 0 ]]
        then 
            echo "ERROR: rsync of repo returned error. RC: $RC"
            echo "       obtained while copying"
            echo "       from ${repositoryDir}"
            echo "       to ${siteDirOnBuildMachine}"
            exit $RC
        fi

    else
        echo "ERROR: Some directory didn't exist for update site copy."
        echo "  repositoryDir: ${repositoryDir}"
        echo "  siteDirOnBuildMachine: ${siteDirOnBuildMachine}"
        exit $RC
    fi 

fi

java -Djava.io.tmpdir=$TMP_DIR -jar "$launcherJar" \
    -data ${buildDirectory}/workspace-mirrorRepo \
    -application org.eclipse.ant.core.antRunner \
    -v \
    -buildfile "$EBuilderDir"/eclipse/buildScripts/process-artifacts.xml \
    -DrepositoryDir=${repositoryDir} \
    -Dbuildlogs=$logsDirectory/comparatorlogs \
    -DsiteDirOnBuildMachine=$siteDirOnBuildMachine \
    -DcomparatorRepository=$comparatorRepository \
    -Djava.io.tmpdir=$TMP_DIR ${DO_NOT_MIRROR_IN_ASSEMBLY}

RC=$? 
if [[ $RC != 0 ]]
then 
    echo "ERROR: java invocation to process-artifacts did not return normally: $RC"
    exit $RC
fi


# copy "human readable" (user friendly) HTML file
buildType=${BUILD_ID:0:1}
rsync --times --omit-dir-times --recursive "${EBuilderDir}/eclipse/publishingFiles/staticRepoSiteFiles/${buildType}builds/simple/" "${siteDirOnBuildMachine}/"
RC=$? 
if [[ $RC != 0 ]]
then 
    echo "ERROR: rsync of repo returned error. RC: $RC"
    echo "       obtained while copying"
    echo "       from ${EBuilderDir}/eclipse/publishingFiles/staticRepoSiteFiles/${buildType}builds/simple/"
    echo "       to ${siteDirOnBuildMachine}"
    exit $RC
fi

exit 0

