如何通过EGit / JGit插件为Git事件创建一个监听器?

时间:2011-10-27 14:54:49

标签: eclipse-plugin listener egit jgit

我一直在使用Subclipse API为Eclipse创建一个插件,用于侦听通过Subclipse插件发生的Subversion事件。我基本上实现了一个监听器接口,然后在运行时通知接收事件。

我想做类似的事情,但对于Git。在使用其他插件时,似乎EGit(基于JGit构建)将是最佳选择。我对他们的API没有多少经验。我想知道是否有人知道EGit或底层JGit是否有类似的API接口来监听Git事件(例如提交,推送,拉取等)?

谢谢!

2 个答案:

答案 0 :(得分:6)

您可以通过以下方法通过JGit为所有存储库或单个存储库注册侦听器:

通知所有存储库的全局侦听器:

org.eclipse.jgit.lib.Repository.getGlobalListenerList().addIndexChangedListener
org.eclipse.jgit.lib.Repository.getGlobalListenerList().addConfigChangedListener
org.eclipse.jgit.lib.Repository.getGlobalListenerList().addRefsChangedListener

invidiual存储库中的监听器:

org.eclipse.jgit.lib.Repository.getListenerList().addIndexChangedListener
org.eclipse.jgit.lib.Repository.getListenerList().addConfigChangedListener
org.eclipse.jgit.lib.Repository.getListenerList().addRefsChangedListener

这些侦听器支持更改索引的事件,存储库配置的更改以及存储库引用(分支,标记等)的更改。

您可以通过以下方式找到在EGit中注册的所有存储库:

通过调用:

获取EGit中存在的所有存储库的绝对路径
org.eclipse.egit.core.Activator.getDefault().getRepositoryUtil().getConfiguredRepositories()

您可以通过为上一个方法返回的路径创建文件来获取特定Repository对象的句柄,然后使用该文件调用以下内容:

org.eclipse.egit.core.Activator.getDefault().getRepositoryCache().lookupRepository

答案 1 :(得分:0)

到目前为止,还没有可用的公共听众或扩展点。 “提交”对话框中还有一些扩展点,也可能是其他对话框,但这些都是非公开的,将来可能会更改。但是,为了跟踪您的兴趣,您应该在EGit项目的Eclipse Bugzilla提交增强请求(我认为,已经有一些类似功能的请求,因此您可以搜索它们并为它们投票)。