#!/bin/bash

# ============LICENSE_START=======================================================
#  Copyright (C) 2019 The Nordix Foundation. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================

#
# This script will take the changes that are pushed to Nordix Gerrit and push upstream to ONAP
# Pre-requisites for script to run successfully:
# - Author name in Nordix Gerrit equals LFID i.e. need to run "git config --global user.name <LFID>"
# - infra public key on build server needs to be added to your users SSH Public Keys in ONAP Gerrit
#
set -o nounset
set -o pipefail

cd $WORKSPACE
echo "Retrieving information from commit to push towards Acumos"
project=$(git config --local remote.origin.url | awk -F "29418/acumos/" '{print $2}')
message=$(git show -s --pretty=%B | grep -vi 'Signed-off-by')
username=$(git show -s --pretty=%an)

pattern=" "
if [[ "$username" =~ $pattern ]]
then
    echo "Incorrect username, use Linux Foundation ID as git user.name when pushing to Nordix"
    exit 1
fi

echo "Setting user name and email"
git config user.email $(git show -s --pretty=%ae)
git config user.name $username

echo "Checking out branch on master with new changes"
git reset HEAD~1 --soft
git checkout -b delivery_branch origin/$BRANCH

git config --get remote.upstream.url
retVal=$?

if [[ $retVal -eq 0 ]]
then
  git remote rm upstream
  git remote add upstream "ssh://$username@gerrit.acumos.org:29418/$project.git"
else
  git remote add upstream "ssh://$username@gerrit.acumos.org:29418/$project.git"
fi

echo "Committing changes and pushing upstream"
git commit -as -m "$message"
git push upstream HEAD:refs/for/$BRANCH

retVal1=$?
if [[ $retVal1 -eq 0 ]]
then
  echo "Push upstream to Acumos succeeded"
else
  echo "Push upstream to Acumos failed"
  exit 2
fi

git checkout $BRANCH
git branch -D delivery_branch
