#!/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/" '{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/master

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
