crosvm/tools/chromeos/create_merge
Dennis Kempin eb962a6993 create_merge: Add BUG= lines into merge commit message
This will trigger the usual gerrit automation to notify the bugs
about the merge being submitted, which will help identify when
fixes have landed in chromeos.

BUG=b:219743659
TEST=./tools/chromeos/create_merge

Change-Id: I6365f3c5596a94a6990caf1e1733e8040e5e8fff
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3469495
Reviewed-by: Noah Gold <nkgold@google.com>
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Dennis Kempin <denniskempin@google.com>
2022-02-17 19:11:03 +00:00

106 lines
2.4 KiB
Bash
Executable file

#!/bin/bash
# Copyright 2021 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Script to create a commit to merge cros/main into cros/chromeos with a useful
# commit message.
#
# Basic usage to upload a merge to gerrit:
#
# $ repo start uprev .
# $ ./tools/chromeos/create_merge
# $ git push cros HEAD:refs/for/chromeos
#
# To merge with a specific commit, use: ./tools/chromeos/create_merge $SHA
set -e
if [ "$1" == "--dry-run-only" ]; then
DRY_RUN_ONLY=true
shift
fi
LOCAL_BRANCH=$(git branch --show-current)
REMOTE_NAME=$(git config "branch.${LOCAL_BRANCH}.remote")
URL=$(git remote get-url "${REMOTE_NAME}")
DEFAULT_TARGET="${REMOTE_NAME}/main"
MERGE_TARGET="${1:-${DEFAULT_TARGET}}"
commit_list() {
git log --oneline --decorate=no --no-color "HEAD..${MERGE_TARGET}"
}
prerequisites() {
if [[ -e "${LOCAL_BRANCH}" ]] ||
[[ -e "${REMOTE_NAME}" ]] ||
[[ -e "${URL}" ]]; then
echo "This script requires the local repository to be on" \
"a tracking branch."
exit 1
fi
if [[ -n $(git status -s) ]]; then
echo "Working directory is not clean:"
git status -s
exit 1
fi
if [[ -z "$(commit_list)" ]]; then
echo "Nothing to merge."
exit 0
fi
}
cq_depends() {
git log --no-color "HEAD..${MERGE_TARGET}" --pretty=email |
grep ^Cq-Depend: |
sort -u
}
bug_references() {
git log --no-color "HEAD..${MERGE_TARGET}" --pretty=email |
grep ^BUG= |
grep -vi ^BUG=none |
sort -u
}
merge_message() {
local old=$(git rev-parse HEAD)
local new=$(git rev-parse "${MERGE_TARGET}")
local count=$(commit_list | wc -l)
local notes="$(date +%F)"
if [[ -n "$(cq_depends)" ]]; then
notes="${notes}, cq-depend"
fi
if [ "${DRY_RUN_ONLY}" = true ]; then
echo "Merge dry run (${notes})"
else
echo "Merge ${count} commits from ${MERGE_TARGET} (${notes})"
fi
echo ""
commit_list
echo ""
echo "${URL}/+log/${old}..${new}"
echo ""
if [ "${DRY_RUN_ONLY}" != true ]; then
bug_references
fi
echo "TEST=CQ"
echo ""
cq_depends
if [ "${DRY_RUN_ONLY}" = true ]; then
echo "Commit: false"
fi
}
main() {
prerequisites
git merge --no-ff "${MERGE_TARGET}" -m "$(merge_message)"
git --no-pager log -n 1
}
main