## Roadmap

This is not exactly a formal roadmap but it is a priority list of what might be implemented in future releases.  
This list is volatile.

### TODO (high priority)

* Eclipse: create plugin to enumerate repositories and delegate cloning to EGit
* Manager: support federation RPCs
* Manager: redesign ref indicators in log, search, and activity views to support multiple local branches, remote branches, and tags
* Gitblit: Serve repositories on root URL rather than /git (investigate JGit 1.2 GitFilter)

### TODO (medium priority)

* Gitblit: editable settings page in GO/WAR
* Gitblit: investigate create-repository-on-push.
    * Maybe a new user role to allow this?
    * Maybe a server setting to disable this completely?
    * Pusher/Creator becomes repository owner and can then manipulate access lists, etc?
* Gitblit: Clone Repository feature (issue 5)
    * optional scheduled pulls
    * optional automatic push to origin/remotes?
    * optional manual push to origin/remotes?
* Gitblit: Repository regex substitutions should be stored in .git/.config, not gitblit.properties

### IDEAS

* Gitblit: Re-use the EGit branch visualization table cell renderer as some sort of servlet
* Gitblit: Support personal repositories (~username/repo)
* Gitblit: diff should highlight inserted/removed fragment compared to original line
* Gitblit: implement branch permission controls as Groovy pre-receive script.  
*Maintain permissions text file similar to a gitolite configuration file or svn authz file.*
* Gitblit: Consider creating more Git model objects and exposing them via the JSON RPC interface to allow inspection/retrieval of Git commits, Git trees, etc from Gitblit.
* Gitblit: Blame coloring by author (issue 2)
