#!/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 ONAP"
project=$(git config --local remote.origin.url | awk -F "29418/onap/" '{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.onap.org:29418/$project.git"
else
  git remote add upstream "ssh://$username@gerrit.onap.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 ONAP succeeded"
else
  echo "Push upstream to ONAP failed"
  exit 2
fi

git checkout $BRANCH
git branch -D delivery_branch
