mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-03-06 04:10:52 +01:00
Fire RepositoryImportHookEvent instead of PostReceiveRepositoryHookEvent (#1561)
We will fire an RepositoryImportHookEvent instead of PostReceiveRepositoryHookEvent for repository imports with metadata. The event is only fired if all parts of the repository could be successfully imported. The extra event is required to avoid heavy recalculations which can be triggered by the PostReceiveRepositoryHookEvent for example the scm-statistic-plugin uses the PostReceiveRepositoryHookEvent to calculate its statistics. Co-authored-by: Eduard Heimbuch <eduard.heimbuch@cloudogu.com>
This commit is contained in:
@@ -50,13 +50,13 @@ public class HgPullCommand extends AbstractHgPushOrPullCommand implements PullCo
|
||||
private static final String AUTH_SECTION = "auth";
|
||||
private final ScmEventBus eventBus;
|
||||
private final HgLazyChangesetResolver changesetResolver;
|
||||
private final HgPostReceiveRepositoryHookEventFactory eventFactory;
|
||||
private final HgRepositoryHookEventFactory eventFactory;
|
||||
|
||||
public HgPullCommand(HgRepositoryHandler handler,
|
||||
HgCommandContext context,
|
||||
ScmEventBus eventBus,
|
||||
HgLazyChangesetResolver changesetResolver,
|
||||
HgPostReceiveRepositoryHookEventFactory eventFactory
|
||||
HgRepositoryHookEventFactory eventFactory
|
||||
) {
|
||||
super(handler, context);
|
||||
this.eventBus = eventBus;
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
|
||||
package sonia.scm.repository.spi;
|
||||
|
||||
import sonia.scm.repository.PostReceiveRepositoryHookEvent;
|
||||
import sonia.scm.repository.RepositoryHookEvent;
|
||||
import sonia.scm.repository.Tag;
|
||||
import sonia.scm.repository.api.HookContext;
|
||||
@@ -37,21 +36,20 @@ import static sonia.scm.repository.RepositoryHookType.POST_RECEIVE;
|
||||
import static sonia.scm.repository.spi.HgBranchesTagsExtractor.extractBranches;
|
||||
import static sonia.scm.repository.spi.HgBranchesTagsExtractor.extractTags;
|
||||
|
||||
class HgPostReceiveRepositoryHookEventFactory {
|
||||
class HgRepositoryHookEventFactory {
|
||||
|
||||
private final HookContextFactory hookContextFactory;
|
||||
|
||||
@Inject
|
||||
public HgPostReceiveRepositoryHookEventFactory(HookContextFactory hookContextFactory) {
|
||||
public HgRepositoryHookEventFactory(HookContextFactory hookContextFactory) {
|
||||
this.hookContextFactory = hookContextFactory;
|
||||
}
|
||||
|
||||
PostReceiveRepositoryHookEvent createEvent(HgCommandContext hgContext, HgLazyChangesetResolver changesetResolver) {
|
||||
RepositoryHookEvent createEvent(HgCommandContext hgContext, HgLazyChangesetResolver changesetResolver) {
|
||||
List<String> branches = extractBranches(hgContext);
|
||||
List<Tag> tags = extractTags(hgContext);
|
||||
HgImportHookContextProvider contextProvider = new HgImportHookContextProvider(branches, tags, changesetResolver);
|
||||
HookContext context = hookContextFactory.createContext(contextProvider, hgContext.getScmRepository());
|
||||
RepositoryHookEvent repositoryHookEvent = new RepositoryHookEvent(context, hgContext.getScmRepository(), POST_RECEIVE);
|
||||
return new PostReceiveRepositoryHookEvent(repositoryHookEvent);
|
||||
return new RepositoryHookEvent(context, hgContext.getScmRepository(), POST_RECEIVE);
|
||||
}
|
||||
}
|
||||
@@ -66,12 +66,12 @@ public class HgRepositoryServiceProvider extends RepositoryServiceProvider {
|
||||
private final HgRepositoryHandler handler;
|
||||
private final HgCommandContext context;
|
||||
private final HgLazyChangesetResolver lazyChangesetResolver;
|
||||
private final HgPostReceiveRepositoryHookEventFactory eventFactory;
|
||||
private final HgRepositoryHookEventFactory eventFactory;
|
||||
private final ScmEventBus eventBus;
|
||||
|
||||
HgRepositoryServiceProvider(HgRepositoryHandler handler,
|
||||
HgRepositoryFactory factory,
|
||||
HgPostReceiveRepositoryHookEventFactory eventFactory,
|
||||
HgRepositoryHookEventFactory eventFactory,
|
||||
ScmEventBus eventBus,
|
||||
Repository repository) {
|
||||
this.handler = handler;
|
||||
@@ -184,6 +184,6 @@ public class HgRepositoryServiceProvider extends RepositoryServiceProvider {
|
||||
|
||||
@Override
|
||||
public UnbundleCommand getUnbundleCommand() {
|
||||
return new HgUnbundleCommand(context, eventBus, lazyChangesetResolver, eventFactory);
|
||||
return new HgUnbundleCommand(context, lazyChangesetResolver, eventFactory);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,13 +40,13 @@ public class HgRepositoryServiceResolver implements RepositoryServiceResolver {
|
||||
private final HgRepositoryHandler handler;
|
||||
private final HgRepositoryFactory factory;
|
||||
private final ScmEventBus eventBus;
|
||||
private final HgPostReceiveRepositoryHookEventFactory eventFactory;
|
||||
private final HgRepositoryHookEventFactory eventFactory;
|
||||
|
||||
@Inject
|
||||
public HgRepositoryServiceResolver(HgRepositoryHandler handler,
|
||||
HgRepositoryFactory factory,
|
||||
ScmEventBus eventBus,
|
||||
HgPostReceiveRepositoryHookEventFactory eventFactory
|
||||
HgRepositoryHookEventFactory eventFactory
|
||||
) {
|
||||
this.handler = handler;
|
||||
this.factory = factory;
|
||||
|
||||
@@ -27,7 +27,7 @@ package sonia.scm.repository.spi;
|
||||
import com.google.common.io.ByteSource;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import sonia.scm.event.ScmEventBus;
|
||||
import sonia.scm.repository.RepositoryHookEvent;
|
||||
import sonia.scm.repository.api.UnbundleResponse;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -41,17 +41,14 @@ public class HgUnbundleCommand implements UnbundleCommand {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(HgUnbundleCommand.class);
|
||||
|
||||
private final HgCommandContext context;
|
||||
private final ScmEventBus eventBus;
|
||||
private final HgLazyChangesetResolver changesetResolver;
|
||||
private final HgPostReceiveRepositoryHookEventFactory eventFactory;
|
||||
private final HgRepositoryHookEventFactory eventFactory;
|
||||
|
||||
HgUnbundleCommand(HgCommandContext context,
|
||||
ScmEventBus eventBus,
|
||||
HgLazyChangesetResolver changesetResolver,
|
||||
HgPostReceiveRepositoryHookEventFactory eventFactory
|
||||
HgRepositoryHookEventFactory eventFactory
|
||||
) {
|
||||
this.context = context;
|
||||
this.eventBus = eventBus;
|
||||
this.changesetResolver = changesetResolver;
|
||||
this.eventFactory = eventFactory;
|
||||
}
|
||||
@@ -67,12 +64,15 @@ public class HgUnbundleCommand implements UnbundleCommand {
|
||||
}
|
||||
|
||||
unbundleRepositoryFromRequest(request, repositoryDir);
|
||||
firePostReceiveRepositoryHookEvent();
|
||||
fireHookEvent(request);
|
||||
return new UnbundleResponse(0);
|
||||
}
|
||||
|
||||
private void firePostReceiveRepositoryHookEvent() {
|
||||
eventBus.post(eventFactory.createEvent(context, changesetResolver));
|
||||
private void fireHookEvent(UnbundleCommandRequest request) {
|
||||
RepositoryHookEvent event = eventFactory.createEvent(context, changesetResolver);
|
||||
if (event != null) {
|
||||
request.getPostEventSink().accept(event);
|
||||
}
|
||||
}
|
||||
|
||||
private void unbundleRepositoryFromRequest(UnbundleCommandRequest request, Path repositoryDir) throws IOException {
|
||||
|
||||
Reference in New Issue
Block a user