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()));