Convert most ChangeApi handlers to retrying wrappers

Excludes a few that will require more work to plumb the
BatchUpdate.Factory into the class that actually does the work.

Change-Id: Id8c679c91ed8ea142f1856fcc2d976c4fb609dc5
This commit is contained in:
Dave Borowitz
2017-05-02 11:56:55 -04:00
parent 04f8f397d7
commit ae52afc058
21 changed files with 191 additions and 145 deletions

View File

@@ -366,7 +366,8 @@ public class ChangeIT extends AbstractDaemonTest {
List<ChangeControl> controlB = changeFinder.find(b.getChangeId(), user);
assertThat(controlB).hasSize(1);
List<ChangeControl> list = ImmutableList.of(controlA.get(0), controlB.get(0));
changeAbandoner.batchAbandon(controlA.get(0).getProject().getNameKey(), user, list, "deadbeef");
changeAbandoner.batchAbandon(
batchUpdateFactory, controlA.get(0).getProject().getNameKey(), user, list, "deadbeef");
ChangeInfo info = get(a.getChangeId());
assertThat(info.status).isEqualTo(ChangeStatus.ABANDONED);
@@ -399,7 +400,7 @@ public class ChangeIT extends AbstractDaemonTest {
exception.expect(ResourceConflictException.class);
exception.expectMessage(
String.format("Project name \"%s\" doesn't match \"%s\"", project2Name, project1Name));
changeAbandoner.batchAbandon(new Project.NameKey(project1Name), user, list);
changeAbandoner.batchAbandon(batchUpdateFactory, new Project.NameKey(project1Name), user, list);
}
@Test

View File

@@ -14,6 +14,7 @@
package com.google.gerrit.httpd.rpc.project;
import com.google.common.base.Throwables;
import com.google.gerrit.common.Nullable;
import com.google.gerrit.common.TimeUtil;
import com.google.gerrit.common.data.AccessSection;
@@ -38,7 +39,6 @@ import com.google.gerrit.server.config.AllProjectsName;
import com.google.gerrit.server.git.MetaDataUpdate;
import com.google.gerrit.server.git.ProjectConfig;
import com.google.gerrit.server.group.SystemGroupBackend;
import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.project.ProjectControl;
import com.google.gerrit.server.project.RefControl;
@@ -175,13 +175,10 @@ public class ReviewProjectAccess extends ProjectAccessHandler<Change.Id> {
AddReviewerInput input = new AddReviewerInput();
input.reviewer = projectOwners;
reviewersProvider.get().apply(rsrc, input);
} catch (IOException
| OrmException
| RestApiException
| UpdateException
| PermissionBackendException e) {
} catch (Exception e) {
// one of the owner groups is not visible to the user and this it why it
// can't be added as reviewer
Throwables.throwIfUnchecked(e);
}
}
@@ -198,12 +195,9 @@ public class ReviewProjectAccess extends ProjectAccessHandler<Change.Id> {
AddReviewerInput input = new AddReviewerInput();
input.reviewer = r.getGroup().getUUID().get();
reviewersProvider.get().apply(rsrc, input);
} catch (IOException
| OrmException
| RestApiException
| UpdateException
| PermissionBackendException e) {
} catch (Exception e) {
// ignore
Throwables.throwIfUnchecked(e);
}
}
}

View File

