Skip to content

Instantly share code, notes, and snippets.

@aikar
Created October 9, 2018 00:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aikar/5d1eda9a9db09126dc5fb124c4b5c076 to your computer and use it in GitHub Desktop.
Save aikar/5d1eda9a9db09126dc5fb124c4b5c076 to your computer and use it in GitHub Desktop.
#!/bin/bash
if [ -z "$1" ]; then
echo "$0 <prID>"
exit 1;
fi
repo=$(git remote get-url origin | sed -E 's/github.com(:|\/)//g')
data=$(curl -q https://api.github.com/repos/$repo/pulls/$1 2>/dev/null)
url=$(echo -e "$data" | grep --color=none ssh_url | head -n 1 |awk '{print $2}' | sed 's/"//g' | sed 's/,//g')
ref=$(echo -e "$data" | grep --color=none '"head":' -A 3 | grep ref | head -n 1 |awk '{print $2}' | sed 's/"//g' | sed 's/,//g')
prevbranch=$(\git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
branch="pr/$1"
up="pr-$1"
git remote remove $up 2>&1 1>/dev/null
git remote add -f $up $url
git branch -D $branch 2>/dev/null 1>&2
git checkout -b $branch $up/$ref 2>/dev/null|| true
echo "Merging $prevbranch into $branch"
git fetch origin
git merge origin/$prevbranch
echo "Dropping to new shell, exit to delete the refs"
bash -i
read -p "Press 'p' to push. " -n 1 -r >&2
echo
if [[ "d$REPLY" =~ ^d[Pp]$ ]]; then
git push $up $branch:$ref -f
echo "Pushed" >&2
fi
echo "Deleting branch/upstream"
git checkout $prevbranch
git branch -D $branch
git remote remove $up
git gc
#git branch -u $up/$ref $branch
#git checkout $branch
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment