mirror of https://github.com/apache/cassandra
118 lines
3.0 KiB
Bash
Executable File
118 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 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 -o xtrace
|
|
set -o errexit
|
|
set -o pipefail
|
|
set -o nounset
|
|
|
|
error() {
|
|
echo -e "$*" 1>&2
|
|
exit 1
|
|
}
|
|
|
|
_usage() {
|
|
cat <<EOF
|
|
Usage: $(basename $0) (options)* (submodule)*
|
|
|
|
Options:
|
|
--jira JIRA used for development, will checkout if not done yet
|
|
-h|--help This help page
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
_is_main_branch() {
|
|
local -r name="$1"
|
|
[[ "$name" == cassandra-* ]] && return 0
|
|
[[ "$name" == "trunk" ]] && return 0
|
|
[[ "$name" == "cep-15-accord" ]] && return 0
|
|
return 1
|
|
}
|
|
|
|
_main() {
|
|
local home
|
|
home="$(git rev-parse --show-toplevel)"
|
|
cd "$home"
|
|
|
|
local branch
|
|
branch="$(git rev-parse --abbrev-ref HEAD)"
|
|
# loop over args, executing as in order of execution
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-h|--help)
|
|
_usage
|
|
;;
|
|
--jira)
|
|
if [[ "$2" != "$branch" ]]; then
|
|
git checkout -b "$2"
|
|
branch="$2"
|
|
fi
|
|
shift 2
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
while _is_main_branch "$branch" ; do
|
|
echo "Currently on $branch, which does not look like a development brarnch; what JIRA are you working on? "
|
|
read jira
|
|
if [[ ! -z "${jira:-}" ]]; then
|
|
git checkout -b "$jira"
|
|
branch="$jira"
|
|
break
|
|
fi
|
|
done
|
|
local submodules
|
|
submodules=( $(git config --file "$home"/.gitmodules --get-regexp path | awk '{ print $2 }') )
|
|
local to_change=()
|
|
if [[ $# -gt 0 ]]; then
|
|
local exists
|
|
for a in "$@"; do
|
|
exists=false
|
|
for sub in "${submodules[@]}"; do
|
|
if [[ "$sub" == "$a" ]]; then
|
|
exists=true
|
|
break
|
|
fi
|
|
done
|
|
[ "$exists" == false ] && error "git submodule $a does not exist"
|
|
to_change+=( "$a" )
|
|
done
|
|
else
|
|
for sub in "${submodules[@]}"; do
|
|
to_change+=( "$sub" )
|
|
done
|
|
fi
|
|
local submodule_branch
|
|
local name
|
|
for path in "${to_change[@]}"; do
|
|
name="$(basename "$path")"
|
|
git submodule set-url "${path}" "../cassandra-${name}.git"
|
|
git submodule set-branch --branch "${branch}" "${path}"
|
|
cd "$path"
|
|
submodule_branch="$(git rev-parse --abbrev-ref HEAD)"
|
|
if [[ "${submodule_branch}" != "${branch}" ]]; then
|
|
git checkout -b "$branch"
|
|
fi
|
|
cd -
|
|
done
|
|
}
|
|
|
|
_main "$@"
|