--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pull-request.sh Sun Jun 08 17:00:52 2014 +0300 @@ -0,0 +1,93 @@ +#!/bin/bash +hg log -r tip >/dev/null || exit 1 + +if [ -z "$(which curl)" ] +then + echo "no curl installed" >/dev/stderr + exit 1 +fi + +upstream=$(hg paths upstream |rev |cut -d '/' -f 1,2 |rev) + +if [ -z "$upstream" ] +then + echo "cannot find upstream! Please set the 'upstream' path in .hg/hgrc" >/dev/stderr + exit 1 +fi + +echo "upstream is $upstream" + +allheads=$(hg heads --template '{node}@{parents}\n' |sed 's@ @#@g') +i=0 + +for head in $allheads +do + if [ "$(echo $head |sed 's@#@ @g' |wc -w)" -le "1" ] + then + heads="${heads}$(echo $head |cut -f 1 -d '@') " + fi +done + +numheads=$(echo $heads |wc -w) + +echo "There are $numheads non-merge heads:" + +for head in $heads +do + let i+=1 + bookmarksblurb="" + tmpfile=$(tempfile) + hg log -r $head --template '{bookmarks}\n{desc}\n' >$tmpfile + bookmarks=$(head -n1 $tmpfile) + title=$(tail -n1 $tmpfile) + rm $tmpfile + + if [ -n "$bookmarks" ] + then + bookmarksblurb=" [${bookmarks}]" + fi + + echo "[${i}] $(echo $head |head -c 8)${bookmarksblurb}: $title" +done + +head_index=-1 +while [ "$head_index" -le "0" -o "$head_index" -gt "$numheads" ] +do + echo -n "Which head? " + read head_index +done + +head=$(echo $heads |cut -d ' ' -f $head_index) +title=$(hg log -r ${head} -r tip --template '{desc}')yy +source_repo=$(hg paths default |rev |cut -d '/' -f 1,2 |rev) + +while [ "$(echo $title |wc -c)" -gt "255" ] +do + echo "Pull request title is too long, please input a new title" + echo -n "new title: " + read title +done + +echo "Requesting pull of $head" + +json=$(cat ~/.bin/pullreq_template.json \ + |sed "s@{{TITLE}}@${title}@" \ + |sed "s@{{SOURCE_REPO}}@${source_repo}@" \ + |sed "s@{{HEAD}}@${head}@") + +jsonfile=$(tempfile) +echo $json >$jsonfile + +echo -n "Username: " +read username +echo -n "Password: " +read -s password +echo + +response=$(tempfile) + +curl -X POST -H "Content-Type: application/json" -u "${username}:${password}" \ + "https://api.bitbucket.org/2.0/repositories/${upstream}/pullrequests" -d "$json" -o "$response" >/dev/stdout 2>&1 + +echo "repsonse: $response" +rm $jsonfile