# this file is meant to be sourced
#
#   Copyright 2017 Sandvine
#
#   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.
#
#

RELEASE="ReleaseTWO"
REPOSITORY_KEY="OSM%20ETSI%20Release%20Key.gpg"
REPOSITORY="stable"
REPOSITORY_BASE="http://osm-download.etsi.org/repository/osm/debian"

while getopts ":r:k:u:R:b:" o; do
    case "${o}" in
        r)
            REPOSITORY=${OPTARG}
            ;;
        R)
            RELEASE=${OPTARG}
            ;;
        k)
            REPOSITORY_KEY=${OPTARG}
            ;;
        u)
            REPOSITORY_BASE=${OPTARG}
            ;;
        b)
            ## ignore branch option
            ;;
    esac
done

key_location=$REPOSITORY_BASE/$RELEASE/$REPOSITORY_KEY
echo $key_location

curl $key_location | apt-key add -

apt-get update && add-apt-repository -y "deb $REPOSITORY_BASE/$RELEASE $REPOSITORY SO UI RO IM MON osmclient openvim"
