gitlabhq/gitlabhq — pull request #4363 by thomasbiddle (2013-06-20 20:01:02+00:00)
Title: Add support for creation and removal of branches and tags.

This commit takes advantage of the commit I added to gitlab-shell.

Added API endpoints for POST (Create) and DELETE (Delete, duh.) of branch
and tag resources. It takes advantage using Sidekiq to throw the actions
into a background process as Gitlab does for many other actions; however
Gitlab is setup to cache the branches and tags - So we need to expire the cache.
There's a nice existing expire_cache method in the repository model to do this.

We can run into an issue with race conditions in which the expire_cache would be called
*before* the branch was created, rendering it moot - But (Would need to double check this)
I believe many other actions expire the cache anyhow - So on any active project it
would be updated soon anyhow. I originally thought about passing along the repository
object into Sidekiq but this caused Redis to lock up entirely and until I flushed all keys
it wouldn't run any sidekiq jobs, even if I cleared them.

This is a very useful feature as personally I integrate with Gitlab and would like to create
tags and branches upon different actions when deploying to various environments (Deploy to staging -
Create a release candidate branch, deploy to prod - Create a tag)

See GitHub's API for a reference as they support a similar setup: http://developer.github.com/v3/git/refs/

Let me know if there is anything that could be improved!