@@ -607,6 +607,8 @@ class ChangeApiImpl implements ChangeApi {
@Override
public ChangeInfo check(FixInput fix) throws RestApiException {
try {
// TODO(dborowitz): Convert to RetryingRestModifyView. Needs to plumb BatchUpdate.Factory into
// ConsistencyChecker.
return check.apply(change, fix).value();
} catch (Exception e) {
throw asRestApiException("Cannot check change", e);
@@ -624,6 +626,8 @@ class ChangeApiImpl implements ChangeApi {
@Override
public void ignore(boolean ignore) throws RestApiException {
// TODO(dborowitz): Convert to RetryingRestModifyView. Needs to plumb BatchUpdate.Factory into
// StarredChangesUtil.
if (ignore) {
this.ignore.apply(change, new Ignore.Input());
} else {
@@ -633,6 +637,8 @@ class ChangeApiImpl implements ChangeApi {
@Override
public void mute(boolean mute) throws RestApiException {
// TODO(dborowitz): Convert to RetryingRestModifyView. Needs to plumb BatchUpdate.Factory into
// StarredChangesUtil.
if (mute) {
this.mute.apply(change, new Mute.Input());
} else {

View File

@@ -23,7 +23,6 @@ import com.google.gerrit.extensions.api.changes.RecipientType;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.extensions.webui.UiAction;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
@@ -35,6 +34,8 @@ 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.update.BatchUpdate;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -43,11 +44,10 @@ import com.google.inject.Singleton;
import java.util.Collection;
@Singleton
public class Abandon
implements RestModifyView<ChangeResource, AbandonInput>, UiAction<ChangeResource> {
public class Abandon extends RetryingRestModifyView<ChangeResource, AbandonInput, ChangeInfo>
implements UiAction<ChangeResource> {
private final Provider<ReviewDb> dbProvider;
private final ChangeJson.Factory json;
private final BatchUpdate.Factory batchUpdateFactory;
private final AbandonOp.Factory abandonOpFactory;
private final NotifyUtil notifyUtil;
@@ -55,23 +55,25 @@ public class Abandon
Abandon(
Provider<ReviewDb> dbProvider,
ChangeJson.Factory json,
BatchUpdate.Factory batchUpdateFactory,
RetryHelper retryHelper,
AbandonOp.Factory abandonOpFactory,
NotifyUtil notifyUtil) {
super(retryHelper);
this.dbProvider = dbProvider;
this.json = json;
this.batchUpdateFactory = batchUpdateFactory;
this.abandonOpFactory = abandonOpFactory;
this.notifyUtil = notifyUtil;
}
@Override
public ChangeInfo apply(ChangeResource req, AbandonInput input)
protected ChangeInfo applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource req, AbandonInput input)
throws RestApiException, UpdateException, OrmException, PermissionBackendException {
req.permissions().database(dbProvider).check(ChangePermission.ABANDON);
Change change =
abandon(
updateFactory,
req.getControl(),
input.message,
input.notify,
@@ -79,16 +81,18 @@ public class Abandon
return json.noOptions().format(change);
}
public Change abandon(ChangeControl control) throws RestApiException, UpdateException {
return abandon(control, "", NotifyHandling.ALL, ImmutableListMultimap.of());
public Change abandon(BatchUpdate.Factory updateFactory, ChangeControl control)
throws RestApiException, UpdateException {
return abandon(updateFactory, control, "", NotifyHandling.ALL, ImmutableListMultimap.of());
}
public Change abandon(ChangeControl control, String msgTxt)
public Change abandon(BatchUpdate.Factory updateFactory, ChangeControl control, String msgTxt)
throws RestApiException, UpdateException {
return abandon(control, msgTxt, NotifyHandling.ALL, ImmutableListMultimap.of());
return abandon(updateFactory, control, msgTxt, NotifyHandling.ALL, ImmutableListMultimap.of());
}
public Change abandon(
BatchUpdate.Factory updateFactory,
ChangeControl control,
String msgTxt,
NotifyHandling notifyHandling,
@@ -98,7 +102,7 @@ public class Abandon
Account account = user.isIdentifiedUser() ? user.asIdentifiedUser().getAccount() : null;
AbandonOp op = abandonOpFactory.create(account, msgTxt, notifyHandling, accountsToNotify);
try (BatchUpdate u =
batchUpdateFactory.create(
updateFactory.create(
dbProvider.get(),
control.getProject().getNameKey(),
control.getUser(),
@@ -116,6 +120,7 @@ public class Abandon
* matching project from its ChangeControl. Violations will result in a ResourceConflictException.
*/
public void batchAbandon(
BatchUpdate.Factory updateFactory,
Project.NameKey project,
CurrentUser user,
Collection<ChangeControl> controls,
@@ -127,8 +132,7 @@ public class Abandon
return;
}
Account account = user.isIdentifiedUser() ? user.asIdentifiedUser().getAccount() : null;
try (BatchUpdate u =
batchUpdateFactory.create(dbProvider.get(), project, user, TimeUtil.nowTs())) {
try (BatchUpdate u = updateFactory.create(dbProvider.get(), project, user, TimeUtil.nowTs())) {
for (ChangeControl control : controls) {
if (!project.equals(control.getProject().getNameKey())) {
throw new ResourceConflictException(
@@ -145,15 +149,30 @@ public class Abandon
}
public void batchAbandon(
Project.NameKey project, CurrentUser user, Collection<ChangeControl> controls, String msgTxt)
BatchUpdate.Factory updateFactory,
Project.NameKey project,
CurrentUser user,
Collection<ChangeControl> controls,
String msgTxt)
throws RestApiException, UpdateException {
batchAbandon(project, user, controls, msgTxt, NotifyHandling.ALL, ImmutableListMultimap.of());
batchAbandon(
updateFactory,
project,
user,
controls,
msgTxt,
NotifyHandling.ALL,
ImmutableListMultimap.of());
}
public void batchAbandon(
Project.NameKey project, CurrentUser user, Collection<ChangeControl> controls)
BatchUpdate.Factory updateFactory,
Project.NameKey project,
CurrentUser user,
Collection<ChangeControl> controls)
throws RestApiException, UpdateException {
batchAbandon(project, user, controls, "", NotifyHandling.ALL, ImmutableListMultimap.of());
batchAbandon(
updateFactory, project, user, controls, "", NotifyHandling.ALL, ImmutableListMultimap.of());
}
@Override

View File

@@ -24,6 +24,7 @@ import com.google.gerrit.server.query.QueryParseException;
import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
import com.google.gerrit.server.query.change.ChangeQueryProcessor;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -38,6 +39,7 @@ import org.slf4j.LoggerFactory;
public class AbandonUtil {
private static final Logger log = LoggerFactory.getLogger(AbandonUtil.class);
private final BatchUpdate.Factory updateFactory;
private final ChangeCleanupConfig cfg;
private final ChangeQueryProcessor queryProcessor;
private final ChangeQueryBuilder queryBuilder;
@@ -46,11 +48,13 @@ public class AbandonUtil {
@Inject
AbandonUtil(
BatchUpdate.Factory updateFactory,
ChangeCleanupConfig cfg,
InternalUser.Factory internalUserFactory,
ChangeQueryProcessor queryProcessor,
ChangeQueryBuilder queryBuilder,
Abandon abandon) {
this.updateFactory = updateFactory;
this.cfg = cfg;
this.queryProcessor = queryProcessor;
this.queryBuilder = queryBuilder;
@@ -85,7 +89,7 @@ public class AbandonUtil {
for (Project.NameKey project : abandons.keySet()) {
Collection<ChangeControl> changes = getValidChanges(abandons.get(project), query);
try {
abandon.batchAbandon(project, internalUser, changes, message);
abandon.batchAbandon(updateFactory, project, internalUser, changes, message);
count += changes.size();
} catch (Throwable e) {
StringBuilder msg = new StringBuilder("Failed to auto-abandon inactive change(s):");

View File

@@ -28,7 +28,6 @@ import com.google.gerrit.extensions.restapi.MergeConflictException;
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.PatchSet;
@@ -46,6 +45,8 @@ import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.project.InvalidChangeOperationException;
import com.google.gerrit.server.project.ProjectControl;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -65,7 +66,8 @@ import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.util.ChangeIdUtil;
@Singleton
public class CreateMergePatchSet implements RestModifyView<ChangeResource, MergePatchSetInput> {
public class CreateMergePatchSet
extends RetryingRestModifyView<ChangeResource, MergePatchSetInput, Response<ChangeInfo>> {
private final Provider<ReviewDb> db;
private final GitRepositoryManager gitManager;
@@ -74,7 +76,6 @@ public class CreateMergePatchSet implements RestModifyView<ChangeResource, Merge
private final ChangeJson.Factory jsonFactory;
private final PatchSetUtil psUtil;
private final MergeUtil.Factory mergeUtilFactory;
private final BatchUpdate.Factory batchUpdateFactory;
private final PatchSetInserter.Factory patchSetInserterFactory;
@Inject
@@ -86,8 +87,9 @@ public class CreateMergePatchSet implements RestModifyView<ChangeResource, Merge
ChangeJson.Factory json,
PatchSetUtil psUtil,
MergeUtil.Factory mergeUtilFactory,
BatchUpdate.Factory batchUpdateFactory,
RetryHelper retryHelper,
PatchSetInserter.Factory patchSetInserterFactory) {
super(retryHelper);
this.db = db;
this.gitManager = gitManager;
this.serverTimeZone = myIdent.getTimeZone();
@@ -95,12 +97,12 @@ public class CreateMergePatchSet implements RestModifyView<ChangeResource, Merge
this.jsonFactory = json;
this.psUtil = psUtil;
this.mergeUtilFactory = mergeUtilFactory;
this.batchUpdateFactory = batchUpdateFactory;
this.patchSetInserterFactory = patchSetInserterFactory;
}
@Override
public Response<ChangeInfo> apply(ChangeResource req, MergePatchSetInput in)
protected Response<ChangeInfo> applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource req, MergePatchSetInput in)
throws OrmException, IOException, InvalidChangeOperationException, RestApiException,
UpdateException {
if (in.merge == null) {
@@ -157,7 +159,7 @@ public class CreateMergePatchSet implements RestModifyView<ChangeResource, Merge
PatchSet.Id nextPsId = ChangeUtil.nextPatchSetId(ps.getId());
PatchSetInserter psInserter = patchSetInserterFactory.create(ctl, nextPsId, newCommit);
try (BatchUpdate bu = batchUpdateFactory.create(db.get(), project, me, now)) {
try (BatchUpdate bu = updateFactory.create(db.get(), project, me, now)) {
bu.setRepository(git, rw, oi);
bu.addOp(
ctl.getId(),

View File

@@ -18,7 +18,6 @@ import com.google.gerrit.common.TimeUtil;
import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.ChangeMessage;
@@ -35,6 +34,8 @@ import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.BatchUpdateOp;
import com.google.gerrit.server.update.ChangeContext;
import com.google.gerrit.server.update.Context;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -42,10 +43,10 @@ import com.google.inject.Provider;
import com.google.inject.Singleton;
@Singleton
public class DeleteAssignee implements RestModifyView<ChangeResource, Input> {
public class DeleteAssignee
extends RetryingRestModifyView<ChangeResource, Input, Response<AccountInfo>> {
public static class Input {}
private final BatchUpdate.Factory batchUpdateFactory;
private final ChangeMessagesUtil cmUtil;
private final Provider<ReviewDb> db;
private final AssigneeChanged assigneeChanged;
@@ -54,13 +55,13 @@ public class DeleteAssignee implements RestModifyView<ChangeResource, Input> {
@Inject
DeleteAssignee(
BatchUpdate.Factory batchUpdateFactory,
RetryHelper retryHelper,
ChangeMessagesUtil cmUtil,
Provider<ReviewDb> db,
AssigneeChanged assigneeChanged,
IdentifiedUser.GenericFactory userFactory,
AccountLoader.Factory accountLoaderFactory) {
this.batchUpdateFactory = batchUpdateFactory;
super(retryHelper);
this.cmUtil = cmUtil;
this.db = db;
this.assigneeChanged = assigneeChanged;
@@ -69,12 +70,13 @@ public class DeleteAssignee implements RestModifyView<ChangeResource, Input> {
}
@Override
public Response<AccountInfo> apply(ChangeResource rsrc, Input input)
protected Response<AccountInfo> applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input input)
throws RestApiException, UpdateException, OrmException, PermissionBackendException {
rsrc.permissions().check(ChangePermission.EDIT_ASSIGNEE);
try (BatchUpdate bu =
batchUpdateFactory.create(db.get(), rsrc.getProject(), rsrc.getUser(), TimeUtil.nowTs())) {
updateFactory.create(db.get(), rsrc.getProject(), rsrc.getUser(), TimeUtil.nowTs())) {
Op op = new Op();
bu.addOp(rsrc.getChange().getId(), op);
bu.execute();

View File

@@ -19,12 +19,13 @@ 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.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.extensions.webui.UiAction;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.ChangeMessagesUtil;
import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -32,25 +33,23 @@ import com.google.inject.Singleton;
@Singleton
public class DeletePrivate
implements RestModifyView<ChangeResource, DeletePrivate.Input>, UiAction<ChangeResource> {
extends RetryingRestModifyView<ChangeResource, DeletePrivate.Input, Response<String>>
implements UiAction<ChangeResource> {
public static class Input {}
private final ChangeMessagesUtil cmUtil;
private final Provider<ReviewDb> dbProvider;
private final BatchUpdate.Factory batchUpdateFactory;
@Inject
DeletePrivate(
Provider<ReviewDb> dbProvider,
BatchUpdate.Factory batchUpdateFactory,
ChangeMessagesUtil cmUtil) {
DeletePrivate(Provider<ReviewDb> dbProvider, RetryHelper retryHelper, ChangeMessagesUtil cmUtil) {
super(retryHelper);
this.dbProvider = dbProvider;
this.batchUpdateFactory = batchUpdateFactory;
this.cmUtil = cmUtil;
}
@Override
public Response<String> apply(ChangeResource rsrc, DeletePrivate.Input input)
protected Response<String> applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource rsrc, DeletePrivate.Input input)
throws RestApiException, UpdateException {
if (!rsrc.isUserOwner()) {
throw new AuthException("not allowed to unmark private");
@@ -63,7 +62,7 @@ public class DeletePrivate
ChangeControl control = rsrc.getControl();
SetPrivateOp op = new SetPrivateOp(cmUtil, false);
try (BatchUpdate u =
batchUpdateFactory.create(
updateFactory.create(
dbProvider.get(),
control.getProject().getNameKey(),
control.getUser(),

View File

@@ -16,7 +16,6 @@ package com.google.gerrit.server.change;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.change.Index.Input;
@@ -24,6 +23,9 @@ import com.google.gerrit.server.index.change.ChangeIndexer;
import com.google.gerrit.server.permissions.GlobalPermission;
import com.google.gerrit.server.permissions.PermissionBackend;
import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -31,7 +33,7 @@ import com.google.inject.Singleton;
import java.io.IOException;
@Singleton
public class Index implements RestModifyView<ChangeResource, Input> {
public class Index extends RetryingRestModifyView<ChangeResource, Input, Response<?>> {
public static class Input {}
private final Provider<ReviewDb> db;
@@ -42,9 +44,11 @@ public class Index implements RestModifyView<ChangeResource, Input> {
@Inject
Index(
Provider<ReviewDb> db,
RetryHelper retryHelper,
PermissionBackend permissionBackend,
Provider<CurrentUser> user,
ChangeIndexer indexer) {
super(retryHelper);
this.db = db;
this.permissionBackend = permissionBackend;
this.user = user;
@@ -52,7 +56,8 @@ public class Index implements RestModifyView<ChangeResource, Input> {
}
@Override
public Response<?> apply(ChangeResource rsrc, Input input)
protected Response<?> applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input input)
throws IOException, AuthException, OrmException, PermissionBackendException {
permissionBackend.user(user).check(GlobalPermission.MAINTAIN_SERVER);
indexer.index(db.get(), rsrc.getChange());

View File

@@ -23,7 +23,6 @@ import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Change.Status;
@@ -42,6 +41,8 @@ import com.google.gerrit.server.query.change.InternalChangeQuery;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.BatchUpdateOp;
import com.google.gerrit.server.update.ChangeContext;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -55,13 +56,12 @@ import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk;
@Singleton
public class Move implements RestModifyView<ChangeResource, MoveInput> {
public class Move extends RetryingRestModifyView<ChangeResource, MoveInput, ChangeInfo> {
private final Provider<ReviewDb> dbProvider;
private final ChangeJson.Factory json;
private final GitRepositoryManager repoManager;
private final Provider<InternalChangeQuery> queryProvider;
private final ChangeMessagesUtil cmUtil;
private final BatchUpdate.Factory batchUpdateFactory;
private final PatchSetUtil psUtil;
@Inject
@@ -71,19 +71,20 @@ public class Move implements RestModifyView<ChangeResource, MoveInput> {
GitRepositoryManager repoManager,
Provider<InternalChangeQuery> queryProvider,
ChangeMessagesUtil cmUtil,
BatchUpdate.Factory batchUpdateFactory,
RetryHelper retryHelper,
PatchSetUtil psUtil) {
super(retryHelper);
this.dbProvider = dbProvider;
this.json = json;
this.repoManager = repoManager;
this.queryProvider = queryProvider;
this.cmUtil = cmUtil;
this.batchUpdateFactory = batchUpdateFactory;
this.psUtil = psUtil;
}
@Override
public ChangeInfo apply(ChangeResource req, MoveInput input)
protected ChangeInfo applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource req, MoveInput input)
throws RestApiException, OrmException, UpdateException {
ChangeControl control = req.getControl();
input.destinationBranch = RefNames.fullName(input.destinationBranch);
@@ -92,7 +93,7 @@ public class Move implements RestModifyView<ChangeResource, MoveInput> {
}
try (BatchUpdate u =
batchUpdateFactory.create(
updateFactory.create(
dbProvider.get(), req.getChange().getProject(), control.getUser(), TimeUtil.nowTs())) {
u.addOp(req.getChange().getId(), new Op(input));
u.execute();

View File

@@ -19,12 +19,13 @@ import com.google.gerrit.common.TimeUtil;
import com.google.gerrit.extensions.api.changes.HashtagsInput;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.extensions.webui.UiAction;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.permissions.ChangePermission;
import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -32,28 +33,28 @@ import com.google.inject.Singleton;
@Singleton
public class PostHashtags
implements RestModifyView<ChangeResource, HashtagsInput>, UiAction<ChangeResource> {
extends RetryingRestModifyView<
ChangeResource, HashtagsInput, Response<ImmutableSortedSet<String>>>
implements UiAction<ChangeResource> {
private final Provider<ReviewDb> db;
private final BatchUpdate.Factory batchUpdateFactory;
private final SetHashtagsOp.Factory hashtagsFactory;
@Inject
PostHashtags(
Provider<ReviewDb> db,
BatchUpdate.Factory batchUpdateFactory,
SetHashtagsOp.Factory hashtagsFactory) {
Provider<ReviewDb> db, RetryHelper retryHelper, SetHashtagsOp.Factory hashtagsFactory) {
super(retryHelper);
this.db = db;
this.batchUpdateFactory = batchUpdateFactory;
this.hashtagsFactory = hashtagsFactory;
}
@Override
public Response<ImmutableSortedSet<String>> apply(ChangeResource req, HashtagsInput input)
protected Response<ImmutableSortedSet<String>> applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource req, HashtagsInput input)
throws RestApiException, UpdateException, PermissionBackendException {
req.permissions().check(ChangePermission.EDIT_HASHTAGS);
try (BatchUpdate bu =
batchUpdateFactory.create(
updateFactory.create(
db.get(), req.getChange().getProject(), req.getControl().getUser(), TimeUtil.nowTs())) {
SetHashtagsOp op = hashtagsFactory.create(input);
bu.addOp(req.getId(), op);

View File

@@ -37,7 +37,6 @@ import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.AccountGroup;
@@ -65,6 +64,8 @@ import com.google.gerrit.server.project.NoSuchProjectException;
import com.google.gerrit.server.project.ProjectCache;
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;
import com.google.gerrit.server.update.UpdateException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -78,7 +79,8 @@ import java.util.Set;
import org.eclipse.jgit.lib.Config;
@Singleton
public class PostReviewers implements RestModifyView<ChangeResource, AddReviewerInput> {
public class PostReviewers
extends RetryingRestModifyView<ChangeResource, AddReviewerInput, AddReviewerResult> {
public static final int DEFAULT_MAX_REVIEWERS_WITHOUT_CHECK = 10;
public static final int DEFAULT_MAX_REVIEWERS = 20;
@@ -92,7 +94,6 @@ public class PostReviewers implements RestModifyView<ChangeResource, AddReviewer
private final AccountLoader.Factory accountLoaderFactory;
private final Provider<ReviewDb> dbProvider;
private final ChangeData.Factory changeDataFactory;
private final BatchUpdate.Factory batchUpdateFactory;
private final IdentifiedUser.GenericFactory identifiedUserFactory;
private final Config cfg;
private final ReviewerJson json;
@@ -113,7 +114,7 @@ public class PostReviewers implements RestModifyView<ChangeResource, AddReviewer
AccountLoader.Factory accountLoaderFactory,
Provider<ReviewDb> db,
ChangeData.Factory changeDataFactory,
BatchUpdate.Factory batchUpdateFactory,
RetryHelper retryHelper,
IdentifiedUser.GenericFactory identifiedUserFactory,
@GerritServerConfig Config cfg,
ReviewerJson json,
@@ -123,6 +124,7 @@ public class PostReviewers implements RestModifyView<ChangeResource, AddReviewer
Provider<AnonymousUser> anonymousProvider,
PostReviewersOp.Factory postReviewersOpFactory,
OutgoingEmailValidator validator) {
super(retryHelper);
this.accounts = accounts;
this.reviewerFactory = reviewerFactory;
this.permissionBackend = permissionBackend;
@@ -131,7 +133,6 @@ public class PostReviewers implements RestModifyView<ChangeResource, AddReviewer
this.accountLoaderFactory = accountLoaderFactory;
this.dbProvider = db;
this.changeDataFactory = changeDataFactory;
this.batchUpdateFactory = batchUpdateFactory;
this.identifiedUserFactory = identifiedUserFactory;
this.cfg = cfg;
this.json = json;
@@ -144,7 +145,8 @@ public class PostReviewers implements RestModifyView<ChangeResource, AddReviewer
}
@Override
public AddReviewerResult apply(ChangeResource rsrc, AddReviewerInput input)
protected AddReviewerResult applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource rsrc, AddReviewerInput input)
throws IOException, OrmException, RestApiException, UpdateException,
PermissionBackendException {
if (input.reviewer == null) {
@@ -156,7 +158,7 @@ public class PostReviewers implements RestModifyView<ChangeResource, AddReviewer
return addition.result;
}
try (BatchUpdate bu =
batchUpdateFactory.create(
updateFactory.create(
dbProvider.get(), rsrc.getProject(), rsrc.getUser(), TimeUtil.nowTs())) {
Change.Id id = rsrc.getChange().getId();
bu.addOp(id, addition.op);

View File

@@ -49,6 +49,8 @@ import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.BatchUpdateOp;
import com.google.gerrit.server.update.ChangeContext;
import com.google.gerrit.server.update.Context;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -131,16 +133,19 @@ public class PublishDraftPatchSet
}
}
public static class CurrentRevision implements RestModifyView<ChangeResource, Input> {
public static class CurrentRevision
extends RetryingRestModifyView<ChangeResource, Input, Response<?>> {
private final PublishDraftPatchSet publish;
@Inject
CurrentRevision(PublishDraftPatchSet publish) {
CurrentRevision(RetryHelper retryHelper, PublishDraftPatchSet publish) {
super(retryHelper);
this.publish = publish;
}
@Override
public Response<?> apply(ChangeResource rsrc, Input input)
protected Response<?> applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input input)
throws RestApiException, UpdateException {
return publish.apply(
rsrc.getControl().getUser(),

View File

@@ -24,7 +24,6 @@ import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
import com.google.gerrit.extensions.webui.UiAction;
import com.google.gerrit.reviewdb.server.ReviewDb;
@@ -35,6 +34,8 @@ import com.google.gerrit.server.change.PostReviewers.Addition;
import com.google.gerrit.server.permissions.ChangePermission;
import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -43,12 +44,11 @@ import com.google.inject.Singleton;
import java.io.IOException;
@Singleton
public class PutAssignee
implements RestModifyView<ChangeResource, AssigneeInput>, UiAction<ChangeResource> {
public class PutAssignee extends RetryingRestModifyView<ChangeResource, AssigneeInput, AccountInfo>
implements UiAction<ChangeResource> {
private final AccountsCollection accounts;
private final SetAssigneeOp.Factory assigneeFactory;
private final BatchUpdate.Factory batchUpdateFactory;
private final Provider<ReviewDb> db;
private final PostReviewers postReviewers;
private final AccountLoader.Factory accountLoaderFactory;
@@ -57,20 +57,21 @@ public class PutAssignee
PutAssignee(
AccountsCollection accounts,
SetAssigneeOp.Factory assigneeFactory,
BatchUpdate.Factory batchUpdateFactory,
RetryHelper retryHelper,
Provider<ReviewDb> db,
PostReviewers postReviewers,
AccountLoader.Factory accountLoaderFactory) {
super(retryHelper);
this.accounts = accounts;
this.assigneeFactory = assigneeFactory;
this.batchUpdateFactory = batchUpdateFactory;
this.db = db;
this.postReviewers = postReviewers;
this.accountLoaderFactory = accountLoaderFactory;
}
@Override
public AccountInfo apply(ChangeResource rsrc, AssigneeInput input)
protected AccountInfo applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource rsrc, AssigneeInput input)
throws RestApiException, UpdateException, OrmException, IOException,
PermissionBackendException {
rsrc.permissions().check(ChangePermission.EDIT_ASSIGNEE);
@@ -91,7 +92,7 @@ public class PutAssignee
}
try (BatchUpdate bu =
batchUpdateFactory.create(
updateFactory.create(
db.get(),
rsrc.getChange().getProject(),
rsrc.getControl().getUser(),

View File

@@ -18,13 +18,14 @@ import com.google.gerrit.common.TimeUtil;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.extensions.webui.UiAction;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.ChangeMessagesUtil;
import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -32,25 +33,23 @@ import com.google.inject.Singleton;
@Singleton
public class PutPrivate
implements RestModifyView<ChangeResource, PutPrivate.Input>, UiAction<ChangeResource> {
extends RetryingRestModifyView<ChangeResource, PutPrivate.Input, Response<String>>
implements UiAction<ChangeResource> {
public static class Input {}
private final ChangeMessagesUtil cmUtil;
private final Provider<ReviewDb> dbProvider;
private final BatchUpdate.Factory batchUpdateFactory;
@Inject
PutPrivate(
Provider<ReviewDb> dbProvider,
BatchUpdate.Factory batchUpdateFactory,
ChangeMessagesUtil cmUtil) {
PutPrivate(Provider<ReviewDb> dbProvider, RetryHelper retryHelper, ChangeMessagesUtil cmUtil) {
super(retryHelper);
this.dbProvider = dbProvider;
this.batchUpdateFactory = batchUpdateFactory;
this.cmUtil = cmUtil;
}
@Override
public Response<String> apply(ChangeResource rsrc, Input input)
protected Response<String> applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input input)
throws RestApiException, UpdateException {
if (!rsrc.isUserOwner()) {
throw new AuthException("not allowed to mark private");
@@ -63,7 +62,7 @@ public class PutPrivate
ChangeControl control = rsrc.getControl();
SetPrivateOp op = new SetPrivateOp(cmUtil, true);
try (BatchUpdate u =
batchUpdateFactory.create(
updateFactory.create(
dbProvider.get(),
control.getProject().getNameKey(),
control.getUser(),

View File

@@ -40,6 +40,8 @@ import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.project.NoSuchChangeException;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -210,18 +212,21 @@ public class Rebase
.setEnabled(enabled);
}
public static class CurrentRevision implements RestModifyView<ChangeResource, RebaseInput> {
public static class CurrentRevision
extends RetryingRestModifyView<ChangeResource, RebaseInput, ChangeInfo> {
private final PatchSetUtil psUtil;
private final Rebase rebase;
@Inject
CurrentRevision(PatchSetUtil psUtil, Rebase rebase) {
CurrentRevision(RetryHelper retryHelper, PatchSetUtil psUtil, Rebase rebase) {
super(retryHelper);
this.psUtil = psUtil;
this.rebase = rebase;
}
@Override
public ChangeInfo apply(ChangeResource rsrc, RebaseInput input)
protected ChangeInfo applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource rsrc, RebaseInput input)
throws EmailException, OrmException, UpdateException, RestApiException, IOException,
PermissionBackendException {
PatchSet ps = psUtil.current(rebase.dbProvider.get(), rsrc.getNotes());

View File

@@ -20,7 +20,6 @@ import com.google.gerrit.extensions.api.changes.RestoreInput;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.extensions.webui.UiAction;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Change.Status;
@@ -41,6 +40,8 @@ import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.BatchUpdateOp;
import com.google.gerrit.server.update.ChangeContext;
import com.google.gerrit.server.update.Context;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -50,8 +51,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class Restore
implements RestModifyView<ChangeResource, RestoreInput>, UiAction<ChangeResource> {
public class Restore extends RetryingRestModifyView<ChangeResource, RestoreInput, ChangeInfo>
implements UiAction<ChangeResource> {
private static final Logger log = LoggerFactory.getLogger(Restore.class);
private final RestoredSender.Factory restoredSenderFactory;
@@ -59,7 +60,6 @@ public class Restore
private final ChangeJson.Factory json;
private final ChangeMessagesUtil cmUtil;
private final PatchSetUtil psUtil;
private final BatchUpdate.Factory batchUpdateFactory;
private final ChangeRestored changeRestored;
@Inject
@@ -69,26 +69,27 @@ public class Restore
ChangeJson.Factory json,
ChangeMessagesUtil cmUtil,
PatchSetUtil psUtil,
BatchUpdate.Factory batchUpdateFactory,
RetryHelper retryHelper,
ChangeRestored changeRestored) {
super(retryHelper);
this.restoredSenderFactory = restoredSenderFactory;
this.dbProvider = dbProvider;
this.json = json;
this.cmUtil = cmUtil;
this.psUtil = psUtil;
this.batchUpdateFactory = batchUpdateFactory;
this.changeRestored = changeRestored;
}
@Override
public ChangeInfo apply(ChangeResource req, RestoreInput input)
protected ChangeInfo applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource req, RestoreInput input)
throws RestApiException, UpdateException, OrmException, PermissionBackendException {
req.permissions().database(dbProvider).check(ChangePermission.RESTORE);
ChangeControl ctl = req.getControl();
Op op = new Op(input);
try (BatchUpdate u =
batchUpdateFactory.create(
updateFactory.create(
dbProvider.get(), req.getChange().getProject(), ctl.getUser(), TimeUtil.nowTs())) {
u.addOp(req.getId(), op).execute();
}

View File

@@ -23,7 +23,6 @@ import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.extensions.webui.UiAction;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
@@ -50,6 +49,8 @@ import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.BatchUpdateOp;
import com.google.gerrit.server.update.ChangeContext;
import com.google.gerrit.server.update.Context;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -74,15 +75,14 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class Revert
implements RestModifyView<ChangeResource, RevertInput>, UiAction<ChangeResource> {
public class Revert extends RetryingRestModifyView<ChangeResource, RevertInput, ChangeInfo>
implements UiAction<ChangeResource> {
private static final Logger log = LoggerFactory.getLogger(Revert.class);
private final Provider<ReviewDb> db;
private final GitRepositoryManager repoManager;
private final ChangeInserter.Factory changeInserterFactory;
private final ChangeMessagesUtil cmUtil;
private final BatchUpdate.Factory updateFactory;
private final Sequences seq;
private final PatchSetUtil psUtil;
private final RevertedSender.Factory revertedSenderFactory;
@@ -97,7 +97,7 @@ public class Revert
GitRepositoryManager repoManager,
ChangeInserter.Factory changeInserterFactory,
ChangeMessagesUtil cmUtil,
BatchUpdate.Factory updateFactory,
RetryHelper retryHelper,
Sequences seq,
PatchSetUtil psUtil,
RevertedSender.Factory revertedSenderFactory,
@@ -105,11 +105,11 @@ public class Revert
@GerritPersonIdent PersonIdent serverIdent,
ApprovalsUtil approvalsUtil,
ChangeReverted changeReverted) {
super(retryHelper);
this.db = db;
this.repoManager = repoManager;
this.changeInserterFactory = changeInserterFactory;
this.cmUtil = cmUtil;
this.updateFactory = updateFactory;
this.seq = seq;
this.psUtil = psUtil;
this.revertedSenderFactory = revertedSenderFactory;
@@ -120,7 +120,8 @@ public class Revert
}
@Override
public ChangeInfo apply(ChangeResource req, RevertInput input)
protected ChangeInfo applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource req, RevertInput input)
throws IOException, OrmException, RestApiException, UpdateException, NoSuchChangeException {
RefControl refControl = req.getControl().getRefControl();
ProjectControl projectControl = req.getControl().getProjectControl();
@@ -137,11 +138,12 @@ public class Revert
throw new ResourceConflictException("change is " + ChangeUtil.status(change));
}
Change.Id revertedChangeId = revert(req.getControl(), Strings.emptyToNull(input.message));
Change.Id revertedChangeId =
revert(updateFactory, req.getControl(), Strings.emptyToNull(input.message));
return json.noOptions().format(req.getProject(), revertedChangeId);
}
private Change.Id revert(ChangeControl ctl, String message)
private Change.Id revert(BatchUpdate.Factory updateFactory, ChangeControl ctl, String message)
throws OrmException, IOException, RestApiException, UpdateException {
Change.Id changeIdToRevert = ctl.getChange().getId();
PatchSet.Id patchSetId = ctl.getChange().currentPatchSetId();

View File

@@ -19,7 +19,6 @@ 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.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.extensions.webui.UiAction;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Change.Status;
@@ -28,28 +27,29 @@ import com.google.gerrit.server.ChangeMessagesUtil;
import com.google.gerrit.server.ChangeUtil;
import com.google.gerrit.server.change.WorkInProgressOp.Input;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
@Singleton
public class SetReadyForReview
implements RestModifyView<ChangeResource, Input>, UiAction<ChangeResource> {
private final BatchUpdate.Factory batchUpdateFactory;
public class SetReadyForReview extends RetryingRestModifyView<ChangeResource, Input, Response<?>>
implements UiAction<ChangeResource> {
private final ChangeMessagesUtil cmUtil;
private final Provider<ReviewDb> db;
@Inject
SetReadyForReview(
BatchUpdate.Factory batchUpdateFactory, ChangeMessagesUtil cmUtil, Provider<ReviewDb> db) {
this.batchUpdateFactory = batchUpdateFactory;
SetReadyForReview(RetryHelper retryHelper, ChangeMessagesUtil cmUtil, Provider<ReviewDb> db) {
super(retryHelper);
this.cmUtil = cmUtil;
this.db = db;
}
@Override
public Response<?> apply(ChangeResource rsrc, Input input)
protected Response<?> applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input input)
throws RestApiException, UpdateException {
Change change = rsrc.getChange();
if (!rsrc.isUserOwner()) {
@@ -65,7 +65,7 @@ public class SetReadyForReview
}
try (BatchUpdate bu =
batchUpdateFactory.create(db.get(), rsrc.getProject(), rsrc.getUser(), TimeUtil.nowTs())) {
updateFactory.create(db.get(), rsrc.getProject(), rsrc.getUser(), TimeUtil.nowTs())) {
bu.addOp(rsrc.getChange().getId(), new WorkInProgressOp(cmUtil, false, input));
bu.execute();
return Response.ok("");

View File

@@ -19,7 +19,6 @@ 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.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.extensions.webui.UiAction;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Change.Status;
@@ -28,28 +27,29 @@ import com.google.gerrit.server.ChangeMessagesUtil;
import com.google.gerrit.server.ChangeUtil;
import com.google.gerrit.server.change.WorkInProgressOp.Input;
import com.google.gerrit.server.update.BatchUpdate;
import com.google.gerrit.server.update.RetryHelper;
import com.google.gerrit.server.update.RetryingRestModifyView;
import com.google.gerrit.server.update.UpdateException;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
@Singleton
public class SetWorkInProgress
implements RestModifyView<ChangeResource, Input>, UiAction<ChangeResource> {
private final BatchUpdate.Factory batchUpdateFactory;
public class SetWorkInProgress extends RetryingRestModifyView<ChangeResource, Input, Response<?>>
implements UiAction<ChangeResource> {
private final ChangeMessagesUtil cmUtil;
private final Provider<ReviewDb> db;
@Inject
SetWorkInProgress(
BatchUpdate.Factory batchUpdateFactory, ChangeMessagesUtil cmUtil, Provider<ReviewDb> db) {
this.batchUpdateFactory = batchUpdateFactory;
SetWorkInProgress(RetryHelper retryHelper, ChangeMessagesUtil cmUtil, Provider<ReviewDb> db) {
super(retryHelper);
this.cmUtil = cmUtil;
this.db = db;
}
@Override
public Response<?> apply(ChangeResource rsrc, Input input)
protected Response<?> applyImpl(
BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input input)
throws RestApiException, UpdateException {
Change change = rsrc.getChange();
if (!rsrc.isUserOwner()) {
@@ -65,7 +65,7 @@ public class SetWorkInProgress
}
try (BatchUpdate bu =
batchUpdateFactory.create(db.get(), rsrc.getProject(), rsrc.getUser(), TimeUtil.nowTs())) {
updateFactory.create(db.get(), rsrc.getProject(), rsrc.getUser(), TimeUtil.nowTs())) {
bu.addOp(rsrc.getChange().getId(), new WorkInProgressOp(cmUtil, true, input));
bu.execute();
return Response.ok("");

View File

@@ -14,17 +14,14 @@
package com.google.gerrit.sshd.commands;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.server.change.ChangeResource;
import com.google.gerrit.server.change.Index;
import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.sshd.ChangeArgumentParser;
import com.google.gerrit.sshd.CommandMetaData;
import com.google.gerrit.sshd.SshCommand;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import org.kohsuke.args4j.Argument;
@@ -58,7 +55,7 @@ final class IndexChangesCommand extends SshCommand {
for (ChangeResource rsrc : changes.values()) {
try {
index.apply(rsrc, new Index.Input());
} catch (IOException | RestApiException | OrmException | PermissionBackendException e) {
} catch (Exception e) {
ok = false;
writeError(
"error", String.format("failed to index change %s: %s", rsrc.getId(), e.getMessage()));