Add UploadPackInitializer extension point

I suggested to Luca at the hackathon that he could use this mechanism to
limit refs advertised to Jenkins, instead of writing a custom
PermissionBackend. Getting this in 2.15 means people using his plugin
won't have to wait for the next release to stop using the
PermissionBackend hack.

Change-Id: I8c38eef94d6e505b926b3da6c470e34f6613ca2c
This commit is contained in:
Dave Borowitz
2017-10-03 09:55:51 +01:00
parent b8a2bae6db
commit 223580f314
5 changed files with 69 additions and 1 deletions

View File

@@ -27,6 +27,7 @@ import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.cache.CacheModule;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.git.TransferConfig;
import com.google.gerrit.server.git.UploadPackInitializer;
import com.google.gerrit.server.git.VisibleRefFilter;
import com.google.gerrit.server.git.receive.AsyncReceiveCommits;
import com.google.gerrit.server.git.validators.UploadValidators;
@@ -209,15 +210,18 @@ public class GitOverHttpServlet extends GitServlet {
private final TransferConfig config;
private final DynamicSet<PreUploadHook> preUploadHooks;
private final DynamicSet<PostUploadHook> postUploadHooks;
private final DynamicSet<UploadPackInitializer> uploadPackInitializers;
@Inject
UploadFactory(
TransferConfig tc,
DynamicSet<PreUploadHook> preUploadHooks,
DynamicSet<PostUploadHook> postUploadHooks) {
DynamicSet<PostUploadHook> postUploadHooks,
DynamicSet<UploadPackInitializer> uploadPackInitializers) {
this.config = tc;
this.preUploadHooks = preUploadHooks;
this.postUploadHooks = postUploadHooks;
this.uploadPackInitializers = uploadPackInitializers;
}
@Override
@@ -227,6 +231,10 @@ public class GitOverHttpServlet extends GitServlet {
up.setTimeout(config.getTimeout());
up.setPreUploadHook(PreUploadHookChain.newChain(Lists.newArrayList(preUploadHooks)));
up.setPostUploadHook(PostUploadHookChain.newChain(Lists.newArrayList(postUploadHooks)));
ProjectControl pc = (ProjectControl) req.getAttribute(ATT_CONTROL);
for (UploadPackInitializer initializer : uploadPackInitializers) {
initializer.init(pc.getProject().getNameKey(), up);
}
return up;
}
}