Merge "Add extension point to register JGit PreUploadHooks"

This commit is contained in:
Edwin Kempin
2014-06-30 11:02:50 +00:00
committed by Gerrit Code Review
4 changed files with 26 additions and 1 deletions

View File

@@ -437,6 +437,14 @@ notified when JGit successfully receives a pack. This may be useful
for those plugins which would like to monitor changes in Git for those plugins which would like to monitor changes in Git
repositories. repositories.
[[pre-upload-hook]]
== Pre Upload-Pack Hooks
Plugins may register PreUploadHook instances in order to get
notified when JGit is about to upload a pack. This may be useful
for those plugins which would like to monitor usage in Git
repositories.
[[ssh]] [[ssh]]
== SSH Commands == SSH Commands

View File

@@ -51,6 +51,8 @@ import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.PostReceiveHook; import org.eclipse.jgit.transport.PostReceiveHook;
import org.eclipse.jgit.transport.PostReceiveHookChain; 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.ReceivePack;
import org.eclipse.jgit.transport.UploadPack; import org.eclipse.jgit.transport.UploadPack;
import org.eclipse.jgit.transport.resolver.ReceivePackFactory; import org.eclipse.jgit.transport.resolver.ReceivePackFactory;
@@ -188,10 +190,12 @@ public class GitOverHttpServlet extends GitServlet {
static class UploadFactory implements UploadPackFactory<HttpServletRequest> { static class UploadFactory implements UploadPackFactory<HttpServletRequest> {
private final TransferConfig config; private final TransferConfig config;
private final DynamicSet<PreUploadHook> preUploadHooks;
@Inject @Inject
UploadFactory(TransferConfig tc) { UploadFactory(TransferConfig tc, DynamicSet<PreUploadHook> preUploadHooks) {
this.config = tc; this.config = tc;
this.preUploadHooks = preUploadHooks;
} }
@Override @Override
@@ -199,6 +203,8 @@ public class GitOverHttpServlet extends GitServlet {
UploadPack up = new UploadPack(repo); UploadPack up = new UploadPack(repo);
up.setPackConfig(config.getPackConfig()); up.setPackConfig(config.getPackConfig());
up.setTimeout(config.getTimeout()); up.setTimeout(config.getTimeout());
up.setPreUploadHook(PreUploadHookChain.newChain(
Lists.newArrayList(preUploadHooks)));
return up; return up;
} }
} }

View File

@@ -132,6 +132,7 @@ import com.google.inject.internal.UniqueAnnotations;
import org.apache.velocity.runtime.RuntimeInstance; import org.apache.velocity.runtime.RuntimeInstance;
import org.eclipse.jgit.transport.PostReceiveHook; import org.eclipse.jgit.transport.PostReceiveHook;
import org.eclipse.jgit.transport.PreUploadHook;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@@ -255,6 +256,7 @@ public class GerritGlobalModule extends FactoryModule {
DynamicSet.setOf(binder(), GitReferenceUpdatedListener.class); DynamicSet.setOf(binder(), GitReferenceUpdatedListener.class);
DynamicSet.setOf(binder(), ReceivePackInitializer.class); DynamicSet.setOf(binder(), ReceivePackInitializer.class);
DynamicSet.setOf(binder(), PostReceiveHook.class); DynamicSet.setOf(binder(), PostReceiveHook.class);
DynamicSet.setOf(binder(), PreUploadHook.class);
DynamicSet.setOf(binder(), NewProjectCreatedListener.class); DynamicSet.setOf(binder(), NewProjectCreatedListener.class);
DynamicSet.setOf(binder(), ProjectDeletedListener.class); DynamicSet.setOf(binder(), ProjectDeletedListener.class);
DynamicSet.setOf(binder(), HeadUpdatedListener.class); DynamicSet.setOf(binder(), HeadUpdatedListener.class);

View File

@@ -14,6 +14,8 @@
package com.google.gerrit.sshd.commands; 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.reviewdb.server.ReviewDb;
import com.google.gerrit.server.git.ChangeCache; import com.google.gerrit.server.git.ChangeCache;
import com.google.gerrit.server.git.TagCache; 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.Inject;
import com.google.inject.Provider; import com.google.inject.Provider;
import org.eclipse.jgit.transport.PreUploadHook;
import org.eclipse.jgit.transport.PreUploadHookChain;
import org.eclipse.jgit.transport.UploadPack; import org.eclipse.jgit.transport.UploadPack;
import java.io.IOException; import java.io.IOException;
@@ -41,6 +45,9 @@ final class Upload extends AbstractGitCommand {
@Inject @Inject
private ChangeCache changeCache; private ChangeCache changeCache;
@Inject
private DynamicSet<PreUploadHook> preUploadHooks;
@Override @Override
protected void runImpl() throws IOException, Failure { protected void runImpl() throws IOException, Failure {
if (!projectControl.canRunUploadPack()) { if (!projectControl.canRunUploadPack()) {
@@ -54,6 +61,8 @@ final class Upload extends AbstractGitCommand {
} }
up.setPackConfig(config.getPackConfig()); up.setPackConfig(config.getPackConfig());
up.setTimeout(config.getTimeout()); up.setTimeout(config.getTimeout());
up.setPreUploadHook(PreUploadHookChain.newChain(
Lists.newArrayList(preUploadHooks)));
up.upload(in, out, err); up.upload(in, out, err);
} }
} }