pull-request.sh

changeset 3
b328fdc09692
parent 0
9a7158f91b97
child 4
7c02e457e6ab
equal deleted inserted replaced
1:9eaddccce1ce 3:b328fdc09692
5 then 5 then
6 echo "no curl installed" >/dev/stderr 6 echo "no curl installed" >/dev/stderr
7 exit 1 7 exit 1
8 fi 8 fi
9 9
10 # Get path to this script
11 pushd `dirname $0` >/dev/null
12 selfpath=`pwd`
13 popd >/dev/null
14
15 # What's the upstream?
16 # TODO: can this be dynamically retrieved from bitbucket?
10 upstream=$(hg paths upstream |rev |cut -d '/' -f 1,2 |rev) 17 upstream=$(hg paths upstream |rev |cut -d '/' -f 1,2 |rev)
11 18
12 if [ -z "$upstream" ] 19 if [ -z "$upstream" ]
13 then 20 then
14 echo "cannot find upstream! Please set the 'upstream' path in .hg/hgrc" >/dev/stderr 21 echo "cannot find upstream! Please set the 'upstream' path in .hg/hgrc" >/dev/stderr
15 exit 1 22 exit 1
16 fi 23 fi
17 24
18 echo "upstream is $upstream" 25 echo "upstream is $upstream"
19 26
27 # Get all heads and filter merges out since we don't generally want to post
28 # pull requests for those.
20 allheads=$(hg heads --template '{node}@{parents}\n' |sed 's@ @#@g') 29 allheads=$(hg heads --template '{node}@{parents}\n' |sed 's@ @#@g')
21 i=0 30 i=0
22 31
23 for head in $allheads 32 for head in $allheads
24 do 33 do
26 then 35 then
27 heads="${heads}$(echo $head |cut -f 1 -d '@') " 36 heads="${heads}$(echo $head |cut -f 1 -d '@') "
28 fi 37 fi
29 done 38 done
30 39
40 if [ -z "$heads" ]
41 then
42 echo "No non-merge heads. Nothing to do."
43 exit 0
44 fi
45
31 numheads=$(echo $heads |wc -w) 46 numheads=$(echo $heads |wc -w)
32 47
48 # Ask the user which head to request pull of. We do this even if there is just
49 # one head, to give the user a chance to review exactly what is being submitted.
33 echo "There are $numheads non-merge heads:" 50 echo "There are $numheads non-merge heads:"
34 51
35 for head in $heads 52 for head in $heads
36 do 53 do
37 let i+=1 54 let i+=1
55 do 72 do
56 echo -n "Which head? " 73 echo -n "Which head? "
57 read head_index 74 read head_index
58 done 75 done
59 76
77 # Data for the pull request
60 head=$(echo $heads |cut -d ' ' -f $head_index) 78 head=$(echo $heads |cut -d ' ' -f $head_index)
61 title=$(hg log -r ${head} -r tip --template '{desc}')yy 79 title=$(hg log -r ${head} -r tip --template '{desc}')
62 source_repo=$(hg paths default |rev |cut -d '/' -f 1,2 |rev) 80 source_repo=$(hg paths default |rev |cut -d '/' -f 1,2 |rev)
63 81
64 while [ "$(echo $title |wc -c)" -gt "255" ] 82 while [ "$(echo $title |wc -c)" -gt "255" ]
65 do 83 do
66 echo "Pull request title is too long, please input a new title" 84 echo "Pull request title is too long, please input a new title"
68 read title 86 read title
69 done 87 done
70 88
71 echo "Requesting pull of $head" 89 echo "Requesting pull of $head"
72 90
73 json=$(cat ~/.bin/pullreq_template.json \ 91 # Get the JSON template and fill in the values
92 json=$(cat $selfpath/pullrequest_template.json \
74 |sed "s@{{TITLE}}@${title}@" \ 93 |sed "s@{{TITLE}}@${title}@" \
75 |sed "s@{{SOURCE_REPO}}@${source_repo}@" \ 94 |sed "s@{{SOURCE_REPO}}@${source_repo}@" \
76 |sed "s@{{HEAD}}@${head}@") 95 |sed "s@{{HEAD}}@${head}@")
77 96
78 jsonfile=$(tempfile) 97 # Get bitbucket credentials
79 echo $json >$jsonfile
80
81 echo -n "Username: " 98 echo -n "Username: "
82 read username 99 read username
83 echo -n "Password: " 100 echo -n "Password: "
84 read -s password 101 read -s password
85 echo 102 echo
86 103
87 response=$(tempfile) 104 response=$(tempfile)
88 105
106 # Post the pull request.
89 curl -X POST -H "Content-Type: application/json" -u "${username}:${password}" \ 107 curl -X POST -H "Content-Type: application/json" -u "${username}:${password}" \
90 "https://api.bitbucket.org/2.0/repositories/${upstream}/pullrequests" -d "$json" -o "$response" >/dev/stdout 2>&1 108 "https://api.bitbucket.org/2.0/repositories/${upstream}/pullrequests" -d "$json" -o "$response" >/dev/stdout 2>&1
91 109
92 echo "repsonse: $response" 110 echo "response JSON: $response"
93 rm $jsonfile

mercurial