Trigger replication and hooks on image upload/deletion
Change-Id: I3022ce2ef20b164360c161729bb4b049d8ce0709
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java
index ff9cfb5..6446e2a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java
@@ -14,12 +14,16 @@
package com.googlesource.gerrit.plugins.imagare;
+import com.google.gerrit.common.ChangeHooks;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestModifyView;
+import com.google.gerrit.server.IdentifiedUser;
+import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.inject.Inject;
+import com.google.inject.Provider;
import com.googlesource.gerrit.plugins.imagare.DeleteImage.Input;
@@ -37,11 +41,19 @@
public static class Input {
}
+ private final Provider<IdentifiedUser> self;
private final GitRepositoryManager repoManager;
+ private final GitReferenceUpdated referenceUpdated;
+ private final ChangeHooks hooks;
@Inject
- public DeleteImage(GitRepositoryManager repoManager) {
+ public DeleteImage(Provider<IdentifiedUser> self,
+ GitRepositoryManager repoManager, GitReferenceUpdated referenceUpdated,
+ ChangeHooks hooks) {
+ this.self = self;
this.repoManager = repoManager;
+ this.referenceUpdated = referenceUpdated;
+ this.hooks = hooks;
}
@Override
@@ -70,6 +82,8 @@
case NO_CHANGE:
case FAST_FORWARD:
case FORCED:
+ referenceUpdated.fire(rsrc.getProject(), u);
+ hooks.doRefUpdatedHook(rsrc.getBranchKey(), u, self.get().getAccount());
break;
case REJECTED_CURRENT_BRANCH:
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageResource.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageResource.java
index b76f013..131ae51 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageResource.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageResource.java
@@ -16,6 +16,7 @@
import com.google.gerrit.extensions.restapi.RestResource;
import com.google.gerrit.extensions.restapi.RestView;
+import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.project.RefControl;
import com.google.inject.TypeLiteral;
@@ -41,4 +42,8 @@
public String getRef() {
return refControl.getRefName();
}
+
+ public Branch.NameKey getBranchKey() {
+ return new Branch.NameKey(getProject(), getRef());
+ }
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
index 5abfc5c..a669271 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
@@ -14,17 +14,20 @@
package com.googlesource.gerrit.plugins.imagare;
+import com.google.gerrit.common.ChangeHooks;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.IdString;
import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestModifyView;
+import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.FileTypeRegistry;
import com.google.gerrit.server.GerritPersonIdent;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.config.CanonicalWebUrl;
+import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.project.ProjectControl;
import com.google.gerrit.server.project.ProjectResource;
@@ -64,17 +67,22 @@
private final Pattern imageDataPattern;
private final Provider<IdentifiedUser> self;
private final GitRepositoryManager repoManager;
+ private final GitReferenceUpdated referenceUpdated;
+ private final ChangeHooks hooks;
private final PersonIdent myIdent;
private final String canonicalWebUrl;
@Inject
public PostImage(FileTypeRegistry registry, Provider<IdentifiedUser> self,
- GitRepositoryManager repoManager, @GerritPersonIdent PersonIdent myIdent,
+ GitRepositoryManager repoManager, GitReferenceUpdated referenceUpdated,
+ ChangeHooks hooks, @GerritPersonIdent PersonIdent myIdent,
@CanonicalWebUrl String canonicalWebUrl) {
this.registry = registry;
this.imageDataPattern = Pattern.compile("data:([\\w/.-]+);([\\w]+),(.*)");
this.self = self;
this.repoManager = repoManager;
+ this.referenceUpdated = referenceUpdated;
+ this.hooks = hooks;
this.myIdent = myIdent;
this.canonicalWebUrl = canonicalWebUrl;
}
@@ -177,7 +185,11 @@
ru.setExpectedOldObjectId(ObjectId.zeroId());
ru.setNewObjectId(commitId);
ru.disableRefLog();
- if (ru.update(rw) != RefUpdate.Result.NEW) {
+ if (ru.update(rw) == RefUpdate.Result.NEW) {
+ referenceUpdated.fire(pc.getProject().getNameKey(), ru);
+ hooks.doRefUpdatedHook(new Branch.NameKey(pc.getProject()
+ .getNameKey(), ref), ru, self.get().getAccount());
+ } else {
throw new IOException(String.format(
"Failed to create ref %s in %s: %s", ref,
pc.getProject().getName(), ru.getResult()));