Pulley: Easy Github Pull Request Landing

I’ve created a simple tool for landing pull requests from Github, which I’m calling “Pulley“.

Landing a pull request from Github can be annoying. You can follow the instructions provided by Github (pulling the code, doing a merge) but that’ll result in a messy commit stream and external ticket trackers that don’t automatically close tickets. The series of commands that you run will typically look something like this:

git checkout -b branchname master
git pull http://url/to/otherrepo branchname
git checkout master
git merge branchname
git push origin master

Additionally you can pull the code and squash it down into a single commit, which lets you format the commit nicely (closing tickets on external trackers) – but it fails to properly close the pull request. The commands for which look something like this:

git checkout master
git checkout -b bug1234
git pull http://url/to/otherrepo branchname
git checkout master
git merge --no-commit --squash bug1234
git commit -a --author="Original Author "

# To get the author:
git log | grep "Author" | head -1

Pulley is a tool that uses the best aspects of both techniques. Pull requests are pulled and merged into your project. The code is then squashed down into a single commit and nicely formatted with appropriate bug numbers and links. Finally the commit is pushed and the pull request is closed with a link to the commit.

Pulley is written using Node.js – thus you’ll need to make sure that you have Node installed prior to running it.

How to use:

Download a copy of Pulley or install it via npm: npm install pulley and configure the repo and bug tracker details in the pulley.js file (this is only necessary if you use a custom, non-Github, issue tracker).

You’ll also need to set up your Github username and token into your Git repo. More details can be found in the Github docs.

Once that’s complete you can run the following command:

node pulley.js PID # Where PID is the Pull Request ID

For example running the command node pulley.js 332 on the jQuery repo yielded the following closed pull request, commit, and tickets:

The configuration is still a bit janky but it works well enough for me – I’m looking forward to landing a few pull requests to improve it.

Posted: April 21st, 2011

Subscribe for email updates

17 Comments (Show Comments)

Comments are closed.
Comments are automatically turned off two weeks after the original post. If you have a question concerning the content of this post, please feel free to contact me.

Secrets of the JavaScript Ninja

Secrets of the JS Ninja

Secret techniques of top JavaScript programmers. Published by Manning.

John Resig Twitter Updates

@jeresig / Mastodon

Infrequent, short, updates and links.