summaryrefslogtreecommitdiff
path: root/script
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2018-01-12 11:02:19 +0000
committerPatrick Steinhardt <ps@pks.im>2018-01-12 11:10:00 +0000
commit0b3d85925751c2b3fd49effa50f7bd7b558b4926 (patch)
tree0fd22562b1f842c1d880aa6e31bec82497effd7a /script
parent7610638ec829ffd6da6d5f74b5b14dbb32b74924 (diff)
downloadlibgit2-0b3d85925751c2b3fd49effa50f7bd7b558b4926.tar.gz
scripts: add backporting script
This adds a simple script for backporting pull requests to older branches. It accepts as parameters a list of pull request numbers which whose commits are to be cherry-picked. The identification of PRs currently happens by using the commit message of the merge of the PR, which should conform to the message "Merge pull request #<PR>". While the heuristic works in practice, we could instead also use the direct references from GitHub via "pull/#<PR>/head". This requires the user to have all these references fetched, though, so we can just use the current heuristic until we experience any issues with that.
Diffstat (limited to 'script')
-rwxr-xr-xscript/backport.sh23
1 files changed, 23 insertions, 0 deletions
diff --git a/script/backport.sh b/script/backport.sh
new file mode 100755
index 000000000..3c2f899d6
--- /dev/null
+++ b/script/backport.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+if test $# -eq 0
+then
+ echo "USAGE: $0 <#PR> [<#PR>...]"
+ exit
+fi
+
+commits=
+
+for pr in $*
+do
+ mergecommit=$(git rev-parse ":/Merge pull request #$pr" || exit 1)
+ mergebase=$(git merge-base "$mergecommit"^1 "$mergecommit"^2 || exit 1)
+
+ commits="$commits $(git rev-list --reverse "$mergecommit"^2 ^"$mergebase")"
+done
+
+echo "Cherry-picking the following commits:"
+git rev-list --no-walk --oneline $commits
+echo
+
+git cherry-pick $commits