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:
		@@ -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,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user