在MergeValidationListener中获取“用户”

时间:2018-12-13 12:53:00

标签: gerrit

我正在为Gerrit编写一个插件,该插件会临时为一个用户以外的所有用户锁定一个(或多个)分支(例如,以执行两个分支的合并)。

我正在使用Gerrit 2.11.3。

我的问题是,在实现MergeValidationListener接口的过程中无法获得当前用户。

代码是:

    private final Provider<CurrentUser> user;

    ...

    user.get()

例外是:

1) Error in custom provider, com.google.inject.OutOfScopeException: No user on merge thread
  at com.google.gerrit.server.util.ThreadLocalRequestContext$1.provideCurrentUser(ThreadLocalRequestContext.java:56) (via modules: com.google.gerrit.server.config.GerritGlobalModule -> com.google.gerrit.server.util.ThreadLocalRequestContext$1)
  while locating com.google.gerrit.server.CurrentUser
  at com.google.gerrit.server.plugins.PluginGuiceEnvironment$2.configure(PluginGuiceEnvironment.java:534) (via modules: com.google.gerrit.server.plugins.PluginGuiceEnvironment$1 -> com.google.gerrit.server.plugins.PluginGuiceEnvironment$2)
  while locating com.google.gerrit.server.CurrentUser

1 error
        at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1025)
    Caused by: com.google.inject.OutOfScopeException: No user on merge thread

我理解的是,实际的提交(或合并)是在没有用户上下文的单独线程中执行的。

是否可以通过某种方式来联系实际用户,即单击“提交”按钮或发出ssh命令? 也许还有其他一些侦听器,它们可以获取用户信息并能够阻止提交?

作为最后一种可能性,我会考虑升级到更高版本。

0 个答案:

没有答案