SINCE 1.5.0
Gitblit supports extending and enhancing the core functionality through plugins. This mechanism is very young and incomplete with few extension points, but you can expect it to evolve rapidly in upcoming releases.
The existing plugin mechanism is based on pf4j. Plugins are distributed as zip files and may include their runtime dependencies or may rely on the bundled dependencies of other plugins and/or Gitblit core.
The zip plugins are stored in ${baseFolder}/plugins
and are unpacked on startup into folders of the same name.
A plugin defines it's metadata in the META-INF/MANIFEST.MF file:
Plugin-Class: com.gitblit.plugin.powertools.Powertools
Plugin-Dependencies:
Plugin-Id: com.gitblit.plugin:powertools
Plugin-Provider: James Moger
Plugin-Version: 1.1.0
In addition to extending Gitblit core, plugins can also define extension points that may be implemented by other plugins. Therefore a plugin may depend on other plugins.
Plugin-Dependencies: foo, bar
NOTE:
The pf4j plugin framework relies on a javac apt processor to generate compile-time extension information, so be sure to enable apt processing in your build process.
Administrators may manage plugins through the plugin
SSH dispatch command:
ssh host plugin
Through this command interface plugins can be started, stopped, disabled, enabled, installed, uninstalled, listed, etc.
Gitblit provides a simple default registry of plugins. The registry is a JSON file and it lists plugin metadata and download locations.
plugins.registry = http://plugins.gitblit.com/plugins.json
The registry is currently hosted in a Git repository on Github. This git repository is also a Maven-compatible repository, which hosts some plugin binaries.
If you develop your own plugins that you want hosted by or linked in the default registry, open pull request for the registry repository. Any contributed binaries hosted in this repository must have Maven metadata and the SHA-1 & MD5 checksums. By default, Gitblit enforces checksum validation on all downloads.
The plugins.json
file is parameterized with the ${self}
placeholder. This parameter is substituted on download with with the source URL of the registry file. This allows you to clone and serve your own copy of this git repository or just server your own plugins.json
on your own network.
Gitblit also supports loading multiple plugin registries. Just place another properly formatted .json
file in ${baseFolder}/plugins
and Gitblit will load that as an additional registry.
You can provide your own custom SSH commands by extending the DispatchCommand class.
For some examples of how to do this, please see:
gitblit-cookbook-plugin (Maven project)
gitblit-powertools-plugin (Ant/Moxie project)
You can provide your own custom pre and/or post receive hooks by extending the ReceiveHook class.
import com.gitblit.extensions.ReceiveHook;
import java.util.Collection;
import org.eclipse.jgit.transport.ReceiveCommand;
import ro.fortsoft.pf4j.Extension;
@Extension
public class MyReceiveHook extends ReceiveHook {
@Override
public void onPreReceive(GitblitReceivePack receivePack, Collection<ReceiveCommand> commands) {
}
@Override
public void onPostReceive(GitblitReceivePack receivePack, Collection<ReceiveCommand> commands) {
}
}
You can provide your own custom patchset hook by extending the PatchsetHook class.
import com.gitblit.extensions.PatchsetHook;
import com.gitblit.models.TicketModel;
import ro.fortsoft.pf4j.Extension;
@Extension
public class MyPatchsetHook extends PatchsetHook {
@Override
public void onNewPatchset(TicketModel ticket) {
}
@Override
public void onUpdatePatchset(TicketModel ticket) {
}
@Override
public void onMergePatchset(TicketModel ticket) {
}
}
You can provide your own custom ticket hook by extending the TicketHook class.
import com.gitblit.extensions.TicketHook;
import com.gitblit.models.TicketModel;
import com.gitblit.models.TicketModel.Change;
import ro.fortsoft.pf4j.Extension;
@Extension
public class MyTicketHook extends TicketHook {
@Override
public void onNewTicket(TicketModel ticket) {
}
@Override
public void onUpdateTicket(TicketModel ticket, Change change) {
}
}
Gitblit's core SSH commands and those in the powertools plugin rely on use of ANSI border characters to provide a pretty presentation of data. Unfortunately, the fonts provided by Apple - while very nice - don't work well with ANSI border characters. The following public domain fixed-width, fixed-point, bitmapped fonts work very nicely. I find the 6x12 font with a line spacing of ~0.8 to be quite acceptable.