#!/bin/bash set -ex function usage() { echo "$0 [-s][-b] " && exit 1; } sync="" branch="" while getopts 'sb' FLAG; do case ${FLAG} in s) sync="sync" ;; b) branch="branch" ;; ?) echo "unknown flag." usage ;; esac done shift $((OPTIND-1)) if [ $# != 1 ]; then echo "Requires exactly 1 positional argument (bug number)." usage fi bug_number="$1" if [ "$sync" = "sync" ] then read -p "This script will sync your crosvm project. Do you wish to proceed? [y/N]" -n 1 -r if [[ ! $REPLY =~ ^[Yy]$ ]] then exit 1; fi fi if [ -z $ANDROID_BUILD_TOP ]; then echo "forgot to source build/envsetup.sh?" && exit 1; fi cd $ANDROID_BUILD_TOP/external/crosvm if [[ ! -z $(git branch --list merge) && ! "$branch" = "branch" ]]; then echo "branch merge already exists. Forgot to clean up?" && exit 1; fi # needed in 'install-deps', but timeout is too tight still sometimes sudo echo Sudo prepared. rustup update # TODO: sometimes we want to sync the entire tree, and sometimes we only # want to fetch upstream. Should we have independent options? if [ "$sync" = "sync" ] then repo sync -c -j96 git fetch aosp upstream-main fi source $ANDROID_BUILD_TOP/build/envsetup.sh m blueprint_tools cargo_embargo crosvm if [ ! "$branch" = "branch" ]; then repo start merge; fi git merge --log aosp/upstream-main --no-edit OLD_MSG=$(git log --format=%B -n1) git commit --amend -m "$OLD_MSG Bug: $bug_number Test: TH" $ANDROID_BUILD_TOP/external/crosvm/tools/deps/install-x86_64-other $ANDROID_BUILD_TOP/external/crosvm/android-fork-stats.sh # continue if the merge was clean ./android-merge-2-cargo-embargo.sh git commit --amend -a --no-edit # TODO: add more automated local tests/run host tests? m crosvm repo upload . $(cat OWNERS.android | grep @google | sed 's/^/--re=/')