#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail

cd $WORKSPACE
# Make sure the Nordix is set from Jenkins Job configuration
# parameter: NORDIX_REMOTE and not from previous job execution
if git remote | grep nordix > /dev/null ; then
    git remote rm nordix
fi
# When the GERRIT_BRANCH is not set the rebase job wasn't triggered by merge
# but it's executed as part of timer. In this case we will make sure that all
# branches from remote are synced with Nordix Gerrit.
if [[ -z "${GERRIT_BRANCH:-}" ]] ; then
    echo "-- Fetch all branches from OpenDev for project: ${PROJECT} --"
    REMOTE_BRANCHES=$(git branch -r | grep -v 'HEAD -> ' | awk '/origin/ {gsub("origin/","");print}')
    for branch in ${REMOTE_BRANCHES}  ; do
        git branch -f --track ${branch} origin/${branch}
    done
# The job was triggered by merge on OpenDev. We will make sure that branch set
# in GERRIT_BRANCH is in sync with Nordix Gerrit.
else
    echo "-- Fetch branch: ${GERRIT_BRANCH} from OpenDev for project: ${PROJECT} --"
    REMOTE_BRANCHES=${GERRIT_BRANCH}
    git branch -f --track ${GERRIT_BRANCH} origin/${GERRIT_BRANCH}
fi
git fetch origin -v
echo "-- Adding new remote $NORDIX_REMOTE for sync --"
git remote add nordix $NORDIX_REMOTE
git remote -v
echo "-- Merging changes from OpenDev remote branches to local branch: --"
for branch in ${REMOTE_BRANCHES}  ; do
    echo "------ Branch name: ${branch}"
    git checkout ${branch} -q
    git merge origin/${branch} --ff-only --stat
done
echo "-- Pushing changes to Nordix Gerrit --"
git push nordix --all -v
echo "--------------------------------------------------------------------"
