#!/bin/bash
##############################################################################
# Copyright 2018 EuropeanSoftwareMarketingLtd.
# ===================================================================
#  Licensed under the ApacheLicense, Version2.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
#
# 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
##############################################################################
# vnftest comment: this is a modified copy of
# yardstick/docker/exec_tests.sh
set -e

: ${VNFTEST_REPO:='https://gerrit.onap.org/gerrit/vnftest'}
: ${VNFTEST_REPO_DIR:='/home/onap/repos/vnftest'}
: ${VNFTEST_BRANCH:='master'} # branch, tag, sha1 or refspec

# git update using reference as a branch.
# git_update_branch ref
function git_update_branch {
    local git_branch=$1

    git checkout -f origin/${git_branch}
    # a local branch might not exist
    git branch -D ${git_branch} || true
    git checkout -b ${git_branch}
}

# git update using reference as a branch.
# git_update_remote_branch ref
function git_update_remote_branch {
    local git_branch=$1

    git checkout -b ${git_branch} -t origin/${git_branch}
}

# git update using reference as a tag. Be careful editing source at that repo
# as working copy will be in a detached mode
# git_update_tag ref
function git_update_tag {
    local git_tag=$1

    git tag -d ${git_tag}
    # fetching given tag only
    git fetch origin tag ${git_tag}
    git checkout -f ${git_tag}
}


# OpenStack Functions

git_checkout()
{
    local git_ref=$1
    if [[ -n "$(git show-ref refs/tags/${git_ref})" ]]; then
        git_update_tag "${git_ref}"
    elif [[ -n "$(git show-ref refs/heads/${git_ref})" ]]; then
        git_update_branch "${git_ref}"
    elif [[ -n "$(git show-ref refs/remotes/origin/${git_ref})" ]]; then
        git_update_remote_branch "${git_ref}"
    # check to see if it is a remote ref
    elif git fetch --tags origin "${git_ref}"; then
        # refspec / changeset
        git checkout FETCH_HEAD
    else
        # if we are a random commit id we have to unshallow
        # to get all the commits
        git fetch --unshallow origin
        git checkout -f "${git_ref}"
    fi
}

# releng is not needed, we bind-mount the credentials

echo
echo "INFO: Updating vnftest -> ${VNFTEST_BRANCH}"
if [ ! -d ${VNFTEST_REPO_DIR} ]; then
    git clone ${VNFTEST_REPO} ${VNFTEST_REPO_DIR}
fi
cd ${VNFTEST_REPO_DIR}
git_checkout ${VNFTEST_BRANCH}