#!/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 |