go-ethereum/libevm/tooling/release/cherrypick.sh
Quentin McGaw 7b930f19b7
fix(libevm/tooling/release): small cherrypick.sh fixes (#171)
- Use grep `-E` flag instead of `-P` flag so it works on all platforms
- Add `-S` flag to `git cherry-pick` since it doesn't always sign all commits after resolving conflicts
2025-03-26 11:26:10 +01:00

47 lines
1.6 KiB
Bash
Executable file

#!/usr/bin/env bash
# Copyright 2025 the libevm authors.
#
# The libevm additions to go-ethereum are free software: you can redistribute
# them and/or modify them under the terms of the GNU Lesser General Public License
# as published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# The libevm additions are distributed in the hope that they will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with the go-ethereum library. If not, see
# <http://www.gnu.org/licenses/>.
# Usage: run `./cherrypick.sh` on a branch intended to become a release.
#
# Reads the contents of ./cherrypicks, filters out commits that are already
# ancestors of HEAD, and calls `git cherry-pick` with the remaining commit
# hashes.
set -eu;
set -o pipefail;
SELF_DIR=$(dirname "${0}")
# The format of the `cherrypicks` file is guaranteed by a test so we can use simple parsing here.
CHERRY_PICKS=$(< "${SELF_DIR}/cherrypicks" grep -Ev "^#" | awk '{print $1}')
commits=()
for commit in ${CHERRY_PICKS}; do
git merge-base --is-ancestor "${commit}" HEAD && \
echo "Skipping ${commit} already in history" && \
continue;
echo "Cherry-picking ${commit}";
commits+=("${commit}");
done
if [[ -z "${commits[*]// }" ]]; then # $x// removes whitespace
echo "No commits to cherry-pick";
exit 0;
fi
git cherry-pick -S "${commits[@]}";