#!/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 single commit form the given Nordix Gerrit review
# and push it, and all its ancestor commit till $GERRIT_BRANCH, to OpenDaylight
# Gerrit.
# 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 OpenDaylight Gerrit
#
set -euxo pipefail

cd "$WORKSPACE"

opendaylight_gerrit_base='git.opendaylight.org:29418'
nordix_gerrit_rest='https://gerrit.nordix.org'

echo >&2 "Collecting information about what and how to push towards OpenDaylight"

# The git hash of the commit in the review this job runs on
commit_hash="$GERRIT_PATCHSET_REVISION"

# GERRIT_PROJECT is in the form of opendaylight/<opendaylight-project>
opendaylight_project=$(echo "$GERRIT_PROJECT" | cut -d/ -f2- )

# original way to get user name based on nordix id replaced by method below
# Nordix Gerrit can map the email address of the user pushed the change to
# the review to the Gerrit username of the account in Nordix Gerrit. This
# should match with the Gerrit username in the OpenDaylight Gerrit.
#username=$(
#    curl -s -H 'Accept: application/json' \
#        "$nordix_gerrit_rest/accounts/?q=email:$GERRIT_EVENT_ACCOUNT_EMAIL&o=DETAILS" \
#    | tee /dev/stderr | tail -1 | jq -r '.[0].username')

# read user name from the commit details which allows nordix user name to be different to lfid
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"
    echo "Use command git config --global user.name <LFID>"
    exit 1
fi

opendaylight_remote_url="ssh://$username@$opendaylight_gerrit_base/$opendaylight_project"

# GERRIT_BRANCH is the _intended_ branch of the commit under review
# E.g. git push HEAD:refs/for/master => GERRIT_BRANCH='master'
# GERRIT_TOPIC is the rest of the refspec after GERRIT_BRANCH when the topic
# is set for the change.
if [ -z "${GERRIT_TOPIC:-}" ] ; then
    refspec="${commit_hash}:refs/for/${GERRIT_BRANCH}"
else
    refspec="${commit_hash}:refs/for/${GERRIT_BRANCH}%topic=${GERRIT_TOPIC}"
fi

echo >&2 "Pushing to OpenDaylight"

# do not fail if git push fails as in case of no new changes we want to succeed. See below.
set +o pipefail

git push "$opendaylight_remote_url" "$refspec" 2>&1 | tee push_result.txt
push_result=${PIPESTATUS[0]}

# make the job a success if the above git push fails due to no new changes are needed
# to be created upstream. This will be useful when we switch to automatic triggering
# of the push-upstream for each patch set and jobs on different commits in a same chain
# will race with each other to push parts of the chain
if [ $push_result -ne 0 ]; then
    grep '(no new changes)' push_result.txt
fi
