34 lines
639 B
Bash
Executable file
34 lines
639 B
Bash
Executable file
#!/bin/bash
|
|
set -euo pipefail
|
|
IFS=$'\n\t'
|
|
|
|
print_error() {
|
|
echo "Error: \`$1\` is not a valid commit. To debug, run:"
|
|
echo
|
|
echo " git rev-parse --verify $1"
|
|
echo
|
|
}
|
|
|
|
full_sha() {
|
|
git rev-parse \
|
|
--verify \
|
|
--quiet \
|
|
"$1^{object}" || print_error $1
|
|
}
|
|
|
|
commit_message_with_backport_note() {
|
|
message=$(git log --format=%B -n 1 $1)
|
|
echo $message | awk "NR==1{print; print \"\n(backport-of: $1)\"} NR!=1"
|
|
}
|
|
|
|
cherry_pick_commit() {
|
|
sha=$(full_sha $1)
|
|
git cherry-pick $sha > /dev/null
|
|
git commit \
|
|
--amend \
|
|
--file <(commit_message_with_backport_note $sha)
|
|
}
|
|
|
|
for arg ; do
|
|
cherry_pick_commit $arg
|
|
done
|