#!/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 ${PROJECT} branches from Gerrit upstream --"
    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 upstream Gerrit. We will make sure that branch set
# in GERRIT_BRANCH is in sync with Nordix Gerrit.
else
    echo "-- Fetch branch: ${GERRIT_BRANCH} for project: ${PROJECT} --"
    REMOTE_BRANCHES=${GERRIT_BRANCH}
    git branch -f --track ${GERRIT_BRANCH} origin/${GERRIT_BRANCH}
fi
git fetch origin --tags -v
echo "-- Adding new remote $NORDIX_REMOTE for sync --"
git remote add nordix $NORDIX_REMOTE
git remote -v
echo "-- Merging changes from Gerrit upstream remote branches to local branch: --"
for branch in ${REMOTE_BRANCHES}  ; do
    echo "--- Branch name: ${branch}"
    git checkout ${branch} -q -f
    git merge origin/${branch} --ff-only --stat
    echo "------ Pushing changes from branch: ${branch} to Nordix Gerrit"
    git push nordix -v
    echo "------ Pushing new tags from branch: ${branch} to Nordix Gerrit"
    git push nordix --tags -f -v
done
echo "--------------------------------------------------------------------"
