Abandon: Use ChangeData instead of ChangeControl
Change-Id: I9b55bf37f8b0b53341a00213f474404b2fffcb34
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/AbandonIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/AbandonIT.java
index cb9d705..52e1ea4 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/AbandonIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/AbandonIT.java
@@ -33,7 +33,6 @@
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.change.AbandonUtil;
-import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.testutil.TestTimeUtil;
import com.google.inject.Inject;
@@ -64,14 +63,10 @@
public void batchAbandon() throws Exception {
CurrentUser user = atrScope.get().getUser();
PushOneCommit.Result a = createChange();
- List<ChangeControl> controlA = changeFinder.find(a.getChangeId(), user);
- assertThat(controlA).hasSize(1);
PushOneCommit.Result b = createChange();
- List<ChangeControl> controlB = changeFinder.find(b.getChangeId(), user);
- assertThat(controlB).hasSize(1);
- List<ChangeControl> list = ImmutableList.of(controlA.get(0), controlB.get(0));
+ List<ChangeData> list = ImmutableList.of(a.getChange(), b.getChange());
changeAbandoner.batchAbandon(
- batchUpdateFactory, controlA.get(0).getProject().getNameKey(), user, list, "deadbeef");
+ batchUpdateFactory, a.getChange().project(), user, list, "deadbeef");
ChangeInfo info = get(a.getChangeId());
assertThat(info.status).isEqualTo(ChangeStatus.ABANDONED);
@@ -95,12 +90,8 @@
CurrentUser user = atrScope.get().getUser();
PushOneCommit.Result a = createChange(project1, "master", "x", "x", "x", "");
- List<ChangeControl> controlA = changeFinder.find(a.getChangeId(), user);
- assertThat(controlA).hasSize(1);
PushOneCommit.Result b = createChange(project2, "master", "x", "x", "x", "");
- List<ChangeControl> controlB = changeFinder.find(b.getChangeId(), user);
- assertThat(controlB).hasSize(1);
- List<ChangeControl> list = ImmutableList.of(controlA.get(0), controlB.get(0));
+ List<ChangeData> list = ImmutableList.of(a.getChange(), b.getChange());
exception.expect(ResourceConflictException.class);
exception.expectMessage(
String.format("Project name \"%s\" doesn't match \"%s\"", project2Name, project1Name));
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Abandon.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Abandon.java
index cd0f34e..db13c14 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Abandon.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Abandon.java
@@ -35,7 +35,7 @@
import com.google.gerrit.server.notedb.ChangeNotes;
import com.google.gerrit.server.permissions.ChangePermission;
import com.google.gerrit.server.permissions.PermissionBackendException;
-import com.google.gerrit.server.project.ChangeControl;
+import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
@@ -138,31 +138,31 @@
* should use the batch instead of abandoning one by one.
*
* <p>It's the caller's responsibility to ensure that all jobs inside the same batch have the
- * matching project from its ChangeControl. Violations will result in a ResourceConflictException.
+ * matching project from its ChangeData. Violations will result in a ResourceConflictException.
*/
public void batchAbandon(
BatchUpdate.Factory updateFactory,
Project.NameKey project,
CurrentUser user,
- Collection<ChangeControl> controls,
+ Collection<ChangeData> changes,
String msgTxt,
NotifyHandling notifyHandling,
ListMultimap<RecipientType, Account.Id> accountsToNotify)
throws RestApiException, UpdateException {
- if (controls.isEmpty()) {
+ if (changes.isEmpty()) {
return;
}
Account account = user.isIdentifiedUser() ? user.asIdentifiedUser().getAccount() : null;
try (BatchUpdate u = updateFactory.create(dbProvider.get(), project, user, TimeUtil.nowTs())) {
- for (ChangeControl control : controls) {
- if (!project.equals(control.getProject().getNameKey())) {
+ for (ChangeData change : changes) {
+ if (!project.equals(change.project())) {
throw new ResourceConflictException(
String.format(
"Project name \"%s\" doesn't match \"%s\"",
- control.getProject().getNameKey().get(), project.get()));
+ change.project().get(), project.get()));
}
u.addOp(
- control.getId(),
+ change.getId(),
abandonOpFactory.create(account, msgTxt, notifyHandling, accountsToNotify));
}
u.execute();
@@ -173,14 +173,14 @@
BatchUpdate.Factory updateFactory,
Project.NameKey project,
CurrentUser user,
- Collection<ChangeControl> controls,
+ Collection<ChangeData> changes,
String msgTxt)
throws RestApiException, UpdateException {
batchAbandon(
updateFactory,
project,
user,
- controls,
+ changes,
msgTxt,
NotifyHandling.ALL,
ImmutableListMultimap.of());
@@ -190,10 +190,10 @@
BatchUpdate.Factory updateFactory,
Project.NameKey project,
CurrentUser user,
- Collection<ChangeControl> controls)
+ Collection<ChangeData> changes)
throws RestApiException, UpdateException {
batchAbandon(
- updateFactory, project, user, controls, "", NotifyHandling.ALL, ImmutableListMultimap.of());
+ updateFactory, project, user, changes, "", NotifyHandling.ALL, ImmutableListMultimap.of());
}
@Override
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/AbandonUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/AbandonUtil.java
index 58a908d..3239813 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/AbandonUtil.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/AbandonUtil.java
@@ -20,7 +20,6 @@
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.InternalUser;
import com.google.gerrit.server.config.ChangeCleanupConfig;
-import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -74,24 +73,23 @@
List<ChangeData> changesToAbandon =
queryProvider.get().enforceVisibility(false).query(queryBuilder.parse(query)).entities();
- ImmutableListMultimap.Builder<Project.NameKey, ChangeControl> builder =
+ ImmutableListMultimap.Builder<Project.NameKey, ChangeData> builder =
ImmutableListMultimap.builder();
for (ChangeData cd : changesToAbandon) {
- ChangeControl control = cd.changeControl(internalUser);
- builder.put(control.getProject().getNameKey(), control);
+ builder.put(cd.project(), cd);
}
int count = 0;
- ListMultimap<Project.NameKey, ChangeControl> abandons = builder.build();
+ ListMultimap<Project.NameKey, ChangeData> abandons = builder.build();
String message = cfg.getAbandonMessage();
for (Project.NameKey project : abandons.keySet()) {
- Collection<ChangeControl> changes = getValidChanges(abandons.get(project), query);
+ Collection<ChangeData> changes = getValidChanges(abandons.get(project), query);
try {
abandon.batchAbandon(updateFactory, project, internalUser, changes, message);
count += changes.size();
} catch (Throwable e) {
StringBuilder msg = new StringBuilder("Failed to auto-abandon inactive change(s):");
- for (ChangeControl change : changes) {
+ for (ChangeData change : changes) {
msg.append(" ").append(change.getId().get());
}
msg.append(".");
@@ -104,12 +102,11 @@
}
}
- private Collection<ChangeControl> getValidChanges(
- Collection<ChangeControl> changeControls, String query)
+ private Collection<ChangeData> getValidChanges(Collection<ChangeData> changes, String query)
throws OrmException, QueryParseException {
- Collection<ChangeControl> validChanges = new ArrayList<>();
- for (ChangeControl cc : changeControls) {
- String newQuery = query + " change:" + cc.getId();
+ Collection<ChangeData> validChanges = new ArrayList<>();
+ for (ChangeData cd : changes) {
+ String newQuery = query + " change:" + cd.getId();
List<ChangeData> changesToAbandon =
queryProvider
.get()
@@ -117,12 +114,12 @@
.query(queryBuilder.parse(newQuery))
.entities();
if (!changesToAbandon.isEmpty()) {
- validChanges.add(cc);
+ validChanges.add(cd);
} else {
log.debug(
"Change data with id \"{}\" does not satisfy the query \"{}\""
+ " any more, hence skipping it in clean up",
- cc.getId(),
+ cd.getId(),
query);
}
}