mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-06-21 22:24:32 +00:00
## Why this should be merged Closes #25 ## How this works See https://github.com/ava-labs/libevm/discussions/126. The code is in a new module to (a) avoid polluting the root `go.mod` file and (b) because `go-git` requires a newer version of Go. Unfortunately `go-git` doesn't support cherry-picking yet so a Bash script had to be used for that bit `#!/sad`. ## How this was tested Inspection of output when running `cherrypick.sh` (with `set -x` added) from the current branch. ``` ... ... + CHERRY_PICKS='2bd6bd01d2e8561dd7fc21b631f4a34ac16627a199bbbc02771e9bf2a09e69f815f6f5e4b8058d5a34b46a2f75159fb1a1dbda71839a270a353bac92e3108e4b74fb0eefec29' ... Skipping2bd6bd01d2already in history ... Cherry-picking99bbbc0277... Cherry-picking1e9bf2a09e... Cherry-picking69f815f6f5... Cherry-pickinge4b8058d5a... Cherry-picking34b46a2f75... Cherry-picking159fb1a1db... Cherry-pickingda71839a27... + git cherry-pick99bbbc02771e9bf2a09e69f815f6f5e4b8058d5a34b46a2f75159fb1a1dbda71839a27```
47 lines
1.6 KiB
Bash
Executable file
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 -Pv "^#" | 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 "${commits[@]}";
|