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