| #!/bin/bash -ex |
| # |
| # Copyright 2023 Google Inc. All rights reserved. |
| # |
| # 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. |
| |
| # Update between branches, to a new major version. |
| |
| cd `dirname ${BASH_SOURCE[0]}`/.. |
| |
| if [ -z ${1+x} ]; then |
| echo "Usage: update-major-version.sh <upstream tag>" |
| exit 1 |
| fi |
| NEW_VERSION=$1 |
| NEW_VERSION_SHORT=${NEW_VERSION#upstream-} |
| CURRENT_VERSION=upstream-$(grep 'version:' METADATA | grep -E -o 'v[0-9][^"]+') |
| CURRENT_HEAD=$(git rev-parse HEAD) |
| echo "Updating from $CURRENT_VERSION to $NEW_VERSION" |
| |
| ADDED_FILES=$(git diff --name-only --diff-filter=A $CURRENT_VERSION HEAD | sort) |
| CHANGED_FILES=$(git diff --name-only --diff-filter=a $CURRENT_VERSION HEAD | sort) |
| |
| PATCHFILE=$(mktemp --suffix=.patch) |
| trap "rm -f $PATCHFILE" EXIT |
| |
| git diff --patch $CURRENT_VERSION HEAD -- $CHANGED_FILES > $PATCHFILE |
| |
| git merge --no-commit -s ours $NEW_VERSION |
| git restore --staged --worktree --source=$NEW_VERSION -- . |
| git restore --staged --worktree --source=$CURRENT_HEAD -- $ADDED_FILES |
| patch -p1 < $PATCHFILE |
| git add $CHANGED_FILES |
| sed -i -e "s/\(version: \"\)v[0-9][^\"]*/\1$NEW_VERSION_SHORT/" METADATA |
| git add METADATA |
| |
| NEW_ADDED_FILES=$(git diff --name-only --diff-filter=A --staged $NEW_VERSION | sort) |
| if [ "$ADDED_FILES" != "$NEW_ADDED_FILES" ] ; then |
| echo "Added files don't match" |
| exit 1 |
| fi |
| |
| NEW_CHANGED_FILES=$(git diff --name-only --diff-filter=a --staged $NEW_VERSION | sort) |
| if [ "$CHANGED_FILES" != "$NEW_CHANGED_FILES" ] ; then |
| echo "Changed files don't match" |
| exit 1 |
| fi |