diff options
author | Marcin Czech <maczech@gmail.com> | 2023-11-21 14:13:21 +0100 |
---|---|---|
committer | Marcin Czech <maczech@gmail.com> | 2023-11-23 15:38:24 +0100 |
commit | 72dd04f7da9a89f89f34eb1f5774d3ca8f318b45 (patch) | |
tree | 65f78f443fd9a276f13c4691e1673ebd6b01b838 | |
parent | fbc8e8f0e73fd0aa172a5adaf0a68f3d21fc4b79 (diff) |
Fire `ref-updated` stream events on online edit refs update
During the online edit `refs/users/xx/xxxxxxx/edit-x/x` ref is
created and removed when edit is published or deleted.
Make sure all `refs/users/xx/xxxxxxx/edit-x/x` updates generate
`ref-updated` stream events.
Release-Notes: Generate `ref-updated` stream events from online edits
Bug: Issue 40014568
Change-Id: I34192259b7092dab215d7a78e3b59f6a5f15cc71
-rw-r--r-- | java/com/google/gerrit/server/edit/ChangeEditModifier.java | 17 | ||||
-rw-r--r-- | java/com/google/gerrit/server/edit/ChangeEditUtil.java | 12 |
2 files changed, 24 insertions, 5 deletions
diff --git a/java/com/google/gerrit/server/edit/ChangeEditModifier.java b/java/com/google/gerrit/server/edit/ChangeEditModifier.java index 2957d6b081..51b0d51172 100644 --- a/java/com/google/gerrit/server/edit/ChangeEditModifier.java +++ b/java/com/google/gerrit/server/edit/ChangeEditModifier.java @@ -33,12 +33,14 @@ import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.GerritPersonIdent; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.PatchSetUtil; +import com.google.gerrit.server.account.AccountState; import com.google.gerrit.server.edit.tree.ChangeFileContentModification; import com.google.gerrit.server.edit.tree.DeleteFileModification; import com.google.gerrit.server.edit.tree.RenameFileModification; import com.google.gerrit.server.edit.tree.RestoreFileModification; import com.google.gerrit.server.edit.tree.TreeCreator; import com.google.gerrit.server.edit.tree.TreeModification; +import com.google.gerrit.server.extensions.events.GitReferenceUpdated; import com.google.gerrit.server.index.change.ChangeIndexer; import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.server.permissions.ChangePermission; @@ -107,7 +109,8 @@ public class ChangeEditModifier { PermissionBackend permissionBackend, ChangeEditUtil changeEditUtil, PatchSetUtil patchSetUtil, - ProjectCache projectCache) { + ProjectCache projectCache, + GitReferenceUpdated gitRefUpdated) { this.currentUser = currentUser; this.permissionBackend = permissionBackend; this.zoneId = gerritIdent.getZoneId(); @@ -115,7 +118,7 @@ public class ChangeEditModifier { this.patchSetUtil = patchSetUtil; this.projectCache = projectCache; - noteDbEdits = new NoteDbEdits(zoneId, indexer, currentUser); + noteDbEdits = new NoteDbEdits(zoneId, indexer, currentUser, gitRefUpdated); } /** @@ -712,11 +715,17 @@ public class ChangeEditModifier { private final ZoneId zoneId; private final ChangeIndexer indexer; private final Provider<CurrentUser> currentUser; + private final GitReferenceUpdated gitRefUpdated; - NoteDbEdits(ZoneId zoneId, ChangeIndexer indexer, Provider<CurrentUser> currentUser) { + NoteDbEdits( + ZoneId zoneId, + ChangeIndexer indexer, + Provider<CurrentUser> currentUser, + GitReferenceUpdated gitRefUpdated) { this.zoneId = zoneId; this.indexer = indexer; this.currentUser = currentUser; + this.gitRefUpdated = gitRefUpdated; } ChangeEdit createEdit( @@ -772,6 +781,7 @@ public class ChangeEditModifier { ObjectId targetObjectId, Instant timestamp) throws IOException { + AccountState userAccountState = currentUser.get().asIdentifiedUser().state(); RefUpdate ru = repository.updateRef(refName); ru.setExpectedOldObjectId(currentObjectId); ru.setNewObjectId(targetObjectId); @@ -787,6 +797,7 @@ public class ChangeEditModifier { if (res != RefUpdate.Result.NEW && res != RefUpdate.Result.FORCED) { throw new IOException(message); } + gitRefUpdated.fire(projectName, ru, userAccountState); } } diff --git a/java/com/google/gerrit/server/edit/ChangeEditUtil.java b/java/com/google/gerrit/server/edit/ChangeEditUtil.java index 74834ab59b..e413d43dfd 100644 --- a/java/com/google/gerrit/server/edit/ChangeEditUtil.java +++ b/java/com/google/gerrit/server/edit/ChangeEditUtil.java @@ -29,9 +29,11 @@ import com.google.gerrit.server.ChangeUtil; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.PatchSetUtil; +import com.google.gerrit.server.account.AccountState; import com.google.gerrit.server.change.ChangeKindCache; import com.google.gerrit.server.change.NotifyResolver; import com.google.gerrit.server.change.PatchSetInserter; +import com.google.gerrit.server.extensions.events.GitReferenceUpdated; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.index.change.ChangeIndexer; import com.google.gerrit.server.notedb.ChangeNotes; @@ -69,6 +71,7 @@ public class ChangeEditUtil { private final Provider<CurrentUser> userProvider; private final ChangeKindCache changeKindCache; private final PatchSetUtil psUtil; + private final GitReferenceUpdated gitRefUpdated; @Inject ChangeEditUtil( @@ -77,13 +80,15 @@ public class ChangeEditUtil { ChangeIndexer indexer, Provider<CurrentUser> userProvider, ChangeKindCache changeKindCache, - PatchSetUtil psUtil) { + PatchSetUtil psUtil, + GitReferenceUpdated gitRefUpdated) { this.gitManager = gitManager; this.patchSetInserterFactory = patchSetInserterFactory; this.indexer = indexer; this.userProvider = userProvider; this.changeKindCache = changeKindCache; this.psUtil = psUtil; + this.gitRefUpdated = gitRefUpdated; } /** @@ -237,7 +242,8 @@ public class ChangeEditUtil { return writeSquashedCommit(rw, inserter, parent, edit); } - private static void deleteRef(Repository repo, ChangeEdit edit) throws IOException { + private void deleteRef(Repository repo, ChangeEdit edit) throws IOException { + AccountState userAccountState = userProvider.get().asIdentifiedUser().state(); String refName = edit.getRefName(); RefUpdate ru = repo.updateRef(refName, true); ru.setExpectedOldObjectId(edit.getEditCommit()); @@ -246,6 +252,8 @@ public class ChangeEditUtil { switch (result) { case FORCED: case NEW: + gitRefUpdated.fire(edit.getChange().getProject(), ru, userAccountState); + break; case NO_CHANGE: break; case LOCK_FAILURE: |