You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.6 KiB
97 lines
2.6 KiB
#!/bin/sh
|
|
|
|
set -efu
|
|
|
|
# the list of files that need to have the version updated in them
|
|
#
|
|
# limitations:
|
|
# * no newlines in names
|
|
# * no ' char in names
|
|
files="
|
|
README.md
|
|
kotlinx-coroutines-core/README.md
|
|
kotlinx-coroutines-debug/README.md
|
|
kotlinx-coroutines-test/README.md
|
|
ui/coroutines-guide-ui.md
|
|
gradle.properties
|
|
integration-testing/gradle.properties
|
|
"
|
|
|
|
# read gradle.properties to get the old version
|
|
set +e
|
|
old_version="$(git grep -hoP '(?<=^version=).*(?=-SNAPSHOT$)' gradle.properties)"
|
|
set -e
|
|
if [ "$?" -ne 0 ]
|
|
then
|
|
echo "Could not read the old version from gradle.properties." >&2
|
|
if [ "$#" -ne 2 ]
|
|
then
|
|
echo "Please use this form instead: ./bump-version.sh old_version new_version"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# check the command-line arguments for mentions of the version
|
|
if [ "$#" -eq 2 ]
|
|
then
|
|
echo "If you want to infer the version automatically, use the form: ./bump-version.sh new_version" >&2
|
|
if [ -n "$old_version" -a "$1" != "$old_version" ]
|
|
then
|
|
echo "The provided old version ($1) is different from the one in gradle.properties ($old_version)." >&2
|
|
echo "Proceeding anyway with the provided old version." >&2
|
|
fi
|
|
old_version=$1
|
|
new_version=$2
|
|
elif [ "$#" -eq 1 ]
|
|
then
|
|
new_version=$1
|
|
else
|
|
echo "Use: ./bump-version.sh new_version" >&2
|
|
exit 1
|
|
fi
|
|
|
|
|
|
# Escape dots, e.g. 1.0.0 -> 1\.0\.0
|
|
escaped_old_version="$(printf "%s\n" "$old_version" | sed 's/[.]/\\./g')"
|
|
|
|
update_version() {
|
|
file=$1
|
|
to_undo=$2
|
|
echo "Updating version from '$old_version' to '$new_version' in $1" >&2
|
|
if [ -n "$(git diff --name-status -- "$file")" ]
|
|
then
|
|
printf "There are unstaged changes in '$file'. Refusing to proceed.\n" >&2
|
|
[ -z "$to_undo" ] || eval "git checkout$to_undo"
|
|
exit 1
|
|
fi
|
|
sed -i.bak "s/$escaped_old_version/$new_version/g" "$file"
|
|
rm -f "$1.bak"
|
|
}
|
|
|
|
to_undo=$(printf "%s" "$files" | while read -r file; do
|
|
if [ -n "$file" ]
|
|
then
|
|
update_version "$file" "${to_undo:-}"
|
|
to_undo="${to_undo:-} '$file'"
|
|
echo -n " '$file'"
|
|
fi
|
|
done)
|
|
|
|
set +e
|
|
version_mentions=$(
|
|
find . -type f \( -iname '*.properties' -o -iname '*.md' \) \
|
|
-not -iname CHANGES.md -not -iname CHANGES_UP_TO_1.7.md \
|
|
-not -path ./integration/kotlinx-coroutines-jdk8/README.md \
|
|
-exec git grep --fixed-strings --word "$old_version" {} +
|
|
)
|
|
set -e
|
|
if [ -z "$version_mentions" ]
|
|
then
|
|
echo "Done. To undo, run this command:" >&2
|
|
printf "git checkout%s\n" "$to_undo" >&2
|
|
else
|
|
echo "ERROR: Previous version is present in the project: $version_mentions"
|
|
[ -z "$to_undo" ] || eval "git checkout$to_undo"
|
|
exit 1
|
|
fi
|