How can I send a pull request via command line in Bitbucket?
Asked Answered
D

5

63

I have to send a lot of pull requests, so I would rather use the bash command line than bitbucket's web interface.

Usage example: $ git-req username

Here is such a script for Github: http://pastebin.com/F9n3nPuu

Is there one for Bitbucket?

Dash answered 4/1, 2012 at 3:37 Comment(0)
F
62

Bitbucket with it's RESTful API 2.0 supports managing pull requests without interface. In CLI you can request it with CURL. This older version of the documentation has better interface details.

Get pull request data with CURL

To get full data about specific pull request:

$ curl --user s3m3n:bbpassword https://bitbucket.org/api/2.0/repositories/s3m3n/reponame/pullrequests/4

In return I get JSON with full info about my pull request #4 (put your username twice, password and reponame in command).

Create new pull request with RESTClient

To create new pull request we need to provide a lot of data with POST command, below how it looks in my RESTClient:

RESTClient Firefox

After firing Bitbucket shows pull request immediately:

Bitbucket screenshot

Create new pull request with CURL

You can still create the same pull request with one liner:

$ curl -X POST -H "Content-Type: application/json" -u s3m3n:bbpassword https://bitbucket.org/api/2.0/repositories/s3m3n/reponame/pullrequests -d '{ "title": "Merge some branches", "description": "stackoverflow example", "source": { "branch": { "name": "choose branch to merge with" }, "repository": { "full_name": "s3m3n/reponame" } }, "destination": { "branch": { "name": "choose branch that is getting changes" } }, "reviewers": [ { "username": "some other user needed to review changes" } ], "close_source_branch": false }'

REST browser tool (discontinued)

If you want to test all possible methods of API hop to REST browser tool of Bitbucket. It will show you all possible requests while returning your real repo's data.

Fer answered 17/12, 2013 at 18:51 Comment(10)
+1 Great progress! I am sure an easy-to-use command-line client will appear soon.Dash
What do you expect from such client? One line CURL to create new pull request is pretty simple, all trouble is json as POST body, but you have to pass all data somehow. How would you like to do that in other way?Fer
I would at least create an alias for the simple case git-req username.Dash
Sadly, the REST browser tool appears to have been discontinued.Shoffner
@Fer thanks a lot for your help. your doc works!! I'd like to know where did you get the documentation of detailed POST json data ? in official api doc, I can't find how to create a PR.Rheo
@Rheo it's very interesting. It seems that the new documentation is pretty bad. Look how my link at the top of answer looked like year before in web.archive.org.Fer
appreciate the curl API call to create PRs - helped me out today. a CLI tool would be nice, and maybe someone will get a chance to turn that into one....Hanforrd
Can you add attachments in any way?Opportunism
When I tried above curl request with Personal Access token, I'm getting error as XSRF Security Token Missing. Any idea on how to solve ?Lumberyard
For others stuck in authentication like me, try using -u yourusername:your_app_password. app password documentSteamheated
U
10

Tried and tested :

  1. Generate personal access token by clicking here

  2. Save the Unique token id, append it after "Bearer in header".

For example: "Authorization : Bearer MDg4MzA4NTcfhtrhthyt/Thyythyh "

Complete JSON sample here:

Step 1 to enter the details and necessary headers

  1. Try running it Step 2

  2. Output on BitBucket, You will be able to see the pull request Final output

Command Line Syntax:

curl -i -X POST    -H "Authorization:Bearer MDg4MzA4NTk/TlMSS6Ea"    -H "X-Atlassian-Token:no-check"    -H "Content-Type:application/json"    -d '{"description":"1. Changes made 2. Changes made 3. Hello hanges","closed":false,"fromRef":{"id":"refs\/heads\/branch","repository":{"name":"From Repository ","project":{"key":"ProjectName"},"slug":"From Repository "}},"state":"OPEN","title":"Merge changes from branch to master","locked":false,"reviewers":[],"open":true,"toRef":{"id":"refs\/heads\/master","repository":{"name":"RepoName","project":{"key":"ProjectName"},"slug":"RepoName"}}}'  'https://bitbucket.agile.com/rest/api/1.0/projects/projectName/repos/repoName/pull-requests'
Ungava answered 30/11, 2018 at 20:17 Comment(1)
Seems the personal access token only works with Bitbucket Server? Is there a way to do this on bitbucket.org without sending in username and password?Junejuneau
S
9

There are 2 repos on bitbucket that could help:

the Attlassian team have stash (ruby): https://bitbucket.org/atlassian/bitbucket-server-cli

Zhemao has bitbucket-cli (python): https://bitbucket.org/zhemao/bitbucket-cli

both have pull request feature from command line.

Stratocumulus answered 23/2, 2013 at 23:29 Comment(7)
Looking at Zhemao, I don't see a way to do a pull request. Was this removed since you posted the answer?Ethel
@Millisami Came here through Google looking voor the same feature and Stash seems to have it now (don't know since when).Transparency
Does this feature exists for not Stash, for Bitbucket?Costumer
@Millisami I'm afraid I jumped to conclusions. After further investigating, with bitbucket, the api seems to be in place according to this and some folks seem to be working on implementing it in bitbucket-cli.Transparency
Accepted answer contains a 404 link. Sadness.Koloski
community.atlassian.com/t5/Bitbucket-questions/…Abducent
@Hanforrd Zhemao/bitbucket-cli does provide the pull_request command since 6c50435 but it is not documented in the readme.Auction
S
8

I wasn't too satisfied with the answers in this thread, so I created an package for it:

https://www.npmjs.com/package/bitbucket-pr

Instructions:

npm i -g bitbucket-pr

... Go to folder where you want to create a pull request ...

bitbucket-pr

Scorcher answered 16/2, 2018 at 13:15 Comment(9)
Cool! How is it different from the others? What was not satisfying you?Dash
The answer from karojosh doesn't have a proper solution, and the answer from s3m3n requires too much overhead. My package just opens the browser of the pull request with pre-filled information, which is probably the fastest way of doing it.Scorcher
Great tool! this saves me a few clicks! It will be possible to give as argument the destination branch?Anglofrench
Nice that you find it useful. It will always go to the main branch of the repo, which you can change in the bitbucket settings. If you really want to have the target branch as an argument, you could do a pull request. The thing is like 5 lines of bash so should be easy to hack :)Scorcher
It would be great if you provide the source of your npm modules, that way, anyone can validate it's source code before using it, or even improving itClinical
@LuisLoboBorobia couldn't you just view the source after downloading from npm?Elboa
Yes, you can. But my previous comment reasons are still valid. And one can even contribute changes and submit Pull Request for everyone to benefit fromClinical
Any idea how to make this work with PowerShell?Fusee
Looks like this is now provided with a link (CTRL-Click) after doing a git push. remote: Create a pull request for ${branch}:Fusee
E
3

I have created a pull request cli utility to ease my tasks.

Currently,

  • it can create/delete pr's right from the terminal
  • show basic diff for a raised PR

I have tested it with bitbucket enterprise 6.10.10

Source code: https://github.com/psadi/bbcli

Edit: I have added much more features over the time (inspired from gh utility) please do check it out!!

Electrolytic answered 20/1, 2022 at 14:39 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.