#!/bin/sh

################################################################################
##
##  Licensed to the Apache Software Foundation (ASF) under one or more
##  contributor license agreements.  See the NOTICE file distributed with
##  this work for additional information regarding copyright ownership.
##  The ASF licenses this file to You 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.
##
################################################################################

set -e

# Creates a branch for the release.
# Uses the version id from gradle.properties.
# Prompts before taking actions unless "--nquery".
#
# Run from the root of the release management git clone.
#
# Prior to running this, create a new release management clone
# from the ASF git repository.  The name of the clone's directory should
# start with "mgmt-edgent" as the builtTools scripts check for that
# to help keep one on the right path, e.g.,
#
#   git clone https://git-wip-us.apache.org/repos/asf/incubator-edgent.git mgmt-edgent<version>

. `dirname $0`/common.sh

dieSuperceeded  # NOTICE THIS

setUsage "`basename $0` [--nquery]"
handleHelp "$@"

NQUERY=
if [ "$1" == "--nquery" ]; then
  NQUERY="--nquery"; shift
fi

noExtraArgs "$@"

checkEdgentSourceRootGitDie
checkUsingMgmtCloneWarn || [ ${NQUERY} ] || confirm "Proceed using this clone?" || exit

VER=`getEdgentVer gradle`
RELEASE_BRANCH=`getReleaseBranch $VER`

(set -x; git checkout -q master)
(set -x; git status)
[ ${NQUERY} ] || confirm "Proceed to create release branch ${RELEASE_BRANCH}?" || exit

echo "Creating release branch ${RELEASE_BRANCH}"
# don't just use "git push -u origin master:${RELEASE_BRANCH}" as some suggested
# to *create* the branch as that changes the local master to track the new
# remote branch. yikes.
(set -x; git checkout -b ${RELEASE_BRANCH})
(set -x; git push -u origin ${RELEASE_BRANCH}) 
