Skip to content

Commit

Permalink
Merge pull request #5925 from jekyll/backport-pr
Browse files Browse the repository at this point in the history
Merge pull request 5925
  • Loading branch information
jekyllbot committed Mar 7, 2017
2 parents bfb6341 + 67a7c22 commit 44c35dc
Showing 1 changed file with 81 additions and 0 deletions.
81 changes: 81 additions & 0 deletions script/backport-pr
@@ -0,0 +1,81 @@
#!/usr/bin/env bash
# This script is pulled from https://github.com/git-lfs/git-lfs/blob/master/script/backport-pr
# Many thanks, git-lfs team!
#
# Backports a PR into a release branch:
#
# # backport PR #1023 into 1.1-stable-backport-1023
# $ git checkout master
# $ git pull
# $ script/backport-pr 1.1 1023

usage() {
echo "usage: $0 <minor-release-version> <pull-number>"
echo "example: $0 3.4 5623"
}

if test -z "$1"; then
echo "fatal: no minor release version, e.g. '3.4'" > /dev/stderr
usage
exit 1
fi

if test -z "$2"; then
echo "fatal: no pull request number, e.g. '5623'" > /dev/stderr
usage
exit 1
fi

relversion="v$1.x"
relbranch="$1-stable"
pr="$2"
prbranch="$relbranch-backport-$pr"
pullsurl="https://api.github.com/repos/jekyll/jekyll/pulls"
prurl="https://api.github.com/repos/jekyll/jekyll/pulls/$pr"
prjson="$(curl -n $pullsurl/$pr 2>/dev/null)"
headref="$(echo $prjson | jq -r -e ".head.ref")"
[ "$?" -ne 0 ] && {
echo "PR #$pr is invalid."
exit 1
}
prtitle="$(echo $prjson | jq -r ".title" | sed "s/\"/'/g")"

git checkout -q -f $relbranch
git clean -q -fdx
git pull -q
git checkout -q -f -B $prbranch

commit=`git log -1 --pretty=%H "--grep=Merge pull request #$pr" "--grep=Merge branch '.*$headref'" master`

echo "Backporting:\n"

git log -1 $commit

conflicts=""

git cherry-pick -x --allow-empty -m1 $commit &> /dev/null || {
unmerged=$(git ls-files --unmerged --stage | cut -f 2 -d$'\t' | uniq)
conflicts="\n\nConflicting files:"
for file in $unmerged; do
git add "$file"
conflicts="$conflicts\n- $file"
done
git commit -q --no-edit
}

commitmsg="Backport $headref from #$pr to $relbranch"
if [ "$conflicts" ]; then
commitmsg="$commitmsg [merge conflicts]"
fi

git commit -q --allow-empty --amend -m "$commitmsg"
git push -q -f origin $prbranch
git checkout -q -f $relbranch
git branch -q -D $prbranch

curl -in $pullsurl -d "{
\"title\": \"Backport #$pr for $relversion: $prtitle\",
\"head\": \"$prbranch\",
\"base\": \"$relbranch\",
\"body\": \"This backports #$pr.$conflicts\"
}" 2>/dev/null

0 comments on commit 44c35dc

Please sign in to comment.