#!/bin/bash
# -----------------------------------------------------------------------------
# Tool to perform a cell-based remote bazel build using a borrowed test cell.
# -----------------------------------------------------------------------------

# Check environment
[ -z "$OCN" ] && echo "Cell environment not established" && exit 1

# Check arguments and environment
baseCommit=${1:-$(git log | grep origin/master | head -n1 | cut -d\  -f2)}

# Create a patch file
git diff $baseCommit > /tmp/$baseCommit.patch

# Copy patch file to the remote build machine
scp /tmp/$baseCommit.patch $ONOS_USER@$OCN:/tmp

ssh -t -t $ONOS_USER@$OCN "
    source ~/.bash_aliases
    cd \$ONOS_ROOT

    # Make sure the remote build machine is on the same commit hash as the local one
    remoteCommit=\$(git log -n 1 | head -n1 | cut -d\  -f2)

    # Clean-up the workspace and stash away any changes.
    git clean -f
    git stash

    if [ "\$remoteCommit" != "$baseCommit" ]; then
        git checkout master
        git pull
        git checkout $baseCommit
    fi

    # Apply the patch
    git apply /tmp/$baseCommit.patch

    # Run the build (neutralizing known environment mutations in SSH sessions)
    SHLVL=1 SSH_CLIENT=0 SSH_CONNECTION=0 bazel build onos
"
