summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorTom Hughes <tomhughes@chromium.org>2020-03-04 13:17:37 -0800
committerCommit Bot <commit-bot@chromium.org>2020-03-07 03:33:12 +0000
commitac116965e0cf0e828a9ca203882ddb02be273faa (patch)
treecf55d46c134293058bd0c1855f0416245dc1c9b8 /util
parentc015cff5060e8e113780245bee601eb03afcb602 (diff)
downloadchrome-ec-ac116965e0cf0e828a9ca203882ddb02be273faa.tar.gz
util: Add script to update release branch from master
Currently this script is specific to the fingerprint release branch process, but can be easily generalized to other ECs. See http://go/cros-fingerprint-firmware-branching-and-signing. BRANCH=none BUG=none TEST=./util/update_release_branch.sh Change-Id: I66087190754c789387a6537b69a026c81f93ead0 Signed-off-by: Tom Hughes <tomhughes@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2088602 Reviewed-by: Craig Hesling <hesling@chromium.org>
Diffstat (limited to 'util')
-rwxr-xr-xutil/update_release_branch.sh95
1 files changed, 95 insertions, 0 deletions
diff --git a/util/update_release_branch.sh b/util/update_release_branch.sh
new file mode 100755
index 0000000000..4013c75ee3
--- /dev/null
+++ b/util/update_release_branch.sh
@@ -0,0 +1,95 @@
+#!/bin/bash
+
+# Copyright 2020 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.
+
+# Tool to merge master branch into a release branch. Currently specific to the
+# fingerprint sensor, but can easily be generalized. See
+# http://go/cros-fingerprint-firmware-branching-and-signing.
+
+. /usr/share/misc/shflags
+
+DEFINE_string 'board' "bloonchipper" 'EC board (FPMCU) to update' 'b'
+
+# Process commandline flags.
+FLAGS "${@}" || exit 1
+eval set -- "${FLAGS_ARGV}"
+
+set -e
+
+# Dereference symlinks so "git log" works as expected.
+readonly BOARD_DIR="$(realpath --relative-to=. "board/${FLAGS_board}")"
+readonly RELEVANT_PATHS=(
+ "${BOARD_DIR}"
+ common/fpsensor
+ docs/fingerprint
+ driver/fingerprint
+ util/getversion.sh
+)
+readonly RELEASE_BRANCH="firmware-fpmcu-${FLAGS_board}-release"
+
+get_relevant_commits_cmd() {
+ local head="${1}"
+ local merge_head="${2}"
+ local format="${3}"
+
+ local relevant_commits_cmd="git log ${format} ${head}..${merge_head}"
+ relevant_commits_cmd+=" -- ${RELEVANT_PATHS[*]}"
+ echo "${relevant_commits_cmd}"
+}
+
+git_commit_msg() {
+ local branch="${1}"
+ local head="${2}"
+ local merge_head="${3}"
+
+ local relevant_commits_cmd
+ local relevant_commits
+ local relevant_bugs_cmd
+ local relevant_bugs
+
+ relevant_commits_cmd="$(get_relevant_commits_cmd "${head}" \
+ "${merge_head}" "--oneline")"
+ relevant_commits="$(${relevant_commits_cmd})"
+ relevant_bugs_cmd="$(get_relevant_commits_cmd "${head}" \
+ "${merge_head}" "")"
+ relevant_bugs="$(${relevant_bugs_cmd} | \
+ pcregrep -o1 'BUG=(.*)' | pcregrep -v none | \
+ tr ' ' '\n' | tr ',' '\n' | \
+ sort | uniq | xargs)"
+
+ cat <<HEREDOC
+Merge remote-tracking branch 'm/master' into ${branch}
+
+Relevant changes:
+
+${relevant_commits_cmd}
+
+${relevant_commits}
+
+BRANCH=none
+BUG=${relevant_bugs}
+TEST=test_that --board <board> <IP> suite:fingerprint
+HEREDOC
+}
+
+merge_master() {
+ git remote update
+ git checkout -B "${RELEASE_BRANCH}" "cros/${RELEASE_BRANCH}"
+ git merge --no-ff --no-commit m/master
+
+ local branch
+ local head
+ local merge_head
+
+ branch="$(git rev-parse --abbrev-ref HEAD)"
+ head="$(git rev-parse --short HEAD)"
+ merge_head="$(git rev-parse --short MERGE_HEAD)"
+
+ git commit --signoff -m "$(git_commit_msg "${branch}" \
+ "${head}" "${merge_head}")"
+ git commit --amend
+}
+
+merge_master