#!/bin/bash
# -----------------------------------------------------------------------------
# Packages specific ONOS codebase with specific tag or branch
# -----------------------------------------------------------------------------

# Bail on any errors
set -e

# Initialize environment variables
init() {
    # Check if ONOS_ROOT is defined
    [ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1;

    # Setup some environmental context for developers
    if [ -z "${JAVA_HOME}" ]; then
        if [ -x /usr/libexec/java_home ]; then
            export JAVA_HOME=$(/usr/libexec/java_home -v 1.8);
        elif [ -d /usr/lib/jvm/java-8-oracle ]; then
            export JAVA_HOME="/usr/lib/jvm/java-8-oracle";
        elif [ -d /usr/lib/jvm/java-8-openjdk-amd64 ]; then
            export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64";
        fi
    fi
    # Check if mvn exists
    command -v mvn >/dev/null 2>&1 || {
    # Following the convention, the default location of maven shows as below.
    MAVEN=${MAVEN:-~/Applications/apache-maven-3.3.9};
    export PATH="$MAVEN/bin:$PATH";
    }
}

# checkout $TAG, build project and copy it to other location
check_copy() {
    CHECK_TAG=`git checkout $TAG`
    if [[ $CHECK_TAG =~ "error" ]]; then
        echo "There is no branch or tag named $TAG in $ONOS_ROOT" >&2 && exit 1
    fi
    FOLDER=$CURRENT_PATH/onos-$TAG-blackduck
    [ -d "$FOLDER" ] && rm -r $FOLDER
    mkdir $FOLDER
    mvn clean install
    if [ $? -eq 0 ]; then
        cp -r -a * $FOLDER;
        if [ -d "$FOLDER/.git" ]; then
         rm -r $FOLDER/.git
        fi;
    else
        git checkout $CURRENT_TAG;
        rm -r $FOLDER
        echo "mvn compilation failed"
    fi
}

# Script entry point
CURRENT_PATH=`pwd`
TAG=${1:-'master'}

init
cd $ONOS_ROOT
CURRENT_TAG=`git branch | awk '{print $2}'`
check_copy
cd $FOLDER
zip -rq -m $CURRENT_PATH/onos-$TAG-blackduck.zip *
cd ..
rm -r $FOLDER

cd $ONOS_ROOT
git checkout $CURRENT_TAG
