Switch to EventListener EventListener provides more information than what is exposed by the GitReferenceUpdatedListener, while still providing the same core information. This switches to the generic EventListener interface. Change-Id: I891bcdcb923d854fd8f60ab8d3bcff1056bf9267
diff --git a/src/main/java/com/googlesource/gerrit/plugins/refprotection/BackupRef.java b/src/main/java/com/googlesource/gerrit/plugins/refprotection/BackupRef.java index e4d7fc8..f32f597 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/refprotection/BackupRef.java +++ b/src/main/java/com/googlesource/gerrit/plugins/refprotection/BackupRef.java
@@ -24,11 +24,11 @@ package com.googlesource.gerrit.plugins.refprotection; import com.google.gerrit.extensions.annotations.PluginName; -import com.google.gerrit.extensions.events.GitReferenceUpdatedListener.Event; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.server.config.PluginConfigFactory; +import com.google.gerrit.server.events.RefUpdatedEvent; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.project.CreateBranch; import com.google.gerrit.server.project.ProjectResource; @@ -62,7 +62,7 @@ this.createBranchFactory = createBranchFactory; } - public void createBackup(Event event, ProjectResource project) { + public void createBackup(RefUpdatedEvent event, ProjectResource project) { String refName = event.getRefName(); String backupRef = get(project, refName); @@ -73,7 +73,7 @@ CreateBranch.Input input = new CreateBranch.Input(); input.ref = backupRef; - input.revision = event.getOldObjectId(); + input.revision = event.refUpdate.oldRev; try { createBranchFactory.create(backupRef).apply(project, input);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefProtectionModule.java b/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefProtectionModule.java index 48de79a..b2700c7 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefProtectionModule.java +++ b/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefProtectionModule.java
@@ -23,14 +23,14 @@ */ package com.googlesource.gerrit.plugins.refprotection; -import com.google.gerrit.extensions.events.GitReferenceUpdatedListener; +import com.google.gerrit.common.EventListener; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.inject.AbstractModule; public class RefProtectionModule extends AbstractModule { @Override protected void configure() { - DynamicSet.bind(binder(), GitReferenceUpdatedListener.class).to( + DynamicSet.bind(binder(), EventListener.class).to( RefUpdateListener.class); requestStaticInjection(BackupRef.class); }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java b/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java index cbaffad..0ca08f4 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java +++ b/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java
@@ -27,10 +27,12 @@ import static org.eclipse.jgit.lib.Constants.R_TAGS; import com.google.gerrit.extensions.annotations.PluginName; -import com.google.gerrit.extensions.events.GitReferenceUpdatedListener; +import com.google.gerrit.common.EventListener; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.config.PluginConfigFactory; +import com.google.gerrit.server.events.Event; +import com.google.gerrit.server.events.RefUpdatedEvent; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.project.NoSuchProjectException; import com.google.gerrit.server.project.ProjectControl; @@ -47,7 +49,7 @@ import java.io.IOException; -class RefUpdateListener implements GitReferenceUpdatedListener { +class RefUpdateListener implements EventListener { private static final Logger log = LoggerFactory.getLogger(RefUpdateListener.class); @@ -76,18 +78,22 @@ } @Override - public void onGitReferenceUpdated(final Event event) { - if ((protectDeleted || protectFastForward) && isRelevantRef(event)) { - Project.NameKey nameKey = new Project.NameKey(event.getProjectName()); - try { - ProjectResource project = - new ProjectResource(projectControl.controlFor(nameKey, user)); - if ((protectDeleted && isRefDeleted(event)) - || (protectFastForward && isNonFastForwardUpdate(event, project))) { - backupRef.createBackup(event, project); + public void onEvent(Event event) { + if (event instanceof RefUpdatedEvent) { + RefUpdatedEvent refUpdate = (RefUpdatedEvent)event; + if ((protectDeleted || protectFastForward) && isRelevantRef(refUpdate)) { + Project.NameKey nameKey = refUpdate.getProjectNameKey(); + try { + ProjectResource project = + new ProjectResource(projectControl.controlFor(nameKey, user)); + if ((protectDeleted && isRefDeleted(refUpdate)) + || (protectFastForward && isNonFastForwardUpdate(refUpdate, + project))) { + backupRef.createBackup(refUpdate, project); + } + } catch (NoSuchProjectException | IOException e) { + log.error(e.getMessage(), e); } - } catch (NoSuchProjectException | IOException e) { - log.error(e.getMessage(), e); } } } @@ -98,7 +104,7 @@ * @param event the Event * @return True if relevant, otherwise False. */ - private boolean isRelevantRef(Event event) { + private boolean isRelevantRef(RefUpdatedEvent event) { return (!isNewRef(event)) && (event.getRefName().startsWith(R_HEADS) || event.getRefName().startsWith(R_TAGS)); @@ -110,8 +116,8 @@ * @param event the Event * @return True if a new ref, otherwise False. */ - private boolean isNewRef(Event event) { - return event.getOldObjectId().equals(ObjectId.zeroId().getName()); + private boolean isNewRef(RefUpdatedEvent event) { + return event.refUpdate.oldRev.equals(ObjectId.zeroId().getName()); } /** @@ -120,11 +126,11 @@ * @param event the Event * @return True if a ref deletion, otherwise False. */ - private boolean isRefDeleted(Event event) { - if (event.getNewObjectId().equals(ObjectId.zeroId().getName())) { + private boolean isRefDeleted(RefUpdatedEvent event) { + if (event.refUpdate.newRev.equals(ObjectId.zeroId().getName())) { log.info(String.format( "Ref Deleted: project [%s] refname [%s] old object id [%s]", - event.getProjectName(), event.getRefName(), event.getOldObjectId())); + event.getProjectNameKey().toString(), event.getRefName(), event.refUpdate.oldRev)); return true; } return false; @@ -136,7 +142,7 @@ * @param event the Event * @return True if a non-fast-forward update, otherwise False. */ - private boolean isNonFastForwardUpdate(Event event, ProjectResource project) + private boolean isNonFastForwardUpdate(RefUpdatedEvent event, ProjectResource project) throws RepositoryNotFoundException, IOException { if (isRefDeleted(event)) { // Can't be non-fast-forward if the ref was deleted, and @@ -146,9 +152,9 @@ try (Repository repo = repoManager.openRepository(project.getNameKey())) { try (RevWalk walk = new RevWalk(repo)) { RevCommit oldCommit = - walk.parseCommit(repo.resolve(event.getOldObjectId())); + walk.parseCommit(repo.resolve(event.refUpdate.oldRev)); RevCommit newCommit = - walk.parseCommit(repo.resolve(event.getNewObjectId())); + walk.parseCommit(repo.resolve(event.refUpdate.newRev)); return !walk.isMergedInto(oldCommit, newCommit); } }