Merge "Add extension point to register JGit PreUploadHooks"
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user