Add extension point to register JGit PostUploadHooks
Plugins may register PostUploadHook instances in order to get notified after JGit is done uploading a pack. Now that PostUploadHook can be registered using the DynamicSet, use that mechanism to register UploadPackMetricsHook. Change-Id: If848bddc85ca8923a5d55f7dd448ac218c910e1c
This commit is contained in:
parent
7acf5164ba
commit
41b4c0d3da
@ -498,6 +498,12 @@ notified when JGit is about to upload a pack. This may be useful
|
|||||||
for those plugins which would like to monitor usage in Git
|
for those plugins which would like to monitor usage in Git
|
||||||
repositories.
|
repositories.
|
||||||
|
|
||||||
|
[[post-upload-hook]]
|
||||||
|
== Post Upload-Pack Hooks
|
||||||
|
|
||||||
|
Plugins may register PostUploadHook instances in order to get notified after
|
||||||
|
JGit is done uploading a pack.
|
||||||
|
|
||||||
[[ssh]]
|
[[ssh]]
|
||||||
== SSH Commands
|
== SSH Commands
|
||||||
|
|
||||||
|
@ -31,7 +31,6 @@ import com.google.gerrit.server.git.ReceiveCommits;
|
|||||||
import com.google.gerrit.server.git.SearchingChangeCacheImpl;
|
import com.google.gerrit.server.git.SearchingChangeCacheImpl;
|
||||||
import com.google.gerrit.server.git.TagCache;
|
import com.google.gerrit.server.git.TagCache;
|
||||||
import com.google.gerrit.server.git.TransferConfig;
|
import com.google.gerrit.server.git.TransferConfig;
|
||||||
import com.google.gerrit.server.git.UploadPackMetricsHook;
|
|
||||||
import com.google.gerrit.server.git.VisibleRefFilter;
|
import com.google.gerrit.server.git.VisibleRefFilter;
|
||||||
import com.google.gerrit.server.git.validators.UploadValidators;
|
import com.google.gerrit.server.git.validators.UploadValidators;
|
||||||
import com.google.gerrit.server.notedb.ChangeNotes;
|
import com.google.gerrit.server.notedb.ChangeNotes;
|
||||||
@ -51,6 +50,8 @@ import org.eclipse.jgit.http.server.ServletUtils;
|
|||||||
import org.eclipse.jgit.http.server.resolver.AsIsFileService;
|
import org.eclipse.jgit.http.server.resolver.AsIsFileService;
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
|
import org.eclipse.jgit.transport.PostUploadHook;
|
||||||
|
import org.eclipse.jgit.transport.PostUploadHookChain;
|
||||||
import org.eclipse.jgit.transport.PreUploadHook;
|
import org.eclipse.jgit.transport.PreUploadHook;
|
||||||
import org.eclipse.jgit.transport.PreUploadHookChain;
|
import org.eclipse.jgit.transport.PreUploadHookChain;
|
||||||
import org.eclipse.jgit.transport.ReceivePack;
|
import org.eclipse.jgit.transport.ReceivePack;
|
||||||
@ -198,16 +199,16 @@ 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 UploadPackMetricsHook uploadMetrics;
|
|
||||||
private final DynamicSet<PreUploadHook> preUploadHooks;
|
private final DynamicSet<PreUploadHook> preUploadHooks;
|
||||||
|
private final DynamicSet<PostUploadHook> postUploadHooks;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
UploadFactory(TransferConfig tc,
|
UploadFactory(TransferConfig tc,
|
||||||
UploadPackMetricsHook uploadMetrics,
|
DynamicSet<PreUploadHook> preUploadHooks,
|
||||||
DynamicSet<PreUploadHook> preUploadHooks) {
|
DynamicSet<PostUploadHook> postUploadHooks) {
|
||||||
this.config = tc;
|
this.config = tc;
|
||||||
this.uploadMetrics = uploadMetrics;
|
|
||||||
this.preUploadHooks = preUploadHooks;
|
this.preUploadHooks = preUploadHooks;
|
||||||
|
this.postUploadHooks = postUploadHooks;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -217,7 +218,8 @@ public class GitOverHttpServlet extends GitServlet {
|
|||||||
up.setTimeout(config.getTimeout());
|
up.setTimeout(config.getTimeout());
|
||||||
up.setPreUploadHook(PreUploadHookChain.newChain(
|
up.setPreUploadHook(PreUploadHookChain.newChain(
|
||||||
Lists.newArrayList(preUploadHooks)));
|
Lists.newArrayList(preUploadHooks)));
|
||||||
up.setPostUploadHook(uploadMetrics);
|
up.setPostUploadHook(
|
||||||
|
PostUploadHookChain.newChain(Lists.newArrayList(postUploadHooks)));
|
||||||
return up;
|
return up;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -173,6 +173,7 @@ import com.google.inject.internal.UniqueAnnotations;
|
|||||||
import org.apache.velocity.runtime.RuntimeInstance;
|
import org.apache.velocity.runtime.RuntimeInstance;
|
||||||
import org.eclipse.jgit.lib.Config;
|
import org.eclipse.jgit.lib.Config;
|
||||||
import org.eclipse.jgit.transport.PostReceiveHook;
|
import org.eclipse.jgit.transport.PostReceiveHook;
|
||||||
|
import org.eclipse.jgit.transport.PostUploadHook;
|
||||||
import org.eclipse.jgit.transport.PreUploadHook;
|
import org.eclipse.jgit.transport.PreUploadHook;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -314,6 +315,7 @@ public class GerritGlobalModule extends FactoryModule {
|
|||||||
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(), PreUploadHook.class);
|
||||||
|
DynamicSet.setOf(binder(), PostUploadHook.class);
|
||||||
DynamicSet.setOf(binder(), ChangeIndexedListener.class);
|
DynamicSet.setOf(binder(), ChangeIndexedListener.class);
|
||||||
DynamicSet.setOf(binder(), NewProjectCreatedListener.class);
|
DynamicSet.setOf(binder(), NewProjectCreatedListener.class);
|
||||||
DynamicSet.setOf(binder(), ProjectDeletedListener.class);
|
DynamicSet.setOf(binder(), ProjectDeletedListener.class);
|
||||||
|
@ -15,6 +15,9 @@
|
|||||||
package com.google.gerrit.server.git;
|
package com.google.gerrit.server.git;
|
||||||
|
|
||||||
import com.google.gerrit.extensions.config.FactoryModule;
|
import com.google.gerrit.extensions.config.FactoryModule;
|
||||||
|
import com.google.gerrit.extensions.registration.DynamicSet;
|
||||||
|
|
||||||
|
import org.eclipse.jgit.transport.PostUploadHook;
|
||||||
|
|
||||||
/** Configures the Git support. */
|
/** Configures the Git support. */
|
||||||
public class GitModule extends FactoryModule {
|
public class GitModule extends FactoryModule {
|
||||||
@ -24,5 +27,7 @@ public class GitModule extends FactoryModule {
|
|||||||
factory(MetaDataUpdate.InternalFactory.class);
|
factory(MetaDataUpdate.InternalFactory.class);
|
||||||
bind(MetaDataUpdate.Server.class);
|
bind(MetaDataUpdate.Server.class);
|
||||||
bind(ReceiveConfig.class);
|
bind(ReceiveConfig.class);
|
||||||
|
DynamicSet.bind(binder(), PostUploadHook.class)
|
||||||
|
.to(UploadPackMetricsHook.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,6 @@ import com.google.gerrit.reviewdb.server.ReviewDb;
|
|||||||
import com.google.gerrit.server.git.SearchingChangeCacheImpl;
|
import com.google.gerrit.server.git.SearchingChangeCacheImpl;
|
||||||
import com.google.gerrit.server.git.TagCache;
|
import com.google.gerrit.server.git.TagCache;
|
||||||
import com.google.gerrit.server.git.TransferConfig;
|
import com.google.gerrit.server.git.TransferConfig;
|
||||||
import com.google.gerrit.server.git.UploadPackMetricsHook;
|
|
||||||
import com.google.gerrit.server.git.VisibleRefFilter;
|
import com.google.gerrit.server.git.VisibleRefFilter;
|
||||||
import com.google.gerrit.server.git.validators.UploadValidationException;
|
import com.google.gerrit.server.git.validators.UploadValidationException;
|
||||||
import com.google.gerrit.server.git.validators.UploadValidators;
|
import com.google.gerrit.server.git.validators.UploadValidators;
|
||||||
@ -30,6 +29,8 @@ import com.google.gerrit.sshd.AbstractGitCommand;
|
|||||||
import com.google.gerrit.sshd.SshSession;
|
import com.google.gerrit.sshd.SshSession;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
|
import org.eclipse.jgit.transport.PostUploadHook;
|
||||||
|
import org.eclipse.jgit.transport.PostUploadHookChain;
|
||||||
import org.eclipse.jgit.transport.PreUploadHook;
|
import org.eclipse.jgit.transport.PreUploadHook;
|
||||||
import org.eclipse.jgit.transport.PreUploadHookChain;
|
import org.eclipse.jgit.transport.PreUploadHookChain;
|
||||||
import org.eclipse.jgit.transport.UploadPack;
|
import org.eclipse.jgit.transport.UploadPack;
|
||||||
@ -58,15 +59,15 @@ final class Upload extends AbstractGitCommand {
|
|||||||
@Inject
|
@Inject
|
||||||
private DynamicSet<PreUploadHook> preUploadHooks;
|
private DynamicSet<PreUploadHook> preUploadHooks;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private DynamicSet<PostUploadHook> postUploadHooks;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private UploadValidators.Factory uploadValidatorsFactory;
|
private UploadValidators.Factory uploadValidatorsFactory;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private SshSession session;
|
private SshSession session;
|
||||||
|
|
||||||
@Inject
|
|
||||||
private UploadPackMetricsHook uploadMetrics;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void runImpl() throws IOException, Failure {
|
protected void runImpl() throws IOException, Failure {
|
||||||
if (!projectControl.canRunUploadPack()) {
|
if (!projectControl.canRunUploadPack()) {
|
||||||
@ -80,7 +81,8 @@ final class Upload extends AbstractGitCommand {
|
|||||||
true));
|
true));
|
||||||
up.setPackConfig(config.getPackConfig());
|
up.setPackConfig(config.getPackConfig());
|
||||||
up.setTimeout(config.getTimeout());
|
up.setTimeout(config.getTimeout());
|
||||||
up.setPostUploadHook(uploadMetrics);
|
up.setPostUploadHook(
|
||||||
|
PostUploadHookChain.newChain(Lists.newArrayList(postUploadHooks)));
|
||||||
|
|
||||||
List<PreUploadHook> allPreUploadHooks = Lists.newArrayList(preUploadHooks);
|
List<PreUploadHook> allPreUploadHooks = Lists.newArrayList(preUploadHooks);
|
||||||
allPreUploadHooks.add(uploadValidatorsFactory.create(project, repo,
|
allPreUploadHooks.add(uploadValidatorsFactory.create(project, repo,
|
||||||
|
Loading…
Reference in New Issue
Block a user