blob: 280c2451904cefcab30c361e2496b80a90a51d37 [file] [log] [blame]
#!/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 -e
# changes the version everywhere
# usage, e.g.: change-version.sh 0.3.0-SNAPSHOT 0.3.0-RC1
# or: change-version.sh MARKER 0.3.0-SNAPSHOT 0.3.0-RC1
[ -d .git ] || {
echo "Must run in brooklyn project root directory"
exit 1
}
if [ "$#" -eq 2 ]; then
VERSION_MARKER=BROOKLYN_VERSION
elif [ "$#" -eq 3 ]; then
VERSION_MARKER=$1_VERSION
shift;
else
echo "Usage: "$0" [VERSION_MARKER] CURRENT_VERSION NEW_VERSION"
echo " e.g.: "$0" BROOKLYN 0.3.0-SNAPSHOT 0.3.0-RC1"
exit 1
fi
# remove binaries and stuff
if [ -f pom.xml ] && [ -d target ] ; then mvn clean ; fi
VERSION_MARKER_NL=${VERSION_MARKER}_BELOW
CURRENT_VERSION=$1
NEW_VERSION=$2
# grep --exclude-dir working only in recent versions, not on all platforms, replace with find;
# skip folders named "ignored" or .xxx (but not the current folder ".");
# exclude log, war, etc. files;
# use null delimiters so files containing spaces are supported;
# pass /dev/null as the first file to search in, so the command doesn't fail if find doesn't match any files;
# add || true for the case where grep doesn't have matches, so the script doesn't halt
# If there's an error "Argument list too long" add -n20 to xargs arguments and loop over $FILE around sed
FILES=`find . -type d \( -name ignored -or -name .?\* \) -prune \
-o -type f -not \( -name \*.log -or -name '*.war' -or -name '*.min.js' -or -name '*.min.css' \) -print0 | \
xargs -0 grep -l "${VERSION_MARKER}\|${VERSION_MARKER_NL}" /dev/null || true`
FILES_COUNT=`echo $FILES | wc | awk '{print $2}'`
if [ ${FILES_COUNT} -ne 0 ]; then
# search for files containing version markers
sed -i.bak -e "/${VERSION_MARKER}/s/${CURRENT_VERSION}/${NEW_VERSION}/g" $FILES
sed -i.bak -e "/${VERSION_MARKER_NL}/{n;s/${CURRENT_VERSION}/${NEW_VERSION}/g;}" $FILES
fi
echo "Changed ${CURRENT_VERSION} to ${NEW_VERSION} for "${FILES_COUNT}" files"
echo "(Do a \`find . -name \"*.bak\" -delete\` to delete the backup files.)"