Add extension point to register JGit PreUploadHooks
Very similar to the PostReceiveHook change that Saša made in I0212eab6e4867819ebe7ecc7fc5532c26bb82282, it is conceivable that a plugin may want to attach a PreUploadHook, such as for displaying messages to a user. Change-Id: If8e8f4e0b3774e4360048b7d3719d10f66719c78
This commit is contained in:
@@ -51,6 +51,8 @@ import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.transport.PostReceiveHook;
|
||||
import org.eclipse.jgit.transport.PostReceiveHookChain;
|
||||
import org.eclipse.jgit.transport.PreUploadHook;
|
||||
import org.eclipse.jgit.transport.PreUploadHookChain;
|
||||
import org.eclipse.jgit.transport.ReceivePack;
|
||||
import org.eclipse.jgit.transport.UploadPack;
|
||||
import org.eclipse.jgit.transport.resolver.ReceivePackFactory;
|
||||
@@ -188,15 +190,20 @@ public class GitOverHttpServlet extends GitServlet {
|
||||
|
||||
static class UploadFactory implements UploadPackFactory<HttpServletRequest> {
|
||||
private final TransferConfig config;
|
||||
private DynamicSet<PreUploadHook> preUploadHooks;
|
||||
|
||||
@Inject
|
||||
UploadFactory(TransferConfig tc) {
|
||||
UploadFactory(TransferConfig tc,
|
||||
DynamicSet<PreUploadHook> preUploadHooks) {
|
||||
this.config = tc;
|
||||
this.preUploadHooks = preUploadHooks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UploadPack create(HttpServletRequest req, Repository repo) {
|
||||
UploadPack up = new UploadPack(repo);
|
||||
up.setPreUploadHook(PreUploadHookChain.newChain(
|
||||
Lists.newArrayList(preUploadHooks)));
|
||||
up.setPackConfig(config.getPackConfig());
|
||||
up.setTimeout(config.getTimeout());
|
||||
return up;
|
||||
|
@@ -131,6 +131,7 @@ import com.google.inject.internal.UniqueAnnotations;
|
||||
|
||||
import org.apache.velocity.runtime.RuntimeInstance;
|
||||
import org.eclipse.jgit.transport.PostReceiveHook;
|
||||
import org.eclipse.jgit.transport.PreUploadHook;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@@ -250,6 +251,7 @@ public class GerritGlobalModule extends FactoryModule {
|
||||
DynamicSet.setOf(binder(), CacheRemovalListener.class);
|
||||
DynamicMap.mapOf(binder(), CapabilityDefinition.class);
|
||||
DynamicSet.setOf(binder(), GitReferenceUpdatedListener.class);
|
||||
DynamicSet.setOf(binder(), PreUploadHook.class);;
|
||||
DynamicSet.setOf(binder(), ReceivePackInitializer.class);
|
||||
DynamicSet.setOf(binder(), PostReceiveHook.class);
|
||||
DynamicSet.setOf(binder(), NewProjectCreatedListener.class);
|
||||
|
@@ -14,6 +14,8 @@
|
||||
|
||||
package com.google.gerrit.sshd.commands;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.gerrit.extensions.registration.DynamicSet;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.git.ChangeCache;
|
||||
import com.google.gerrit.server.git.TagCache;
|
||||
@@ -23,6 +25,8 @@ import com.google.gerrit.sshd.AbstractGitCommand;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
|
||||
import org.eclipse.jgit.transport.PreUploadHook;
|
||||
import org.eclipse.jgit.transport.PreUploadHookChain;
|
||||
import org.eclipse.jgit.transport.UploadPack;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -41,6 +45,9 @@ final class Upload extends AbstractGitCommand {
|
||||
@Inject
|
||||
private ChangeCache changeCache;
|
||||
|
||||
@Inject
|
||||
private DynamicSet<PreUploadHook> preUploadHooks;
|
||||
|
||||
@Override
|
||||
protected void runImpl() throws IOException, Failure {
|
||||
if (!projectControl.canRunUploadPack()) {
|
||||
@@ -48,6 +55,8 @@ final class Upload extends AbstractGitCommand {
|
||||
}
|
||||
|
||||
final UploadPack up = new UploadPack(repo);
|
||||
up.setPreUploadHook(PreUploadHookChain.newChain(
|
||||
Lists.newArrayList(preUploadHooks)));
|
||||
if (!projectControl.allRefsAreVisible()) {
|
||||
up.setAdvertiseRefsHook(new VisibleRefFilter(tagCache, changeCache, repo,
|
||||
projectControl, db.get(), true));
|
||||
|
Reference in New Issue
Block a user