Retry requests in RestApiServlet, no more retrying for Java API
Instead of implementing retrying of REST requests in base classes of REST endpoints, implement retrying of requests once in RestApiServlet. This has the following advantages: - We now automatically retry all modifying REST requests (not only change related modifying REST requests) - The implementations of the REST endpoints get easier (no longer need to extend a Retrying* base class, RetryHelper no longer needs to be injected). - It's no longer possible to forget to enable retrying for a REST endpoint (e.g. by just implementing the interface without extending a Retrying* base class) - Follow-up changes can easily add retrying for other types of requests (e.g. read requests or create/delete on collection). Before this change we would have needed to add another Retrying* base class and adapt all relevant REST endpoints to extend that base class. - In case of auto-retry-with-trace we do not need a complicated way to return the trace ID from the REST endpoint implementation back to RestApiServlet (means we can simplify the existing code in a follow-up change). - In RestApiServlet we have more information about the REST endpoint available and may include this information into traces on auto-retry (e.g. URL of the invoked REST endpoint). One important change in behavior with this change is that we are no longer retrying calls that are made through the Java extension API. This is actually good, because it prevents amplifying of retries when this API is used by plugins. Examples: - A plugin implements a new REST endpoint and uses the Java extension API to implement it. With the old behavior we would have retrying on the REST endpoint and retrying on each call to the Java extension API. However we would prefer to have retrying only on one level. - A plugin implements an extension point that is invoked from a REST endpoint and uses the Java extension API to implement it. With the old behavior we would have retrying on the REST endpoint and retrying on each call to the Java extension API. However we would prefer to have retrying only on one level. In addition it's also better for our tests (that mostly use the Java extension API) that retrying is not done, since the retry logic may obfuscate flaky behavior. RetryingRestModifyView and RetryingRestCollectionModifyView are now no longer needed and are removed. There was one small complication with removing RetryingRestModifyView. NoteDbUtil.guessRestApiHandler() was using this class as a marker to find the REST endpoint class from a stacktrace if the call was done through the Java API and not via REST. Instead of looking for RetryingRestModifyView in the stacktrace, we now watch out for a "com.google.gerrit.server.api.*ApiImpl" class. This may look a little fragile, but API classes are not supposed to change and if they do and this breaks we have a test that catches this (ReflogIT#guessRestApiInReflog). For reference here are sample stacktraces from before [1] and after this change [2]. [1] com.google.gerrit.server.notedb.NoteDbUtil.guessRestApiHandler(NoteDbUtil.java:74) at com.google.gerrit.server.notedb.NoteDbUpdateManager.execute(NoteDbUpdateManager.java:340) at com.google.gerrit.server.notedb.NoteDbUpdateManager.execute(NoteDbUpdateManager.java:305) at com.google.gerrit.server.update.BatchUpdate$ChangesHandle.execute(BatchUpdate.java:508) at com.google.gerrit.server.update.BatchUpdate.execute(BatchUpdate.java:141) at com.google.gerrit.server.update.BatchUpdate.execute(BatchUpdate.java:357) at com.google.gerrit.server.update.BatchUpdate.execute(BatchUpdate.java:361) at com.google.gerrit.server.restapi.change.PutTopic.applyImpl(PutTopic.java:78) at com.google.gerrit.server.restapi.change.PutTopic.applyImpl(PutTopic.java:1) at com.google.gerrit.server.update.RetryingRestModifyView.lambda$1(RetryingRestModifyView.java:43) at com.google.gerrit.server.update.RetryHelper.lambda$1(RetryHelper.java:274) at com.github.rholder.retry.AttemptTimeLimiters$NoAttemptTimeLimit.call(AttemptTimeLimiters.java:78) at com.github.rholder.retry.Retryer.call(Retryer.java:160) at com.google.gerrit.server.update.RetryHelper.executeWithTimeoutCount(RetryHelper.java:375) at com.google.gerrit.server.update.RetryHelper.executeWithAttemptAndTimeoutCount(RetryHelper.java:353) at com.google.gerrit.server.update.RetryHelper.execute(RetryHelper.java:257) at com.google.gerrit.server.update.RetryHelper.execute(RetryHelper.java:272) at com.google.gerrit.server.update.RetryingRestModifyView.apply(RetryingRestModifyView.java:43) at com.google.gerrit.server.api.changes.ChangeApiImpl.topic(ChangeApiImpl.java:430) at com.google.gerrit.acceptance.server.project.ReflogIT.guessRestApiInReflog(ReflogIT.java:60) ... [2] com.google.gerrit.server.notedb.NoteDbUtil.guessRestApiHandler(NoteDbUtil.java:72) at com.google.gerrit.server.notedb.NoteDbUpdateManager.execute(NoteDbUpdateManager.java:340) at com.google.gerrit.server.notedb.NoteDbUpdateManager.execute(NoteDbUpdateManager.java:305) at com.google.gerrit.server.update.BatchUpdate$ChangesHandle.execute(BatchUpdate.java:508) at com.google.gerrit.server.update.BatchUpdate.execute(BatchUpdate.java:141) at com.google.gerrit.server.update.BatchUpdate.execute(BatchUpdate.java:357) at com.google.gerrit.server.update.BatchUpdate.execute(BatchUpdate.java:361) at com.google.gerrit.server.restapi.change.PutTopic.apply(PutTopic.java:77) at com.google.gerrit.server.api.changes.ChangeApiImpl.topic(ChangeApiImpl.java:430) at com.google.gerrit.acceptance.server.project.ReflogIT.guessRestApiInReflog(ReflogIT.java:60) ... Signed-off-by: Edwin Kempin <ekempin@google.com> Change-Id: Ief5ee42aea9aad575e6927ee54e0b770fd14dc88
This commit is contained in:
committed by
David Pursehouse
parent
880a438c90
commit
cec334a06f
@@ -123,6 +123,9 @@ import com.google.gerrit.server.plugincontext.PluginSetContext;
|
|||||||
import com.google.gerrit.server.quota.QuotaException;
|
import com.google.gerrit.server.quota.QuotaException;
|
||||||
import com.google.gerrit.server.restapi.change.ChangesCollection;
|
import com.google.gerrit.server.restapi.change.ChangesCollection;
|
||||||
import com.google.gerrit.server.restapi.project.ProjectsCollection;
|
import com.google.gerrit.server.restapi.project.ProjectsCollection;
|
||||||
|
import com.google.gerrit.server.update.RetryHelper;
|
||||||
|
import com.google.gerrit.server.update.RetryHelper.Action;
|
||||||
|
import com.google.gerrit.server.update.RetryHelper.ActionType;
|
||||||
import com.google.gerrit.server.update.UpdateException;
|
import com.google.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.gerrit.util.http.CacheHeaders;
|
import com.google.gerrit.util.http.CacheHeaders;
|
||||||
@@ -241,6 +244,7 @@ public class RestApiServlet extends HttpServlet {
|
|||||||
final Config config;
|
final Config config;
|
||||||
final DynamicSet<PerformanceLogger> performanceLoggers;
|
final DynamicSet<PerformanceLogger> performanceLoggers;
|
||||||
final ChangeFinder changeFinder;
|
final ChangeFinder changeFinder;
|
||||||
|
final RetryHelper retryHelper;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
Globals(
|
Globals(
|
||||||
@@ -254,7 +258,8 @@ public class RestApiServlet extends HttpServlet {
|
|||||||
RestApiQuotaEnforcer quotaChecker,
|
RestApiQuotaEnforcer quotaChecker,
|
||||||
@GerritServerConfig Config config,
|
@GerritServerConfig Config config,
|
||||||
DynamicSet<PerformanceLogger> performanceLoggers,
|
DynamicSet<PerformanceLogger> performanceLoggers,
|
||||||
ChangeFinder changeFinder) {
|
ChangeFinder changeFinder,
|
||||||
|
RetryHelper retryHelper) {
|
||||||
this.currentUser = currentUser;
|
this.currentUser = currentUser;
|
||||||
this.webSession = webSession;
|
this.webSession = webSession;
|
||||||
this.paramParser = paramParser;
|
this.paramParser = paramParser;
|
||||||
@@ -266,6 +271,7 @@ public class RestApiServlet extends HttpServlet {
|
|||||||
this.config = config;
|
this.config = config;
|
||||||
this.performanceLoggers = performanceLoggers;
|
this.performanceLoggers = performanceLoggers;
|
||||||
this.changeFinder = changeFinder;
|
this.changeFinder = changeFinder;
|
||||||
|
this.retryHelper = retryHelper;
|
||||||
allowOrigin = makeAllowOrigin(config);
|
allowOrigin = makeAllowOrigin(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -503,7 +509,9 @@ public class RestApiServlet extends HttpServlet {
|
|||||||
|
|
||||||
Type type = inputType(m);
|
Type type = inputType(m);
|
||||||
inputRequestBody = parseRequest(req, type);
|
inputRequestBody = parseRequest(req, type);
|
||||||
response = m.apply(rsrc, inputRequestBody);
|
response =
|
||||||
|
invokeRestModifyViewWithRetry(traceContext, viewData, m, rsrc, inputRequestBody);
|
||||||
|
|
||||||
if (inputRequestBody instanceof RawInput) {
|
if (inputRequestBody instanceof RawInput) {
|
||||||
try (InputStream is = req.getInputStream()) {
|
try (InputStream is = req.getInputStream()) {
|
||||||
ServletUtils.consumeRequestBody(is);
|
ServletUtils.consumeRequestBody(is);
|
||||||
@@ -542,7 +550,9 @@ public class RestApiServlet extends HttpServlet {
|
|||||||
|
|
||||||
Type type = inputType(m);
|
Type type = inputType(m);
|
||||||
inputRequestBody = parseRequest(req, type);
|
inputRequestBody = parseRequest(req, type);
|
||||||
response = m.apply(rsrc, inputRequestBody);
|
response =
|
||||||
|
invokeRestCollectionModifyViewWithRetry(
|
||||||
|
traceContext, viewData, m, rsrc, inputRequestBody);
|
||||||
if (inputRequestBody instanceof RawInput) {
|
if (inputRequestBody instanceof RawInput) {
|
||||||
try (InputStream is = req.getInputStream()) {
|
try (InputStream is = req.getInputStream()) {
|
||||||
ServletUtils.consumeRequestBody(is);
|
ServletUtils.consumeRequestBody(is);
|
||||||
@@ -661,8 +671,7 @@ public class RestApiServlet extends HttpServlet {
|
|||||||
status = SC_INTERNAL_SERVER_ERROR;
|
status = SC_INTERNAL_SERVER_ERROR;
|
||||||
responseBytes = handleException(e, req, res);
|
responseBytes = handleException(e, req, res);
|
||||||
} finally {
|
} finally {
|
||||||
String metric =
|
String metric = getViewName(viewData);
|
||||||
viewData != null && viewData.view != null ? globals.metrics.view(viewData) : "_unknown";
|
|
||||||
globals.metrics.count.increment(metric);
|
globals.metrics.count.increment(metric);
|
||||||
if (status >= SC_BAD_REQUEST) {
|
if (status >= SC_BAD_REQUEST) {
|
||||||
globals.metrics.errorCount.increment(metric, status);
|
globals.metrics.errorCount.increment(metric, status);
|
||||||
@@ -688,6 +697,55 @@ public class RestApiServlet extends HttpServlet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Response<?> invokeRestModifyViewWithRetry(
|
||||||
|
TraceContext traceContext,
|
||||||
|
ViewData viewData,
|
||||||
|
RestModifyView<RestResource, Object> view,
|
||||||
|
RestResource rsrc,
|
||||||
|
Object inputRequestBody)
|
||||||
|
throws Exception {
|
||||||
|
return invokeRestEndpointWithRetry(
|
||||||
|
traceContext, viewData, () -> view.apply(rsrc, inputRequestBody));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Response<?> invokeRestCollectionModifyViewWithRetry(
|
||||||
|
TraceContext traceContext,
|
||||||
|
ViewData viewData,
|
||||||
|
RestCollectionModifyView<RestResource, RestResource, Object> view,
|
||||||
|
RestResource rsrc,
|
||||||
|
Object inputRequestBody)
|
||||||
|
throws Exception {
|
||||||
|
return invokeRestEndpointWithRetry(
|
||||||
|
traceContext, viewData, () -> view.apply(rsrc, inputRequestBody));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Response<?> invokeRestEndpointWithRetry(
|
||||||
|
TraceContext traceContext, ViewData viewData, Action<Response<?>> action) throws Exception {
|
||||||
|
RetryHelper.Options.Builder retryOptionsBuilder =
|
||||||
|
RetryHelper.options().caller(getViewName(viewData));
|
||||||
|
if (!traceContext.isTracing()) {
|
||||||
|
// enable automatic retry with tracing in case of non-recoverable failure
|
||||||
|
retryOptionsBuilder =
|
||||||
|
retryOptionsBuilder
|
||||||
|
.retryWithTrace(t -> !(t instanceof RestApiException))
|
||||||
|
.onAutoTrace(autoTraceId -> traceId = Optional.of(autoTraceId));
|
||||||
|
}
|
||||||
|
return globals.retryHelper.execute(
|
||||||
|
ActionType.REST_REQUEST,
|
||||||
|
action,
|
||||||
|
retryOptionsBuilder.build(),
|
||||||
|
t -> {
|
||||||
|
if (t instanceof UpdateException) {
|
||||||
|
t = t.getCause();
|
||||||
|
}
|
||||||
|
return t instanceof LockFailureException;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getViewName(ViewData viewData) {
|
||||||
|
return viewData != null && viewData.view != null ? globals.metrics.view(viewData) : "_unknown";
|
||||||
|
}
|
||||||
|
|
||||||
private static HttpServletRequest applyXdOverrides(HttpServletRequest req, QueryParams qp)
|
private static HttpServletRequest applyXdOverrides(HttpServletRequest req, QueryParams qp)
|
||||||
throws BadRequestException {
|
throws BadRequestException {
|
||||||
if (!isPost(req)) {
|
if (!isPost(req)) {
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import com.google.common.collect.ImmutableSet;
|
|||||||
import com.google.common.primitives.Ints;
|
import com.google.common.primitives.Ints;
|
||||||
import com.google.gerrit.entities.Account;
|
import com.google.gerrit.entities.Account;
|
||||||
import com.google.gerrit.extensions.restapi.RestModifyView;
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
import com.google.gerrit.server.update.RetryingRestModifyView;
|
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import org.eclipse.jgit.lib.PersonIdent;
|
import org.eclipse.jgit.lib.PersonIdent;
|
||||||
@@ -34,8 +33,7 @@ public class NoteDbUtil {
|
|||||||
private static final ImmutableList<String> PACKAGE_PREFIXES =
|
private static final ImmutableList<String> PACKAGE_PREFIXES =
|
||||||
ImmutableList.of("com.google.gerrit.server.", "com.google.gerrit.");
|
ImmutableList.of("com.google.gerrit.server.", "com.google.gerrit.");
|
||||||
private static final ImmutableSet<String> SERVLET_NAMES =
|
private static final ImmutableSet<String> SERVLET_NAMES =
|
||||||
ImmutableSet.of(
|
ImmutableSet.of("com.google.gerrit.httpd.restapi.RestApiServlet");
|
||||||
"com.google.gerrit.httpd.restapi.RestApiServlet", RetryingRestModifyView.class.getName());
|
|
||||||
|
|
||||||
/** Returns an AccountId for the given email address. */
|
/** Returns an AccountId for the given email address. */
|
||||||
public static Optional<Account.Id> parseIdent(PersonIdent ident) {
|
public static Optional<Account.Id> parseIdent(PersonIdent ident) {
|
||||||
@@ -73,6 +71,9 @@ public class NoteDbUtil {
|
|||||||
static String guessRestApiHandler() {
|
static String guessRestApiHandler() {
|
||||||
StackTraceElement[] trace = Thread.currentThread().getStackTrace();
|
StackTraceElement[] trace = Thread.currentThread().getStackTrace();
|
||||||
int i = findRestApiServlet(trace);
|
int i = findRestApiServlet(trace);
|
||||||
|
if (i < 0) {
|
||||||
|
i = findApiImpl(trace);
|
||||||
|
}
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -80,7 +81,7 @@ public class NoteDbUtil {
|
|||||||
for (i--; i >= 0; i--) {
|
for (i--; i >= 0; i--) {
|
||||||
String cn = trace[i].getClassName();
|
String cn = trace[i].getClassName();
|
||||||
Class<?> cls = Class.forName(cn);
|
Class<?> cls = Class.forName(cn);
|
||||||
if (RestModifyView.class.isAssignableFrom(cls) && cls != RetryingRestModifyView.class) {
|
if (RestModifyView.class.isAssignableFrom(cls)) {
|
||||||
return viewName(cn);
|
return viewName(cn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -110,6 +111,16 @@ public class NoteDbUtil {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int findApiImpl(StackTraceElement[] trace) {
|
||||||
|
for (int i = 0; i < trace.length; i++) {
|
||||||
|
String clazz = trace[i].getClassName();
|
||||||
|
if (clazz.startsWith("com.google.gerrit.server.api.") && clazz.endsWith("ApiImpl")) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
private static String viewName(String cn) {
|
private static String viewName(String cn) {
|
||||||
String impl = cn.replace('$', '.');
|
String impl = cn.replace('$', '.');
|
||||||
for (String p : PACKAGE_PREFIXES) {
|
for (String p : PACKAGE_PREFIXES) {
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import com.google.gerrit.extensions.api.changes.NotifyHandling;
|
|||||||
import com.google.gerrit.extensions.common.ChangeInfo;
|
import com.google.gerrit.extensions.common.ChangeInfo;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.server.CurrentUser;
|
import com.google.gerrit.server.CurrentUser;
|
||||||
import com.google.gerrit.server.PatchSetUtil;
|
import com.google.gerrit.server.PatchSetUtil;
|
||||||
@@ -34,8 +35,6 @@ import com.google.gerrit.server.notedb.ChangeNotes;
|
|||||||
import com.google.gerrit.server.permissions.ChangePermission;
|
import com.google.gerrit.server.permissions.ChangePermission;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -44,8 +43,8 @@ import java.io.IOException;
|
|||||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class Abandon extends RetryingRestModifyView<ChangeResource, AbandonInput, ChangeInfo>
|
public class Abandon
|
||||||
implements UiAction<ChangeResource> {
|
implements RestModifyView<ChangeResource, AbandonInput>, UiAction<ChangeResource> {
|
||||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||||
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
@@ -58,11 +57,9 @@ public class Abandon extends RetryingRestModifyView<ChangeResource, AbandonInput
|
|||||||
Abandon(
|
Abandon(
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
ChangeJson.Factory json,
|
ChangeJson.Factory json,
|
||||||
RetryHelper retryHelper,
|
|
||||||
AbandonOp.Factory abandonOpFactory,
|
AbandonOp.Factory abandonOpFactory,
|
||||||
NotifyResolver notifyResolver,
|
NotifyResolver notifyResolver,
|
||||||
PatchSetUtil patchSetUtil) {
|
PatchSetUtil patchSetUtil) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.json = json;
|
this.json = json;
|
||||||
this.abandonOpFactory = abandonOpFactory;
|
this.abandonOpFactory = abandonOpFactory;
|
||||||
@@ -71,7 +68,7 @@ public class Abandon extends RetryingRestModifyView<ChangeResource, AbandonInput
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<ChangeInfo> applyImpl(ChangeResource rsrc, AbandonInput input)
|
public Response<ChangeInfo> apply(ChangeResource rsrc, AbandonInput input)
|
||||||
throws RestApiException, UpdateException, PermissionBackendException, IOException,
|
throws RestApiException, UpdateException, PermissionBackendException, IOException,
|
||||||
ConfigInvalidException {
|
ConfigInvalidException {
|
||||||
// Not allowed to abandon if the current patch set is locked.
|
// Not allowed to abandon if the current patch set is locked.
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import com.google.gerrit.extensions.restapi.BadRequestException;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.server.change.ChangeJson;
|
import com.google.gerrit.server.change.ChangeJson;
|
||||||
import com.google.gerrit.server.change.RevisionResource;
|
import com.google.gerrit.server.change.RevisionResource;
|
||||||
@@ -39,8 +40,6 @@ import com.google.gerrit.server.project.NoSuchProjectException;
|
|||||||
import com.google.gerrit.server.project.ProjectCache;
|
import com.google.gerrit.server.project.ProjectCache;
|
||||||
import com.google.gerrit.server.submit.IntegrationException;
|
import com.google.gerrit.server.submit.IntegrationException;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
@@ -49,8 +48,7 @@ import org.eclipse.jgit.errors.ConfigInvalidException;
|
|||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class CherryPick
|
public class CherryPick
|
||||||
extends RetryingRestModifyView<RevisionResource, CherryPickInput, CherryPickChangeInfo>
|
implements RestModifyView<RevisionResource, CherryPickInput>, UiAction<RevisionResource> {
|
||||||
implements UiAction<RevisionResource> {
|
|
||||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||||
|
|
||||||
private final PermissionBackend permissionBackend;
|
private final PermissionBackend permissionBackend;
|
||||||
@@ -62,14 +60,12 @@ public class CherryPick
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
CherryPick(
|
CherryPick(
|
||||||
RetryHelper retryHelper,
|
|
||||||
PermissionBackend permissionBackend,
|
PermissionBackend permissionBackend,
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
CherryPickChange cherryPickChange,
|
CherryPickChange cherryPickChange,
|
||||||
ChangeJson.Factory json,
|
ChangeJson.Factory json,
|
||||||
ContributorAgreementsChecker contributorAgreements,
|
ContributorAgreementsChecker contributorAgreements,
|
||||||
ProjectCache projectCache) {
|
ProjectCache projectCache) {
|
||||||
super(retryHelper);
|
|
||||||
this.permissionBackend = permissionBackend;
|
this.permissionBackend = permissionBackend;
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.cherryPickChange = cherryPickChange;
|
this.cherryPickChange = cherryPickChange;
|
||||||
@@ -79,7 +75,7 @@ public class CherryPick
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response<CherryPickChangeInfo> applyImpl(RevisionResource rsrc, CherryPickInput input)
|
public Response<CherryPickChangeInfo> apply(RevisionResource rsrc, CherryPickInput input)
|
||||||
throws IOException, UpdateException, RestApiException, PermissionBackendException,
|
throws IOException, UpdateException, RestApiException, PermissionBackendException,
|
||||||
ConfigInvalidException, NoSuchProjectException {
|
ConfigInvalidException, NoSuchProjectException {
|
||||||
input.parent = input.parent == null ? 1 : input.parent;
|
input.parent = input.parent == null ? 1 : input.parent;
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import com.google.gerrit.extensions.restapi.BadRequestException;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
import com.google.gerrit.server.CurrentUser;
|
import com.google.gerrit.server.CurrentUser;
|
||||||
import com.google.gerrit.server.change.ChangeJson;
|
import com.google.gerrit.server.change.ChangeJson;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackend;
|
import com.google.gerrit.server.permissions.PermissionBackend;
|
||||||
@@ -35,8 +36,6 @@ import com.google.gerrit.server.project.InvalidChangeOperationException;
|
|||||||
import com.google.gerrit.server.project.NoSuchProjectException;
|
import com.google.gerrit.server.project.NoSuchProjectException;
|
||||||
import com.google.gerrit.server.submit.IntegrationException;
|
import com.google.gerrit.server.submit.IntegrationException;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Provider;
|
import com.google.inject.Provider;
|
||||||
@@ -45,8 +44,7 @@ import java.io.IOException;
|
|||||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class CherryPickCommit
|
public class CherryPickCommit implements RestModifyView<CommitResource, CherryPickInput> {
|
||||||
extends RetryingRestModifyView<CommitResource, CherryPickInput, CherryPickChangeInfo> {
|
|
||||||
private final PermissionBackend permissionBackend;
|
private final PermissionBackend permissionBackend;
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final Provider<CurrentUser> user;
|
private final Provider<CurrentUser> user;
|
||||||
@@ -56,14 +54,12 @@ public class CherryPickCommit
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
CherryPickCommit(
|
CherryPickCommit(
|
||||||
RetryHelper retryHelper,
|
|
||||||
PermissionBackend permissionBackend,
|
PermissionBackend permissionBackend,
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
Provider<CurrentUser> user,
|
Provider<CurrentUser> user,
|
||||||
CherryPickChange cherryPickChange,
|
CherryPickChange cherryPickChange,
|
||||||
ChangeJson.Factory json,
|
ChangeJson.Factory json,
|
||||||
ContributorAgreementsChecker contributorAgreements) {
|
ContributorAgreementsChecker contributorAgreements) {
|
||||||
super(retryHelper);
|
|
||||||
this.permissionBackend = permissionBackend;
|
this.permissionBackend = permissionBackend;
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.user = user;
|
this.user = user;
|
||||||
@@ -73,7 +69,7 @@ public class CherryPickCommit
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response<CherryPickChangeInfo> applyImpl(CommitResource rsrc, CherryPickInput input)
|
public Response<CherryPickChangeInfo> apply(CommitResource rsrc, CherryPickInput input)
|
||||||
throws IOException, UpdateException, RestApiException, PermissionBackendException,
|
throws IOException, UpdateException, RestApiException, PermissionBackendException,
|
||||||
ConfigInvalidException, NoSuchProjectException {
|
ConfigInvalidException, NoSuchProjectException {
|
||||||
String destination = Strings.nullToEmpty(input.destination).trim();
|
String destination = Strings.nullToEmpty(input.destination).trim();
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestCollectionModifyView;
|
||||||
import com.google.gerrit.extensions.restapi.TopLevelResource;
|
import com.google.gerrit.extensions.restapi.TopLevelResource;
|
||||||
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
|
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
|
||||||
import com.google.gerrit.server.CurrentUser;
|
import com.google.gerrit.server.CurrentUser;
|
||||||
@@ -69,8 +70,6 @@ import com.google.gerrit.server.query.change.InternalChangeQuery;
|
|||||||
import com.google.gerrit.server.restapi.project.CommitsCollection;
|
import com.google.gerrit.server.restapi.project.CommitsCollection;
|
||||||
import com.google.gerrit.server.restapi.project.ProjectsCollection;
|
import com.google.gerrit.server.restapi.project.ProjectsCollection;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
import com.google.gerrit.server.update.BatchUpdate;
|
||||||
import com.google.gerrit.server.update.RetryHelper;
|
|
||||||
import com.google.gerrit.server.update.RetryingRestCollectionModifyView;
|
|
||||||
import com.google.gerrit.server.update.UpdateException;
|
import com.google.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -103,8 +102,7 @@ import org.eclipse.jgit.util.ChangeIdUtil;
|
|||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class CreateChange
|
public class CreateChange
|
||||||
extends RetryingRestCollectionModifyView<
|
implements RestCollectionModifyView<TopLevelResource, ChangeResource, ChangeInput> {
|
||||||
TopLevelResource, ChangeResource, ChangeInput, ChangeInfo> {
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final String anonymousCowardName;
|
private final String anonymousCowardName;
|
||||||
private final GitRepositoryManager gitManager;
|
private final GitRepositoryManager gitManager;
|
||||||
@@ -127,7 +125,6 @@ public class CreateChange
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
CreateChange(
|
CreateChange(
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
@AnonymousCowardName String anonymousCowardName,
|
@AnonymousCowardName String anonymousCowardName,
|
||||||
GitRepositoryManager gitManager,
|
GitRepositoryManager gitManager,
|
||||||
@@ -146,7 +143,6 @@ public class CreateChange
|
|||||||
MergeUtil.Factory mergeUtilFactory,
|
MergeUtil.Factory mergeUtilFactory,
|
||||||
NotifyResolver notifyResolver,
|
NotifyResolver notifyResolver,
|
||||||
ContributorAgreementsChecker contributorAgreements) {
|
ContributorAgreementsChecker contributorAgreements) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.anonymousCowardName = anonymousCowardName;
|
this.anonymousCowardName = anonymousCowardName;
|
||||||
this.gitManager = gitManager;
|
this.gitManager = gitManager;
|
||||||
@@ -169,7 +165,7 @@ public class CreateChange
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<ChangeInfo> applyImpl(TopLevelResource parent, ChangeInput input)
|
public Response<ChangeInfo> apply(TopLevelResource parent, ChangeInput input)
|
||||||
throws IOException, InvalidChangeOperationException, RestApiException, UpdateException,
|
throws IOException, InvalidChangeOperationException, RestApiException, UpdateException,
|
||||||
PermissionBackendException, ConfigInvalidException {
|
PermissionBackendException, ConfigInvalidException {
|
||||||
if (!user.get().isIdentifiedUser()) {
|
if (!user.get().isIdentifiedUser()) {
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import com.google.gerrit.extensions.restapi.BadRequestException;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.restapi.UnprocessableEntityException;
|
||||||
import com.google.gerrit.extensions.restapi.Url;
|
import com.google.gerrit.extensions.restapi.Url;
|
||||||
import com.google.gerrit.server.CommentsUtil;
|
import com.google.gerrit.server.CommentsUtil;
|
||||||
@@ -36,8 +37,6 @@ import com.google.gerrit.server.permissions.PermissionBackendException;
|
|||||||
import com.google.gerrit.server.update.BatchUpdate;
|
import com.google.gerrit.server.update.BatchUpdate;
|
||||||
import com.google.gerrit.server.update.BatchUpdateOp;
|
import com.google.gerrit.server.update.BatchUpdateOp;
|
||||||
import com.google.gerrit.server.update.ChangeContext;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -46,8 +45,7 @@ import com.google.inject.Singleton;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class CreateDraftComment
|
public class CreateDraftComment implements RestModifyView<RevisionResource, DraftInput> {
|
||||||
extends RetryingRestModifyView<RevisionResource, DraftInput, CommentInfo> {
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final Provider<CommentJson> commentJson;
|
private final Provider<CommentJson> commentJson;
|
||||||
private final CommentsUtil commentsUtil;
|
private final CommentsUtil commentsUtil;
|
||||||
@@ -56,13 +54,11 @@ public class CreateDraftComment
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
CreateDraftComment(
|
CreateDraftComment(
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
Provider<CommentJson> commentJson,
|
Provider<CommentJson> commentJson,
|
||||||
CommentsUtil commentsUtil,
|
CommentsUtil commentsUtil,
|
||||||
PatchSetUtil psUtil,
|
PatchSetUtil psUtil,
|
||||||
PatchListCache patchListCache) {
|
PatchListCache patchListCache) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.commentJson = commentJson;
|
this.commentJson = commentJson;
|
||||||
this.commentsUtil = commentsUtil;
|
this.commentsUtil = commentsUtil;
|
||||||
@@ -71,7 +67,7 @@ public class CreateDraftComment
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<CommentInfo> applyImpl(RevisionResource rsrc, DraftInput in)
|
public Response<CommentInfo> apply(RevisionResource rsrc, DraftInput in)
|
||||||
throws RestApiException, UpdateException, PermissionBackendException {
|
throws RestApiException, UpdateException, PermissionBackendException {
|
||||||
if (Strings.isNullOrEmpty(in.path)) {
|
if (Strings.isNullOrEmpty(in.path)) {
|
||||||
throw new BadRequestException("path must be non-empty");
|
throw new BadRequestException("path must be non-empty");
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import com.google.gerrit.extensions.restapi.MergeConflictException;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.restapi.UnprocessableEntityException;
|
||||||
import com.google.gerrit.server.ChangeUtil;
|
import com.google.gerrit.server.ChangeUtil;
|
||||||
import com.google.gerrit.server.CurrentUser;
|
import com.google.gerrit.server.CurrentUser;
|
||||||
@@ -53,8 +54,6 @@ import com.google.gerrit.server.project.ProjectState;
|
|||||||
import com.google.gerrit.server.restapi.project.CommitsCollection;
|
import com.google.gerrit.server.restapi.project.CommitsCollection;
|
||||||
import com.google.gerrit.server.submit.MergeIdenticalTreeException;
|
import com.google.gerrit.server.submit.MergeIdenticalTreeException;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -75,8 +74,7 @@ import org.eclipse.jgit.revwalk.RevWalk;
|
|||||||
import org.eclipse.jgit.util.ChangeIdUtil;
|
import org.eclipse.jgit.util.ChangeIdUtil;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class CreateMergePatchSet
|
public class CreateMergePatchSet implements RestModifyView<ChangeResource, MergePatchSetInput> {
|
||||||
extends RetryingRestModifyView<ChangeResource, MergePatchSetInput, ChangeInfo> {
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final GitRepositoryManager gitManager;
|
private final GitRepositoryManager gitManager;
|
||||||
private final CommitsCollection commits;
|
private final CommitsCollection commits;
|
||||||
@@ -100,12 +98,10 @@ public class CreateMergePatchSet
|
|||||||
ChangeJson.Factory json,
|
ChangeJson.Factory json,
|
||||||
PatchSetUtil psUtil,
|
PatchSetUtil psUtil,
|
||||||
MergeUtil.Factory mergeUtilFactory,
|
MergeUtil.Factory mergeUtilFactory,
|
||||||
RetryHelper retryHelper,
|
|
||||||
PatchSetInserter.Factory patchSetInserterFactory,
|
PatchSetInserter.Factory patchSetInserterFactory,
|
||||||
ProjectCache projectCache,
|
ProjectCache projectCache,
|
||||||
ChangeFinder changeFinder,
|
ChangeFinder changeFinder,
|
||||||
PermissionBackend permissionBackend) {
|
PermissionBackend permissionBackend) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.gitManager = gitManager;
|
this.gitManager = gitManager;
|
||||||
this.commits = commits;
|
this.commits = commits;
|
||||||
@@ -121,7 +117,7 @@ public class CreateMergePatchSet
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<ChangeInfo> applyImpl(ChangeResource rsrc, MergePatchSetInput in)
|
public Response<ChangeInfo> apply(ChangeResource rsrc, MergePatchSetInput in)
|
||||||
throws IOException, RestApiException, UpdateException, PermissionBackendException {
|
throws IOException, RestApiException, UpdateException, PermissionBackendException {
|
||||||
// Not allowed to create a new patch set if the current patch set is locked.
|
// Not allowed to create a new patch set if the current patch set is locked.
|
||||||
psUtil.checkPatchSetNotLocked(rsrc.getNotes());
|
psUtil.checkPatchSetNotLocked(rsrc.getNotes());
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import com.google.gerrit.extensions.common.AccountInfo;
|
|||||||
import com.google.gerrit.extensions.common.Input;
|
import com.google.gerrit.extensions.common.Input;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
import com.google.gerrit.server.ChangeMessagesUtil;
|
import com.google.gerrit.server.ChangeMessagesUtil;
|
||||||
import com.google.gerrit.server.IdentifiedUser;
|
import com.google.gerrit.server.IdentifiedUser;
|
||||||
import com.google.gerrit.server.account.AccountLoader;
|
import com.google.gerrit.server.account.AccountLoader;
|
||||||
@@ -34,15 +35,13 @@ import com.google.gerrit.server.update.BatchUpdate;
|
|||||||
import com.google.gerrit.server.update.BatchUpdateOp;
|
import com.google.gerrit.server.update.BatchUpdateOp;
|
||||||
import com.google.gerrit.server.update.ChangeContext;
|
import com.google.gerrit.server.update.ChangeContext;
|
||||||
import com.google.gerrit.server.update.Context;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class DeleteAssignee extends RetryingRestModifyView<ChangeResource, Input, AccountInfo> {
|
public class DeleteAssignee implements RestModifyView<ChangeResource, Input> {
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final ChangeMessagesUtil cmUtil;
|
private final ChangeMessagesUtil cmUtil;
|
||||||
private final AssigneeChanged assigneeChanged;
|
private final AssigneeChanged assigneeChanged;
|
||||||
@@ -51,13 +50,11 @@ public class DeleteAssignee extends RetryingRestModifyView<ChangeResource, Input
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
DeleteAssignee(
|
DeleteAssignee(
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
ChangeMessagesUtil cmUtil,
|
ChangeMessagesUtil cmUtil,
|
||||||
AssigneeChanged assigneeChanged,
|
AssigneeChanged assigneeChanged,
|
||||||
IdentifiedUser.GenericFactory userFactory,
|
IdentifiedUser.GenericFactory userFactory,
|
||||||
AccountLoader.Factory accountLoaderFactory) {
|
AccountLoader.Factory accountLoaderFactory) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.cmUtil = cmUtil;
|
this.cmUtil = cmUtil;
|
||||||
this.assigneeChanged = assigneeChanged;
|
this.assigneeChanged = assigneeChanged;
|
||||||
@@ -66,7 +63,7 @@ public class DeleteAssignee extends RetryingRestModifyView<ChangeResource, Input
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<AccountInfo> applyImpl(ChangeResource rsrc, Input input)
|
public Response<AccountInfo> apply(ChangeResource rsrc, Input input)
|
||||||
throws RestApiException, UpdateException, PermissionBackendException {
|
throws RestApiException, UpdateException, PermissionBackendException {
|
||||||
rsrc.permissions().check(ChangePermission.EDIT_ASSIGNEE);
|
rsrc.permissions().check(ChangePermission.EDIT_ASSIGNEE);
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import com.google.gerrit.extensions.common.Input;
|
|||||||
import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
|
import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.server.change.ChangeResource;
|
import com.google.gerrit.server.change.ChangeResource;
|
||||||
import com.google.gerrit.server.change.DeleteChangeOp;
|
import com.google.gerrit.server.change.DeleteChangeOp;
|
||||||
@@ -28,31 +29,25 @@ import com.google.gerrit.server.permissions.ChangePermission;
|
|||||||
import com.google.gerrit.server.permissions.PermissionBackend;
|
import com.google.gerrit.server.permissions.PermissionBackend;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class DeleteChange extends RetryingRestModifyView<ChangeResource, Input, Object>
|
public class DeleteChange
|
||||||
implements UiAction<ChangeResource> {
|
implements RestModifyView<ChangeResource, Input>, UiAction<ChangeResource> {
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final DeleteChangeOp.Factory opFactory;
|
private final DeleteChangeOp.Factory opFactory;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public DeleteChange(
|
public DeleteChange(BatchUpdate.Factory updateFactory, DeleteChangeOp.Factory opFactory) {
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
|
||||||
DeleteChangeOp.Factory opFactory) {
|
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.opFactory = opFactory;
|
this.opFactory = opFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<Object> applyImpl(ChangeResource rsrc, Input input)
|
public Response<Object> apply(ChangeResource rsrc, Input input)
|
||||||
throws RestApiException, UpdateException, PermissionBackendException {
|
throws RestApiException, UpdateException, PermissionBackendException {
|
||||||
if (!isChangeDeletable(rsrc)) {
|
if (!isChangeDeletable(rsrc)) {
|
||||||
throw new MethodNotAllowedException("delete not permitted");
|
throw new MethodNotAllowedException("delete not permitted");
|
||||||
|
|||||||
@@ -40,8 +40,6 @@ import com.google.gerrit.server.permissions.PermissionBackendException;
|
|||||||
import com.google.gerrit.server.update.BatchUpdate;
|
import com.google.gerrit.server.update.BatchUpdate;
|
||||||
import com.google.gerrit.server.update.BatchUpdateOp;
|
import com.google.gerrit.server.update.BatchUpdateOp;
|
||||||
import com.google.gerrit.server.update.ChangeContext;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -53,8 +51,7 @@ import java.util.List;
|
|||||||
/** Deletes a change message by rewriting history. */
|
/** Deletes a change message by rewriting history. */
|
||||||
@Singleton
|
@Singleton
|
||||||
public class DeleteChangeMessage
|
public class DeleteChangeMessage
|
||||||
extends RetryingRestModifyView<
|
implements RestModifyView<ChangeMessageResource, DeleteChangeMessageInput> {
|
||||||
ChangeMessageResource, DeleteChangeMessageInput, ChangeMessageInfo> {
|
|
||||||
|
|
||||||
private final Provider<CurrentUser> userProvider;
|
private final Provider<CurrentUser> userProvider;
|
||||||
private final PermissionBackend permissionBackend;
|
private final PermissionBackend permissionBackend;
|
||||||
@@ -70,9 +67,7 @@ public class DeleteChangeMessage
|
|||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
ChangeMessagesUtil changeMessagesUtil,
|
ChangeMessagesUtil changeMessagesUtil,
|
||||||
AccountLoader.Factory accountLoaderFactory,
|
AccountLoader.Factory accountLoaderFactory,
|
||||||
ChangeNotes.Factory notesFactory,
|
ChangeNotes.Factory notesFactory) {
|
||||||
RetryHelper retryHelper) {
|
|
||||||
super(retryHelper);
|
|
||||||
this.userProvider = userProvider;
|
this.userProvider = userProvider;
|
||||||
this.permissionBackend = permissionBackend;
|
this.permissionBackend = permissionBackend;
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
@@ -82,7 +77,7 @@ public class DeleteChangeMessage
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response<ChangeMessageInfo> applyImpl(
|
public Response<ChangeMessageInfo> apply(
|
||||||
ChangeMessageResource resource, DeleteChangeMessageInput input)
|
ChangeMessageResource resource, DeleteChangeMessageInput input)
|
||||||
throws RestApiException, PermissionBackendException, UpdateException, IOException {
|
throws RestApiException, PermissionBackendException, UpdateException, IOException {
|
||||||
CurrentUser user = userProvider.get();
|
CurrentUser user = userProvider.get();
|
||||||
@@ -158,7 +153,7 @@ public class DeleteChangeMessage
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response<ChangeMessageInfo> apply(ChangeMessageResource resource, Input input)
|
public Response<ChangeMessageInfo> apply(ChangeMessageResource resource, Input input)
|
||||||
throws RestApiException {
|
throws RestApiException, PermissionBackendException, UpdateException, IOException {
|
||||||
return deleteChangeMessage.apply(resource, new DeleteChangeMessageInput());
|
return deleteChangeMessage.apply(resource, new DeleteChangeMessageInput());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
import com.google.gerrit.server.CommentsUtil;
|
import com.google.gerrit.server.CommentsUtil;
|
||||||
import com.google.gerrit.server.CurrentUser;
|
import com.google.gerrit.server.CurrentUser;
|
||||||
import com.google.gerrit.server.change.CommentResource;
|
import com.google.gerrit.server.change.CommentResource;
|
||||||
@@ -33,8 +34,6 @@ import com.google.gerrit.server.permissions.PermissionBackendException;
|
|||||||
import com.google.gerrit.server.update.BatchUpdate;
|
import com.google.gerrit.server.update.BatchUpdate;
|
||||||
import com.google.gerrit.server.update.BatchUpdateOp;
|
import com.google.gerrit.server.update.BatchUpdateOp;
|
||||||
import com.google.gerrit.server.update.ChangeContext;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -46,8 +45,7 @@ import java.util.Optional;
|
|||||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class DeleteComment
|
public class DeleteComment implements RestModifyView<CommentResource, DeleteCommentInput> {
|
||||||
extends RetryingRestModifyView<CommentResource, DeleteCommentInput, CommentInfo> {
|
|
||||||
|
|
||||||
private final Provider<CurrentUser> userProvider;
|
private final Provider<CurrentUser> userProvider;
|
||||||
private final PermissionBackend permissionBackend;
|
private final PermissionBackend permissionBackend;
|
||||||
@@ -58,14 +56,12 @@ public class DeleteComment
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public DeleteComment(
|
public DeleteComment(
|
||||||
RetryHelper retryHelper,
|
|
||||||
Provider<CurrentUser> userProvider,
|
Provider<CurrentUser> userProvider,
|
||||||
PermissionBackend permissionBackend,
|
PermissionBackend permissionBackend,
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
CommentsUtil commentsUtil,
|
CommentsUtil commentsUtil,
|
||||||
Provider<CommentJson> commentJson,
|
Provider<CommentJson> commentJson,
|
||||||
ChangeNotes.Factory notesFactory) {
|
ChangeNotes.Factory notesFactory) {
|
||||||
super(retryHelper);
|
|
||||||
this.userProvider = userProvider;
|
this.userProvider = userProvider;
|
||||||
this.permissionBackend = permissionBackend;
|
this.permissionBackend = permissionBackend;
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
@@ -75,7 +71,7 @@ public class DeleteComment
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response<CommentInfo> applyImpl(CommentResource rsrc, DeleteCommentInput input)
|
public Response<CommentInfo> apply(CommentResource rsrc, DeleteCommentInput input)
|
||||||
throws RestApiException, IOException, ConfigInvalidException, PermissionBackendException,
|
throws RestApiException, IOException, ConfigInvalidException, PermissionBackendException,
|
||||||
UpdateException {
|
UpdateException {
|
||||||
CurrentUser user = userProvider.get();
|
CurrentUser user = userProvider.get();
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import com.google.gerrit.extensions.common.Input;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
import com.google.gerrit.server.CommentsUtil;
|
import com.google.gerrit.server.CommentsUtil;
|
||||||
import com.google.gerrit.server.PatchSetUtil;
|
import com.google.gerrit.server.PatchSetUtil;
|
||||||
import com.google.gerrit.server.change.DraftCommentResource;
|
import com.google.gerrit.server.change.DraftCommentResource;
|
||||||
@@ -31,8 +32,6 @@ import com.google.gerrit.server.patch.PatchListNotAvailableException;
|
|||||||
import com.google.gerrit.server.update.BatchUpdate;
|
import com.google.gerrit.server.update.BatchUpdate;
|
||||||
import com.google.gerrit.server.update.BatchUpdateOp;
|
import com.google.gerrit.server.update.BatchUpdateOp;
|
||||||
import com.google.gerrit.server.update.ChangeContext;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -41,8 +40,7 @@ import java.util.Collections;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class DeleteDraftComment
|
public class DeleteDraftComment implements RestModifyView<DraftCommentResource, Input> {
|
||||||
extends RetryingRestModifyView<DraftCommentResource, Input, CommentInfo> {
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final CommentsUtil commentsUtil;
|
private final CommentsUtil commentsUtil;
|
||||||
private final PatchSetUtil psUtil;
|
private final PatchSetUtil psUtil;
|
||||||
@@ -53,9 +51,7 @@ public class DeleteDraftComment
|
|||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
CommentsUtil commentsUtil,
|
CommentsUtil commentsUtil,
|
||||||
PatchSetUtil psUtil,
|
PatchSetUtil psUtil,
|
||||||
RetryHelper retryHelper,
|
|
||||||
PatchListCache patchListCache) {
|
PatchListCache patchListCache) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.commentsUtil = commentsUtil;
|
this.commentsUtil = commentsUtil;
|
||||||
this.psUtil = psUtil;
|
this.psUtil = psUtil;
|
||||||
@@ -63,7 +59,7 @@ public class DeleteDraftComment
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<CommentInfo> applyImpl(DraftCommentResource rsrc, Input input)
|
public Response<CommentInfo> apply(DraftCommentResource rsrc, Input input)
|
||||||
throws RestApiException, UpdateException {
|
throws RestApiException, UpdateException {
|
||||||
try (BatchUpdate bu =
|
try (BatchUpdate bu =
|
||||||
updateFactory.create(rsrc.getChange().getProject(), rsrc.getUser(), TimeUtil.nowTs())) {
|
updateFactory.create(rsrc.getChange().getProject(), rsrc.getUser(), TimeUtil.nowTs())) {
|
||||||
|
|||||||
@@ -23,39 +23,35 @@ import com.google.gerrit.extensions.restapi.AuthException;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
import com.google.gerrit.server.change.ChangeResource;
|
import com.google.gerrit.server.change.ChangeResource;
|
||||||
import com.google.gerrit.server.change.SetPrivateOp;
|
import com.google.gerrit.server.change.SetPrivateOp;
|
||||||
import com.google.gerrit.server.permissions.GlobalPermission;
|
import com.google.gerrit.server.permissions.GlobalPermission;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackend;
|
import com.google.gerrit.server.permissions.PermissionBackend;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class DeletePrivate
|
public class DeletePrivate implements RestModifyView<ChangeResource, InputWithMessage> {
|
||||||
extends RetryingRestModifyView<ChangeResource, InputWithMessage, String> {
|
|
||||||
private final PermissionBackend permissionBackend;
|
private final PermissionBackend permissionBackend;
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final SetPrivateOp.Factory setPrivateOpFactory;
|
private final SetPrivateOp.Factory setPrivateOpFactory;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
DeletePrivate(
|
DeletePrivate(
|
||||||
RetryHelper retryHelper,
|
|
||||||
PermissionBackend permissionBackend,
|
PermissionBackend permissionBackend,
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
SetPrivateOp.Factory setPrivateOpFactory) {
|
SetPrivateOp.Factory setPrivateOpFactory) {
|
||||||
super(retryHelper);
|
|
||||||
this.permissionBackend = permissionBackend;
|
this.permissionBackend = permissionBackend;
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.setPrivateOpFactory = setPrivateOpFactory;
|
this.setPrivateOpFactory = setPrivateOpFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<String> applyImpl(ChangeResource rsrc, @Nullable InputWithMessage input)
|
public Response<String> apply(ChangeResource rsrc, @Nullable InputWithMessage input)
|
||||||
throws RestApiException, UpdateException {
|
throws RestApiException, UpdateException {
|
||||||
if (!canDeletePrivate(rsrc).value()) {
|
if (!canDeletePrivate(rsrc).value()) {
|
||||||
throw new AuthException("not allowed to unmark private");
|
throw new AuthException("not allowed to unmark private");
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import com.google.gerrit.server.change.ChangeResource;
|
|||||||
import com.google.gerrit.server.change.SetPrivateOp;
|
import com.google.gerrit.server.change.SetPrivateOp;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackend;
|
import com.google.gerrit.server.permissions.PermissionBackend;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
import com.google.gerrit.server.update.BatchUpdate;
|
||||||
import com.google.gerrit.server.update.RetryHelper;
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
@@ -29,11 +28,10 @@ import com.google.inject.Singleton;
|
|||||||
public class DeletePrivateByPost extends DeletePrivate implements UiAction<ChangeResource> {
|
public class DeletePrivateByPost extends DeletePrivate implements UiAction<ChangeResource> {
|
||||||
@Inject
|
@Inject
|
||||||
DeletePrivateByPost(
|
DeletePrivateByPost(
|
||||||
RetryHelper retryHelper,
|
|
||||||
PermissionBackend permissionBackend,
|
PermissionBackend permissionBackend,
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
SetPrivateOp.Factory setPrivateOpFactory) {
|
SetPrivateOp.Factory setPrivateOpFactory) {
|
||||||
super(retryHelper, permissionBackend, updateFactory, setPrivateOpFactory);
|
super(permissionBackend, updateFactory, setPrivateOpFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -19,40 +19,36 @@ import com.google.gerrit.extensions.api.changes.DeleteReviewerInput;
|
|||||||
import com.google.gerrit.extensions.api.changes.NotifyHandling;
|
import com.google.gerrit.extensions.api.changes.NotifyHandling;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
import com.google.gerrit.server.change.DeleteReviewerByEmailOp;
|
import com.google.gerrit.server.change.DeleteReviewerByEmailOp;
|
||||||
import com.google.gerrit.server.change.DeleteReviewerOp;
|
import com.google.gerrit.server.change.DeleteReviewerOp;
|
||||||
import com.google.gerrit.server.change.NotifyResolver;
|
import com.google.gerrit.server.change.NotifyResolver;
|
||||||
import com.google.gerrit.server.change.ReviewerResource;
|
import com.google.gerrit.server.change.ReviewerResource;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
import com.google.gerrit.server.update.BatchUpdate;
|
||||||
import com.google.gerrit.server.update.BatchUpdateOp;
|
import com.google.gerrit.server.update.BatchUpdateOp;
|
||||||
import com.google.gerrit.server.update.RetryHelper;
|
|
||||||
import com.google.gerrit.server.update.RetryingRestModifyView;
|
|
||||||
import com.google.gerrit.server.update.UpdateException;
|
import com.google.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class DeleteReviewer
|
public class DeleteReviewer implements RestModifyView<ReviewerResource, DeleteReviewerInput> {
|
||||||
extends RetryingRestModifyView<ReviewerResource, DeleteReviewerInput, Object> {
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final DeleteReviewerOp.Factory deleteReviewerOpFactory;
|
private final DeleteReviewerOp.Factory deleteReviewerOpFactory;
|
||||||
private final DeleteReviewerByEmailOp.Factory deleteReviewerByEmailOpFactory;
|
private final DeleteReviewerByEmailOp.Factory deleteReviewerByEmailOpFactory;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
DeleteReviewer(
|
DeleteReviewer(
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
DeleteReviewerOp.Factory deleteReviewerOpFactory,
|
DeleteReviewerOp.Factory deleteReviewerOpFactory,
|
||||||
DeleteReviewerByEmailOp.Factory deleteReviewerByEmailOpFactory) {
|
DeleteReviewerByEmailOp.Factory deleteReviewerByEmailOpFactory) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.deleteReviewerOpFactory = deleteReviewerOpFactory;
|
this.deleteReviewerOpFactory = deleteReviewerOpFactory;
|
||||||
this.deleteReviewerByEmailOpFactory = deleteReviewerByEmailOpFactory;
|
this.deleteReviewerByEmailOpFactory = deleteReviewerByEmailOpFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<Object> applyImpl(ReviewerResource rsrc, DeleteReviewerInput input)
|
public Response<Object> apply(ReviewerResource rsrc, DeleteReviewerInput input)
|
||||||
throws RestApiException, UpdateException {
|
throws RestApiException, UpdateException {
|
||||||
if (input == null) {
|
if (input == null) {
|
||||||
input = new DeleteReviewerInput();
|
input = new DeleteReviewerInput();
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
import com.google.gerrit.server.ApprovalsUtil;
|
import com.google.gerrit.server.ApprovalsUtil;
|
||||||
import com.google.gerrit.server.ChangeMessagesUtil;
|
import com.google.gerrit.server.ChangeMessagesUtil;
|
||||||
import com.google.gerrit.server.IdentifiedUser;
|
import com.google.gerrit.server.IdentifiedUser;
|
||||||
@@ -51,8 +52,6 @@ import com.google.gerrit.server.update.BatchUpdate;
|
|||||||
import com.google.gerrit.server.update.BatchUpdateOp;
|
import com.google.gerrit.server.update.BatchUpdateOp;
|
||||||
import com.google.gerrit.server.update.ChangeContext;
|
import com.google.gerrit.server.update.ChangeContext;
|
||||||
import com.google.gerrit.server.update.Context;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.LabelVote;
|
import com.google.gerrit.server.util.LabelVote;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
@@ -64,7 +63,7 @@ import java.util.Map;
|
|||||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class DeleteVote extends RetryingRestModifyView<VoteResource, DeleteVoteInput, Object> {
|
public class DeleteVote implements RestModifyView<VoteResource, DeleteVoteInput> {
|
||||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||||
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
@@ -80,7 +79,6 @@ public class DeleteVote extends RetryingRestModifyView<VoteResource, DeleteVoteI
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
DeleteVote(
|
DeleteVote(
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
ApprovalsUtil approvalsUtil,
|
ApprovalsUtil approvalsUtil,
|
||||||
PatchSetUtil psUtil,
|
PatchSetUtil psUtil,
|
||||||
@@ -91,7 +89,6 @@ public class DeleteVote extends RetryingRestModifyView<VoteResource, DeleteVoteI
|
|||||||
NotifyResolver notifyResolver,
|
NotifyResolver notifyResolver,
|
||||||
RemoveReviewerControl removeReviewerControl,
|
RemoveReviewerControl removeReviewerControl,
|
||||||
ProjectCache projectCache) {
|
ProjectCache projectCache) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.approvalsUtil = approvalsUtil;
|
this.approvalsUtil = approvalsUtil;
|
||||||
this.psUtil = psUtil;
|
this.psUtil = psUtil;
|
||||||
@@ -105,7 +102,7 @@ public class DeleteVote extends RetryingRestModifyView<VoteResource, DeleteVoteI
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<Object> applyImpl(VoteResource rsrc, DeleteVoteInput input)
|
public Response<Object> apply(VoteResource rsrc, DeleteVoteInput input)
|
||||||
throws RestApiException, UpdateException, IOException, ConfigInvalidException {
|
throws RestApiException, UpdateException, IOException, ConfigInvalidException {
|
||||||
if (input == null) {
|
if (input == null) {
|
||||||
input = new DeleteVoteInput();
|
input = new DeleteVoteInput();
|
||||||
|
|||||||
@@ -17,31 +17,29 @@ package com.google.gerrit.server.restapi.change;
|
|||||||
import com.google.gerrit.extensions.common.Input;
|
import com.google.gerrit.extensions.common.Input;
|
||||||
import com.google.gerrit.extensions.restapi.AuthException;
|
import com.google.gerrit.extensions.restapi.AuthException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
import com.google.gerrit.server.change.ChangeResource;
|
import com.google.gerrit.server.change.ChangeResource;
|
||||||
import com.google.gerrit.server.index.change.ChangeIndexer;
|
import com.google.gerrit.server.index.change.ChangeIndexer;
|
||||||
import com.google.gerrit.server.permissions.GlobalPermission;
|
import com.google.gerrit.server.permissions.GlobalPermission;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackend;
|
import com.google.gerrit.server.permissions.PermissionBackend;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||||
import com.google.gerrit.server.update.RetryHelper;
|
|
||||||
import com.google.gerrit.server.update.RetryingRestModifyView;
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class Index extends RetryingRestModifyView<ChangeResource, Input, Object> {
|
public class Index implements RestModifyView<ChangeResource, Input> {
|
||||||
private final PermissionBackend permissionBackend;
|
private final PermissionBackend permissionBackend;
|
||||||
private final ChangeIndexer indexer;
|
private final ChangeIndexer indexer;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
Index(RetryHelper retryHelper, PermissionBackend permissionBackend, ChangeIndexer indexer) {
|
Index(PermissionBackend permissionBackend, ChangeIndexer indexer) {
|
||||||
super(retryHelper);
|
|
||||||
this.permissionBackend = permissionBackend;
|
this.permissionBackend = permissionBackend;
|
||||||
this.indexer = indexer;
|
this.indexer = indexer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<Object> applyImpl(ChangeResource rsrc, Input input)
|
public Response<Object> apply(ChangeResource rsrc, Input input)
|
||||||
throws IOException, AuthException, PermissionBackendException {
|
throws IOException, AuthException, PermissionBackendException {
|
||||||
permissionBackend.currentUser().check(GlobalPermission.MAINTAIN_SERVER);
|
permissionBackend.currentUser().check(GlobalPermission.MAINTAIN_SERVER);
|
||||||
indexer.index(rsrc.getChange());
|
indexer.index(rsrc.getChange());
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.server.ApprovalsUtil;
|
import com.google.gerrit.server.ApprovalsUtil;
|
||||||
import com.google.gerrit.server.ChangeMessagesUtil;
|
import com.google.gerrit.server.ChangeMessagesUtil;
|
||||||
@@ -59,8 +60,6 @@ import com.google.gerrit.server.query.change.InternalChangeQuery;
|
|||||||
import com.google.gerrit.server.update.BatchUpdate;
|
import com.google.gerrit.server.update.BatchUpdate;
|
||||||
import com.google.gerrit.server.update.BatchUpdateOp;
|
import com.google.gerrit.server.update.BatchUpdateOp;
|
||||||
import com.google.gerrit.server.update.ChangeContext;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -76,8 +75,7 @@ import org.eclipse.jgit.revwalk.RevCommit;
|
|||||||
import org.eclipse.jgit.revwalk.RevWalk;
|
import org.eclipse.jgit.revwalk.RevWalk;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class Move extends RetryingRestModifyView<ChangeResource, MoveInput, ChangeInfo>
|
public class Move implements RestModifyView<ChangeResource, MoveInput>, UiAction<ChangeResource> {
|
||||||
implements UiAction<ChangeResource> {
|
|
||||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||||
|
|
||||||
private final PermissionBackend permissionBackend;
|
private final PermissionBackend permissionBackend;
|
||||||
@@ -99,12 +97,10 @@ public class Move extends RetryingRestModifyView<ChangeResource, MoveInput, Chan
|
|||||||
GitRepositoryManager repoManager,
|
GitRepositoryManager repoManager,
|
||||||
Provider<InternalChangeQuery> queryProvider,
|
Provider<InternalChangeQuery> queryProvider,
|
||||||
ChangeMessagesUtil cmUtil,
|
ChangeMessagesUtil cmUtil,
|
||||||
RetryHelper retryHelper,
|
|
||||||
PatchSetUtil psUtil,
|
PatchSetUtil psUtil,
|
||||||
ApprovalsUtil approvalsUtil,
|
ApprovalsUtil approvalsUtil,
|
||||||
ProjectCache projectCache,
|
ProjectCache projectCache,
|
||||||
@GerritServerConfig Config gerritConfig) {
|
@GerritServerConfig Config gerritConfig) {
|
||||||
super(retryHelper);
|
|
||||||
this.permissionBackend = permissionBackend;
|
this.permissionBackend = permissionBackend;
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.json = json;
|
this.json = json;
|
||||||
@@ -118,7 +114,7 @@ public class Move extends RetryingRestModifyView<ChangeResource, MoveInput, Chan
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<ChangeInfo> applyImpl(ChangeResource rsrc, MoveInput input)
|
public Response<ChangeInfo> apply(ChangeResource rsrc, MoveInput input)
|
||||||
throws RestApiException, UpdateException, PermissionBackendException, IOException {
|
throws RestApiException, UpdateException, PermissionBackendException, IOException {
|
||||||
if (!moveEnabled) {
|
if (!moveEnabled) {
|
||||||
// This will be removed with the above config once we reach consensus for the move change
|
// This will be removed with the above config once we reach consensus for the move change
|
||||||
|
|||||||
@@ -18,14 +18,13 @@ import com.google.common.collect.ImmutableSortedSet;
|
|||||||
import com.google.gerrit.extensions.api.changes.HashtagsInput;
|
import com.google.gerrit.extensions.api.changes.HashtagsInput;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.server.change.ChangeResource;
|
import com.google.gerrit.server.change.ChangeResource;
|
||||||
import com.google.gerrit.server.change.SetHashtagsOp;
|
import com.google.gerrit.server.change.SetHashtagsOp;
|
||||||
import com.google.gerrit.server.permissions.ChangePermission;
|
import com.google.gerrit.server.permissions.ChangePermission;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -33,23 +32,18 @@ import com.google.inject.Singleton;
|
|||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class PostHashtags
|
public class PostHashtags
|
||||||
extends RetryingRestModifyView<ChangeResource, HashtagsInput, ImmutableSortedSet<String>>
|
implements RestModifyView<ChangeResource, HashtagsInput>, UiAction<ChangeResource> {
|
||||||
implements UiAction<ChangeResource> {
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final SetHashtagsOp.Factory hashtagsFactory;
|
private final SetHashtagsOp.Factory hashtagsFactory;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
PostHashtags(
|
PostHashtags(BatchUpdate.Factory updateFactory, SetHashtagsOp.Factory hashtagsFactory) {
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
|
||||||
SetHashtagsOp.Factory hashtagsFactory) {
|
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.hashtagsFactory = hashtagsFactory;
|
this.hashtagsFactory = hashtagsFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<ImmutableSortedSet<String>> applyImpl(ChangeResource req, HashtagsInput input)
|
public Response<ImmutableSortedSet<String>> apply(ChangeResource req, HashtagsInput input)
|
||||||
throws RestApiException, UpdateException, PermissionBackendException {
|
throws RestApiException, UpdateException, PermissionBackendException {
|
||||||
req.permissions().check(ChangePermission.EDIT_HASHTAGS);
|
req.permissions().check(ChangePermission.EDIT_HASHTAGS);
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import com.google.gerrit.extensions.restapi.AuthException;
|
|||||||
import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
|
import com.google.gerrit.extensions.restapi.MethodNotAllowedException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.server.change.ChangeResource;
|
import com.google.gerrit.server.change.ChangeResource;
|
||||||
import com.google.gerrit.server.change.SetPrivateOp;
|
import com.google.gerrit.server.change.SetPrivateOp;
|
||||||
@@ -31,8 +32,6 @@ import com.google.gerrit.server.config.GerritServerConfig;
|
|||||||
import com.google.gerrit.server.permissions.GlobalPermission;
|
import com.google.gerrit.server.permissions.GlobalPermission;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackend;
|
import com.google.gerrit.server.permissions.PermissionBackend;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -40,8 +39,8 @@ import com.google.inject.Singleton;
|
|||||||
import org.eclipse.jgit.lib.Config;
|
import org.eclipse.jgit.lib.Config;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class PostPrivate extends RetryingRestModifyView<ChangeResource, InputWithMessage, String>
|
public class PostPrivate
|
||||||
implements UiAction<ChangeResource> {
|
implements RestModifyView<ChangeResource, InputWithMessage>, UiAction<ChangeResource> {
|
||||||
private final PermissionBackend permissionBackend;
|
private final PermissionBackend permissionBackend;
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final SetPrivateOp.Factory setPrivateOpFactory;
|
private final SetPrivateOp.Factory setPrivateOpFactory;
|
||||||
@@ -49,12 +48,10 @@ public class PostPrivate extends RetryingRestModifyView<ChangeResource, InputWit
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
PostPrivate(
|
PostPrivate(
|
||||||
RetryHelper retryHelper,
|
|
||||||
PermissionBackend permissionBackend,
|
PermissionBackend permissionBackend,
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
SetPrivateOp.Factory setPrivateOpFactory,
|
SetPrivateOp.Factory setPrivateOpFactory,
|
||||||
@GerritServerConfig Config config) {
|
@GerritServerConfig Config config) {
|
||||||
super(retryHelper);
|
|
||||||
this.permissionBackend = permissionBackend;
|
this.permissionBackend = permissionBackend;
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.setPrivateOpFactory = setPrivateOpFactory;
|
this.setPrivateOpFactory = setPrivateOpFactory;
|
||||||
@@ -62,7 +59,7 @@ public class PostPrivate extends RetryingRestModifyView<ChangeResource, InputWit
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response<String> applyImpl(ChangeResource rsrc, InputWithMessage input)
|
public Response<String> apply(ChangeResource rsrc, InputWithMessage input)
|
||||||
throws RestApiException, UpdateException {
|
throws RestApiException, UpdateException {
|
||||||
if (disablePrivateChanges) {
|
if (disablePrivateChanges) {
|
||||||
throw new MethodNotAllowedException("private changes are disabled");
|
throw new MethodNotAllowedException("private changes are disabled");
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ import com.google.gerrit.extensions.restapi.BadRequestException;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.restapi.UnprocessableEntityException;
|
||||||
import com.google.gerrit.extensions.restapi.Url;
|
import com.google.gerrit.extensions.restapi.Url;
|
||||||
import com.google.gerrit.extensions.validators.CommentForValidation;
|
import com.google.gerrit.extensions.validators.CommentForValidation;
|
||||||
@@ -120,8 +121,6 @@ import com.google.gerrit.server.update.BatchUpdateOp;
|
|||||||
import com.google.gerrit.server.update.ChangeContext;
|
import com.google.gerrit.server.update.ChangeContext;
|
||||||
import com.google.gerrit.server.update.CommentsRejectedException;
|
import com.google.gerrit.server.update.CommentsRejectedException;
|
||||||
import com.google.gerrit.server.update.Context;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.LabelVote;
|
import com.google.gerrit.server.util.LabelVote;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
@@ -150,8 +149,7 @@ import org.eclipse.jgit.lib.Config;
|
|||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class PostReview
|
public class PostReview implements RestModifyView<RevisionResource, ReviewInput> {
|
||||||
extends RetryingRestModifyView<RevisionResource, ReviewInput, ReviewResult> {
|
|
||||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||||
|
|
||||||
private static final String ERROR_ADDING_REVIEWER = "error adding reviewer";
|
private static final String ERROR_ADDING_REVIEWER = "error adding reviewer";
|
||||||
@@ -187,7 +185,6 @@ public class PostReview
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
PostReview(
|
PostReview(
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
ChangeResource.Factory changeResourceFactory,
|
ChangeResource.Factory changeResourceFactory,
|
||||||
ChangeData.Factory changeDataFactory,
|
ChangeData.Factory changeDataFactory,
|
||||||
@@ -208,7 +205,6 @@ public class PostReview
|
|||||||
ProjectCache projectCache,
|
ProjectCache projectCache,
|
||||||
PermissionBackend permissionBackend,
|
PermissionBackend permissionBackend,
|
||||||
PluginSetContext<CommentValidator> commentValidators) {
|
PluginSetContext<CommentValidator> commentValidators) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.changeResourceFactory = changeResourceFactory;
|
this.changeResourceFactory = changeResourceFactory;
|
||||||
this.changeDataFactory = changeDataFactory;
|
this.changeDataFactory = changeDataFactory;
|
||||||
@@ -233,7 +229,7 @@ public class PostReview
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<ReviewResult> applyImpl(RevisionResource revision, ReviewInput input)
|
public Response<ReviewResult> apply(RevisionResource revision, ReviewInput input)
|
||||||
throws RestApiException, UpdateException, IOException, PermissionBackendException,
|
throws RestApiException, UpdateException, IOException, PermissionBackendException,
|
||||||
ConfigInvalidException, PatchListNotAvailableException {
|
ConfigInvalidException, PatchListNotAvailableException {
|
||||||
return apply(revision, input, TimeUtil.nowTs());
|
return apply(revision, input, TimeUtil.nowTs());
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import com.google.gerrit.extensions.api.changes.NotifyHandling;
|
|||||||
import com.google.gerrit.extensions.restapi.BadRequestException;
|
import com.google.gerrit.extensions.restapi.BadRequestException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestCollectionModifyView;
|
||||||
import com.google.gerrit.server.change.ChangeResource;
|
import com.google.gerrit.server.change.ChangeResource;
|
||||||
import com.google.gerrit.server.change.NotifyResolver;
|
import com.google.gerrit.server.change.NotifyResolver;
|
||||||
import com.google.gerrit.server.change.ReviewerAdder;
|
import com.google.gerrit.server.change.ReviewerAdder;
|
||||||
@@ -29,8 +30,6 @@ import com.google.gerrit.server.change.ReviewerResource;
|
|||||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||||
import com.google.gerrit.server.query.change.ChangeData;
|
import com.google.gerrit.server.query.change.ChangeData;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
import com.google.gerrit.server.update.BatchUpdate;
|
||||||
import com.google.gerrit.server.update.RetryHelper;
|
|
||||||
import com.google.gerrit.server.update.RetryingRestCollectionModifyView;
|
|
||||||
import com.google.gerrit.server.update.UpdateException;
|
import com.google.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -40,8 +39,7 @@ import org.eclipse.jgit.errors.ConfigInvalidException;
|
|||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class PostReviewers
|
public class PostReviewers
|
||||||
extends RetryingRestCollectionModifyView<
|
implements RestCollectionModifyView<ChangeResource, ReviewerResource, AddReviewerInput> {
|
||||||
ChangeResource, ReviewerResource, AddReviewerInput, AddReviewerResult> {
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final ChangeData.Factory changeDataFactory;
|
private final ChangeData.Factory changeDataFactory;
|
||||||
private final NotifyResolver notifyResolver;
|
private final NotifyResolver notifyResolver;
|
||||||
@@ -49,12 +47,10 @@ public class PostReviewers
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
PostReviewers(
|
PostReviewers(
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
ChangeData.Factory changeDataFactory,
|
ChangeData.Factory changeDataFactory,
|
||||||
NotifyResolver notifyResolver,
|
NotifyResolver notifyResolver,
|
||||||
ReviewerAdder reviewerAdder) {
|
ReviewerAdder reviewerAdder) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.changeDataFactory = changeDataFactory;
|
this.changeDataFactory = changeDataFactory;
|
||||||
this.notifyResolver = notifyResolver;
|
this.notifyResolver = notifyResolver;
|
||||||
@@ -62,7 +58,7 @@ public class PostReviewers
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<AddReviewerResult> applyImpl(ChangeResource rsrc, AddReviewerInput input)
|
public Response<AddReviewerResult> apply(ChangeResource rsrc, AddReviewerInput input)
|
||||||
throws IOException, RestApiException, UpdateException, PermissionBackendException,
|
throws IOException, RestApiException, UpdateException, PermissionBackendException,
|
||||||
ConfigInvalidException {
|
ConfigInvalidException {
|
||||||
if (input.reviewer == null) {
|
if (input.reviewer == null) {
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import com.google.gerrit.extensions.api.changes.PublishChangeEditInput;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
import com.google.gerrit.server.change.ChangeResource;
|
import com.google.gerrit.server.change.ChangeResource;
|
||||||
import com.google.gerrit.server.change.NotifyResolver;
|
import com.google.gerrit.server.change.NotifyResolver;
|
||||||
import com.google.gerrit.server.edit.ChangeEdit;
|
import com.google.gerrit.server.edit.ChangeEdit;
|
||||||
@@ -28,8 +29,6 @@ import com.google.gerrit.server.edit.ChangeEditUtil;
|
|||||||
import com.google.gerrit.server.project.ContributorAgreementsChecker;
|
import com.google.gerrit.server.project.ContributorAgreementsChecker;
|
||||||
import com.google.gerrit.server.project.NoSuchProjectException;
|
import com.google.gerrit.server.project.NoSuchProjectException;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
@@ -38,8 +37,7 @@ import java.util.Optional;
|
|||||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class PublishChangeEdit
|
public class PublishChangeEdit implements RestModifyView<ChangeResource, PublishChangeEditInput> {
|
||||||
extends RetryingRestModifyView<ChangeResource, PublishChangeEditInput, Object> {
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final ChangeEditUtil editUtil;
|
private final ChangeEditUtil editUtil;
|
||||||
private final NotifyResolver notifyResolver;
|
private final NotifyResolver notifyResolver;
|
||||||
@@ -47,12 +45,10 @@ public class PublishChangeEdit
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
PublishChangeEdit(
|
PublishChangeEdit(
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
ChangeEditUtil editUtil,
|
ChangeEditUtil editUtil,
|
||||||
NotifyResolver notifyResolver,
|
NotifyResolver notifyResolver,
|
||||||
ContributorAgreementsChecker contributorAgreementsChecker) {
|
ContributorAgreementsChecker contributorAgreementsChecker) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.editUtil = editUtil;
|
this.editUtil = editUtil;
|
||||||
this.notifyResolver = notifyResolver;
|
this.notifyResolver = notifyResolver;
|
||||||
@@ -60,7 +56,7 @@ public class PublishChangeEdit
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<Object> applyImpl(ChangeResource rsrc, PublishChangeEditInput in)
|
public Response<Object> apply(ChangeResource rsrc, PublishChangeEditInput in)
|
||||||
throws IOException, RestApiException, UpdateException, ConfigInvalidException,
|
throws IOException, RestApiException, UpdateException, ConfigInvalidException,
|
||||||
NoSuchProjectException {
|
NoSuchProjectException {
|
||||||
contributorAgreementsChecker.check(rsrc.getProject(), rsrc.getUser());
|
contributorAgreementsChecker.check(rsrc.getProject(), rsrc.getUser());
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import com.google.gerrit.extensions.restapi.AuthException;
|
|||||||
import com.google.gerrit.extensions.restapi.BadRequestException;
|
import com.google.gerrit.extensions.restapi.BadRequestException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.server.ApprovalsUtil;
|
import com.google.gerrit.server.ApprovalsUtil;
|
||||||
import com.google.gerrit.server.IdentifiedUser;
|
import com.google.gerrit.server.IdentifiedUser;
|
||||||
@@ -38,8 +39,6 @@ import com.google.gerrit.server.permissions.ChangePermission;
|
|||||||
import com.google.gerrit.server.permissions.PermissionBackend;
|
import com.google.gerrit.server.permissions.PermissionBackend;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -48,8 +47,8 @@ import java.io.IOException;
|
|||||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class PutAssignee extends RetryingRestModifyView<ChangeResource, AssigneeInput, AccountInfo>
|
public class PutAssignee
|
||||||
implements UiAction<ChangeResource> {
|
implements RestModifyView<ChangeResource, AssigneeInput>, UiAction<ChangeResource> {
|
||||||
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final AccountResolver accountResolver;
|
private final AccountResolver accountResolver;
|
||||||
@@ -64,12 +63,10 @@ public class PutAssignee extends RetryingRestModifyView<ChangeResource, Assignee
|
|||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
AccountResolver accountResolver,
|
AccountResolver accountResolver,
|
||||||
SetAssigneeOp.Factory assigneeFactory,
|
SetAssigneeOp.Factory assigneeFactory,
|
||||||
RetryHelper retryHelper,
|
|
||||||
ReviewerAdder reviewerAdder,
|
ReviewerAdder reviewerAdder,
|
||||||
AccountLoader.Factory accountLoaderFactory,
|
AccountLoader.Factory accountLoaderFactory,
|
||||||
PermissionBackend permissionBackend,
|
PermissionBackend permissionBackend,
|
||||||
ApprovalsUtil approvalsUtil) {
|
ApprovalsUtil approvalsUtil) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.accountResolver = accountResolver;
|
this.accountResolver = accountResolver;
|
||||||
this.assigneeFactory = assigneeFactory;
|
this.assigneeFactory = assigneeFactory;
|
||||||
@@ -80,7 +77,7 @@ public class PutAssignee extends RetryingRestModifyView<ChangeResource, Assignee
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<AccountInfo> applyImpl(ChangeResource rsrc, AssigneeInput input)
|
public Response<AccountInfo> apply(ChangeResource rsrc, AssigneeInput input)
|
||||||
throws RestApiException, UpdateException, IOException, PermissionBackendException,
|
throws RestApiException, UpdateException, IOException, PermissionBackendException,
|
||||||
ConfigInvalidException {
|
ConfigInvalidException {
|
||||||
rsrc.permissions().check(ChangePermission.EDIT_ASSIGNEE);
|
rsrc.permissions().check(ChangePermission.EDIT_ASSIGNEE);
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import com.google.gerrit.entities.PatchSet;
|
|||||||
import com.google.gerrit.extensions.common.DescriptionInput;
|
import com.google.gerrit.extensions.common.DescriptionInput;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.server.ChangeMessagesUtil;
|
import com.google.gerrit.server.ChangeMessagesUtil;
|
||||||
import com.google.gerrit.server.PatchSetUtil;
|
import com.google.gerrit.server.PatchSetUtil;
|
||||||
@@ -30,8 +31,6 @@ import com.google.gerrit.server.permissions.PermissionBackendException;
|
|||||||
import com.google.gerrit.server.update.BatchUpdate;
|
import com.google.gerrit.server.update.BatchUpdate;
|
||||||
import com.google.gerrit.server.update.BatchUpdateOp;
|
import com.google.gerrit.server.update.BatchUpdateOp;
|
||||||
import com.google.gerrit.server.update.ChangeContext;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -39,26 +38,21 @@ import com.google.inject.Singleton;
|
|||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class PutDescription
|
public class PutDescription
|
||||||
extends RetryingRestModifyView<RevisionResource, DescriptionInput, String>
|
implements RestModifyView<RevisionResource, DescriptionInput>, UiAction<RevisionResource> {
|
||||||
implements UiAction<RevisionResource> {
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final ChangeMessagesUtil cmUtil;
|
private final ChangeMessagesUtil cmUtil;
|
||||||
private final PatchSetUtil psUtil;
|
private final PatchSetUtil psUtil;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
PutDescription(
|
PutDescription(
|
||||||
RetryHelper retryHelper,
|
BatchUpdate.Factory updateFactory, ChangeMessagesUtil cmUtil, PatchSetUtil psUtil) {
|
||||||
BatchUpdate.Factory updateFactory,
|
|
||||||
ChangeMessagesUtil cmUtil,
|
|
||||||
PatchSetUtil psUtil) {
|
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.cmUtil = cmUtil;
|
this.cmUtil = cmUtil;
|
||||||
this.psUtil = psUtil;
|
this.psUtil = psUtil;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<String> applyImpl(RevisionResource rsrc, DescriptionInput input)
|
public Response<String> apply(RevisionResource rsrc, DescriptionInput input)
|
||||||
throws UpdateException, RestApiException, PermissionBackendException {
|
throws UpdateException, RestApiException, PermissionBackendException {
|
||||||
rsrc.permissions().check(ChangePermission.EDIT_DESCRIPTION);
|
rsrc.permissions().check(ChangePermission.EDIT_DESCRIPTION);
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import com.google.gerrit.extensions.restapi.BadRequestException;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
import com.google.gerrit.extensions.restapi.Url;
|
import com.google.gerrit.extensions.restapi.Url;
|
||||||
import com.google.gerrit.server.CommentsUtil;
|
import com.google.gerrit.server.CommentsUtil;
|
||||||
import com.google.gerrit.server.PatchSetUtil;
|
import com.google.gerrit.server.PatchSetUtil;
|
||||||
@@ -35,8 +36,6 @@ import com.google.gerrit.server.permissions.PermissionBackendException;
|
|||||||
import com.google.gerrit.server.update.BatchUpdate;
|
import com.google.gerrit.server.update.BatchUpdate;
|
||||||
import com.google.gerrit.server.update.BatchUpdateOp;
|
import com.google.gerrit.server.update.BatchUpdateOp;
|
||||||
import com.google.gerrit.server.update.ChangeContext;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -47,8 +46,7 @@ import java.util.Collections;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class PutDraftComment
|
public class PutDraftComment implements RestModifyView<DraftCommentResource, DraftInput> {
|
||||||
extends RetryingRestModifyView<DraftCommentResource, DraftInput, CommentInfo> {
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final DeleteDraftComment delete;
|
private final DeleteDraftComment delete;
|
||||||
private final CommentsUtil commentsUtil;
|
private final CommentsUtil commentsUtil;
|
||||||
@@ -58,14 +56,12 @@ public class PutDraftComment
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
PutDraftComment(
|
PutDraftComment(
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
DeleteDraftComment delete,
|
DeleteDraftComment delete,
|
||||||
CommentsUtil commentsUtil,
|
CommentsUtil commentsUtil,
|
||||||
PatchSetUtil psUtil,
|
PatchSetUtil psUtil,
|
||||||
Provider<CommentJson> commentJson,
|
Provider<CommentJson> commentJson,
|
||||||
PatchListCache patchListCache) {
|
PatchListCache patchListCache) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.delete = delete;
|
this.delete = delete;
|
||||||
this.commentsUtil = commentsUtil;
|
this.commentsUtil = commentsUtil;
|
||||||
@@ -75,10 +71,10 @@ public class PutDraftComment
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<CommentInfo> applyImpl(DraftCommentResource rsrc, DraftInput in)
|
public Response<CommentInfo> apply(DraftCommentResource rsrc, DraftInput in)
|
||||||
throws RestApiException, UpdateException, PermissionBackendException {
|
throws RestApiException, UpdateException, PermissionBackendException {
|
||||||
if (in == null || in.message == null || in.message.trim().isEmpty()) {
|
if (in == null || in.message == null || in.message.trim().isEmpty()) {
|
||||||
return delete.applyImpl(rsrc, null);
|
return delete.apply(rsrc, null);
|
||||||
} else if (in.id != null && !rsrc.getId().equals(in.id)) {
|
} else if (in.id != null && !rsrc.getId().equals(in.id)) {
|
||||||
throw new BadRequestException("id must match URL");
|
throw new BadRequestException("id must match URL");
|
||||||
} else if (in.line != null && in.line < 0) {
|
} else if (in.line != null && in.line < 0) {
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import com.google.gerrit.extensions.restapi.BadRequestException;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
import com.google.gerrit.server.ChangeUtil;
|
import com.google.gerrit.server.ChangeUtil;
|
||||||
import com.google.gerrit.server.CurrentUser;
|
import com.google.gerrit.server.CurrentUser;
|
||||||
import com.google.gerrit.server.GerritPersonIdent;
|
import com.google.gerrit.server.GerritPersonIdent;
|
||||||
@@ -38,8 +39,6 @@ import com.google.gerrit.server.permissions.PermissionBackend;
|
|||||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||||
import com.google.gerrit.server.project.ProjectCache;
|
import com.google.gerrit.server.project.ProjectCache;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.CommitMessageUtil;
|
import com.google.gerrit.server.util.CommitMessageUtil;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
@@ -61,7 +60,7 @@ import org.eclipse.jgit.revwalk.RevCommit;
|
|||||||
import org.eclipse.jgit.revwalk.RevWalk;
|
import org.eclipse.jgit.revwalk.RevWalk;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class PutMessage extends RetryingRestModifyView<ChangeResource, CommitMessageInput, String> {
|
public class PutMessage implements RestModifyView<ChangeResource, CommitMessageInput> {
|
||||||
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final GitRepositoryManager repositoryManager;
|
private final GitRepositoryManager repositoryManager;
|
||||||
@@ -75,7 +74,6 @@ public class PutMessage extends RetryingRestModifyView<ChangeResource, CommitMes
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
PutMessage(
|
PutMessage(
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
GitRepositoryManager repositoryManager,
|
GitRepositoryManager repositoryManager,
|
||||||
Provider<CurrentUser> userProvider,
|
Provider<CurrentUser> userProvider,
|
||||||
@@ -85,7 +83,6 @@ public class PutMessage extends RetryingRestModifyView<ChangeResource, CommitMes
|
|||||||
PatchSetUtil psUtil,
|
PatchSetUtil psUtil,
|
||||||
NotifyResolver notifyResolver,
|
NotifyResolver notifyResolver,
|
||||||
ProjectCache projectCache) {
|
ProjectCache projectCache) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.repositoryManager = repositoryManager;
|
this.repositoryManager = repositoryManager;
|
||||||
this.userProvider = userProvider;
|
this.userProvider = userProvider;
|
||||||
@@ -98,7 +95,7 @@ public class PutMessage extends RetryingRestModifyView<ChangeResource, CommitMes
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<String> applyImpl(ChangeResource resource, CommitMessageInput input)
|
public Response<String> apply(ChangeResource resource, CommitMessageInput input)
|
||||||
throws IOException, RestApiException, UpdateException, PermissionBackendException,
|
throws IOException, RestApiException, UpdateException, PermissionBackendException,
|
||||||
ConfigInvalidException {
|
ConfigInvalidException {
|
||||||
PatchSet ps = psUtil.current(resource.getNotes());
|
PatchSet ps = psUtil.current(resource.getNotes());
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import com.google.gerrit.extensions.api.changes.TopicInput;
|
|||||||
import com.google.gerrit.extensions.restapi.BadRequestException;
|
import com.google.gerrit.extensions.restapi.BadRequestException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.server.ChangeMessagesUtil;
|
import com.google.gerrit.server.ChangeMessagesUtil;
|
||||||
import com.google.gerrit.server.ChangeUtil;
|
import com.google.gerrit.server.ChangeUtil;
|
||||||
@@ -33,34 +34,27 @@ import com.google.gerrit.server.update.BatchUpdate;
|
|||||||
import com.google.gerrit.server.update.BatchUpdateOp;
|
import com.google.gerrit.server.update.BatchUpdateOp;
|
||||||
import com.google.gerrit.server.update.ChangeContext;
|
import com.google.gerrit.server.update.ChangeContext;
|
||||||
import com.google.gerrit.server.update.Context;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class PutTopic extends RetryingRestModifyView<ChangeResource, TopicInput, String>
|
public class PutTopic
|
||||||
implements UiAction<ChangeResource> {
|
implements RestModifyView<ChangeResource, TopicInput>, UiAction<ChangeResource> {
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final ChangeMessagesUtil cmUtil;
|
private final ChangeMessagesUtil cmUtil;
|
||||||
private final TopicEdited topicEdited;
|
private final TopicEdited topicEdited;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
PutTopic(
|
PutTopic(BatchUpdate.Factory updateFactory, ChangeMessagesUtil cmUtil, TopicEdited topicEdited) {
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
|
||||||
ChangeMessagesUtil cmUtil,
|
|
||||||
TopicEdited topicEdited) {
|
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.cmUtil = cmUtil;
|
this.cmUtil = cmUtil;
|
||||||
this.topicEdited = topicEdited;
|
this.topicEdited = topicEdited;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<String> applyImpl(ChangeResource req, TopicInput input)
|
public Response<String> apply(ChangeResource req, TopicInput input)
|
||||||
throws UpdateException, RestApiException, PermissionBackendException {
|
throws UpdateException, RestApiException, PermissionBackendException {
|
||||||
req.permissions().check(ChangePermission.EDIT_TOPIC_NAME);
|
req.permissions().check(ChangePermission.EDIT_TOPIC_NAME);
|
||||||
|
|
||||||
|
|||||||
@@ -47,8 +47,6 @@ import com.google.gerrit.server.permissions.PermissionBackendException;
|
|||||||
import com.google.gerrit.server.project.NoSuchChangeException;
|
import com.google.gerrit.server.project.NoSuchChangeException;
|
||||||
import com.google.gerrit.server.project.ProjectCache;
|
import com.google.gerrit.server.project.ProjectCache;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -63,7 +61,7 @@ import org.eclipse.jgit.revwalk.RevCommit;
|
|||||||
import org.eclipse.jgit.revwalk.RevWalk;
|
import org.eclipse.jgit.revwalk.RevWalk;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class Rebase extends RetryingRestModifyView<RevisionResource, RebaseInput, ChangeInfo>
|
public class Rebase
|
||||||
implements RestModifyView<RevisionResource, RebaseInput>, UiAction<RevisionResource> {
|
implements RestModifyView<RevisionResource, RebaseInput>, UiAction<RevisionResource> {
|
||||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||||
|
|
||||||
@@ -81,7 +79,6 @@ public class Rebase extends RetryingRestModifyView<RevisionResource, RebaseInput
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public Rebase(
|
public Rebase(
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
BatchUpdate.Factory updateFactory,
|
||||||
GitRepositoryManager repoManager,
|
GitRepositoryManager repoManager,
|
||||||
RebaseChangeOp.Factory rebaseFactory,
|
RebaseChangeOp.Factory rebaseFactory,
|
||||||
@@ -90,7 +87,6 @@ public class Rebase extends RetryingRestModifyView<RevisionResource, RebaseInput
|
|||||||
PermissionBackend permissionBackend,
|
PermissionBackend permissionBackend,
|
||||||
ProjectCache projectCache,
|
ProjectCache projectCache,
|
||||||
PatchSetUtil patchSetUtil) {
|
PatchSetUtil patchSetUtil) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.repoManager = repoManager;
|
this.repoManager = repoManager;
|
||||||
this.rebaseFactory = rebaseFactory;
|
this.rebaseFactory = rebaseFactory;
|
||||||
@@ -102,7 +98,7 @@ public class Rebase extends RetryingRestModifyView<RevisionResource, RebaseInput
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<ChangeInfo> applyImpl(RevisionResource rsrc, RebaseInput input)
|
public Response<ChangeInfo> apply(RevisionResource rsrc, RebaseInput input)
|
||||||
throws UpdateException, RestApiException, IOException, PermissionBackendException {
|
throws UpdateException, RestApiException, IOException, PermissionBackendException {
|
||||||
// Not allowed to rebase if the current patch set is locked.
|
// Not allowed to rebase if the current patch set is locked.
|
||||||
patchSetUtil.checkPatchSetNotLocked(rsrc.getNotes());
|
patchSetUtil.checkPatchSetNotLocked(rsrc.getNotes());
|
||||||
|
|||||||
@@ -19,35 +19,30 @@ import com.google.gerrit.extensions.common.Input;
|
|||||||
import com.google.gerrit.extensions.restapi.AuthException;
|
import com.google.gerrit.extensions.restapi.AuthException;
|
||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
import com.google.gerrit.server.change.ChangeResource;
|
import com.google.gerrit.server.change.ChangeResource;
|
||||||
import com.google.gerrit.server.edit.ChangeEditModifier;
|
import com.google.gerrit.server.edit.ChangeEditModifier;
|
||||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
import com.google.gerrit.server.git.GitRepositoryManager;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||||
import com.google.gerrit.server.project.InvalidChangeOperationException;
|
import com.google.gerrit.server.project.InvalidChangeOperationException;
|
||||||
import com.google.gerrit.server.update.RetryHelper;
|
|
||||||
import com.google.gerrit.server.update.RetryingRestModifyView;
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class RebaseChangeEdit extends RetryingRestModifyView<ChangeResource, Input, Object> {
|
public class RebaseChangeEdit implements RestModifyView<ChangeResource, Input> {
|
||||||
private final GitRepositoryManager repositoryManager;
|
private final GitRepositoryManager repositoryManager;
|
||||||
private final ChangeEditModifier editModifier;
|
private final ChangeEditModifier editModifier;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
RebaseChangeEdit(
|
RebaseChangeEdit(GitRepositoryManager repositoryManager, ChangeEditModifier editModifier) {
|
||||||
RetryHelper retryHelper,
|
|
||||||
GitRepositoryManager repositoryManager,
|
|
||||||
ChangeEditModifier editModifier) {
|
|
||||||
super(retryHelper);
|
|
||||||
this.repositoryManager = repositoryManager;
|
this.repositoryManager = repositoryManager;
|
||||||
this.editModifier = editModifier;
|
this.editModifier = editModifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<Object> applyImpl(ChangeResource rsrc, Input in)
|
public Response<Object> apply(ChangeResource rsrc, Input in)
|
||||||
throws AuthException, ResourceConflictException, IOException, PermissionBackendException {
|
throws AuthException, ResourceConflictException, IOException, PermissionBackendException {
|
||||||
Project.NameKey project = rsrc.getProject();
|
Project.NameKey project = rsrc.getProject();
|
||||||
try (Repository repository = repositoryManager.openRepository(project)) {
|
try (Repository repository = repositoryManager.openRepository(project)) {
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import com.google.gerrit.extensions.common.ChangeInfo;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.server.ChangeMessagesUtil;
|
import com.google.gerrit.server.ChangeMessagesUtil;
|
||||||
import com.google.gerrit.server.ChangeUtil;
|
import com.google.gerrit.server.ChangeUtil;
|
||||||
@@ -43,8 +44,6 @@ import com.google.gerrit.server.update.BatchUpdate;
|
|||||||
import com.google.gerrit.server.update.BatchUpdateOp;
|
import com.google.gerrit.server.update.BatchUpdateOp;
|
||||||
import com.google.gerrit.server.update.ChangeContext;
|
import com.google.gerrit.server.update.ChangeContext;
|
||||||
import com.google.gerrit.server.update.Context;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -52,8 +51,8 @@ import com.google.inject.Singleton;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class Restore extends RetryingRestModifyView<ChangeResource, RestoreInput, ChangeInfo>
|
public class Restore
|
||||||
implements UiAction<ChangeResource> {
|
implements RestModifyView<ChangeResource, RestoreInput>, UiAction<ChangeResource> {
|
||||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||||
|
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
@@ -71,10 +70,8 @@ public class Restore extends RetryingRestModifyView<ChangeResource, RestoreInput
|
|||||||
ChangeJson.Factory json,
|
ChangeJson.Factory json,
|
||||||
ChangeMessagesUtil cmUtil,
|
ChangeMessagesUtil cmUtil,
|
||||||
PatchSetUtil psUtil,
|
PatchSetUtil psUtil,
|
||||||
RetryHelper retryHelper,
|
|
||||||
ChangeRestored changeRestored,
|
ChangeRestored changeRestored,
|
||||||
ProjectCache projectCache) {
|
ProjectCache projectCache) {
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.restoredSenderFactory = restoredSenderFactory;
|
this.restoredSenderFactory = restoredSenderFactory;
|
||||||
this.json = json;
|
this.json = json;
|
||||||
@@ -85,7 +82,7 @@ public class Restore extends RetryingRestModifyView<ChangeResource, RestoreInput
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<ChangeInfo> applyImpl(ChangeResource rsrc, RestoreInput input)
|
public Response<ChangeInfo> apply(ChangeResource rsrc, RestoreInput input)
|
||||||
throws RestApiException, UpdateException, PermissionBackendException, IOException {
|
throws RestApiException, UpdateException, PermissionBackendException, IOException {
|
||||||
// Not allowed to restore if the current patch set is locked.
|
// Not allowed to restore if the current patch set is locked.
|
||||||
psUtil.checkPatchSetNotLocked(rsrc.getNotes());
|
psUtil.checkPatchSetNotLocked(rsrc.getNotes());
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.server.ApprovalsUtil;
|
import com.google.gerrit.server.ApprovalsUtil;
|
||||||
import com.google.gerrit.server.ChangeMessagesUtil;
|
import com.google.gerrit.server.ChangeMessagesUtil;
|
||||||
@@ -59,8 +60,6 @@ import com.google.gerrit.server.update.BatchUpdate;
|
|||||||
import com.google.gerrit.server.update.BatchUpdateOp;
|
import com.google.gerrit.server.update.BatchUpdateOp;
|
||||||
import com.google.gerrit.server.update.ChangeContext;
|
import com.google.gerrit.server.update.ChangeContext;
|
||||||
import com.google.gerrit.server.update.Context;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
@@ -79,8 +78,8 @@ import org.eclipse.jgit.revwalk.RevCommit;
|
|||||||
import org.eclipse.jgit.revwalk.RevWalk;
|
import org.eclipse.jgit.revwalk.RevWalk;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class Revert extends RetryingRestModifyView<ChangeResource, RevertInput, ChangeInfo>
|
public class Revert
|
||||||
implements UiAction<ChangeResource> {
|
implements RestModifyView<ChangeResource, RevertInput>, UiAction<ChangeResource> {
|
||||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||||
|
|
||||||
private final PermissionBackend permissionBackend;
|
private final PermissionBackend permissionBackend;
|
||||||
@@ -106,7 +105,6 @@ public class Revert extends RetryingRestModifyView<ChangeResource, RevertInput,
|
|||||||
GitRepositoryManager repoManager,
|
GitRepositoryManager repoManager,
|
||||||
ChangeInserter.Factory changeInserterFactory,
|
ChangeInserter.Factory changeInserterFactory,
|
||||||
ChangeMessagesUtil cmUtil,
|
ChangeMessagesUtil cmUtil,
|
||||||
RetryHelper retryHelper,
|
|
||||||
Sequences seq,
|
Sequences seq,
|
||||||
PatchSetUtil psUtil,
|
PatchSetUtil psUtil,
|
||||||
RevertedSender.Factory revertedSenderFactory,
|
RevertedSender.Factory revertedSenderFactory,
|
||||||
@@ -117,7 +115,6 @@ public class Revert extends RetryingRestModifyView<ChangeResource, RevertInput,
|
|||||||
ProjectCache projectCache,
|
ProjectCache projectCache,
|
||||||
NotifyResolver notifyResolver,
|
NotifyResolver notifyResolver,
|
||||||
CommitUtil commitUtil) {
|
CommitUtil commitUtil) {
|
||||||
super(retryHelper);
|
|
||||||
this.permissionBackend = permissionBackend;
|
this.permissionBackend = permissionBackend;
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.repoManager = repoManager;
|
this.repoManager = repoManager;
|
||||||
@@ -136,7 +133,7 @@ public class Revert extends RetryingRestModifyView<ChangeResource, RevertInput,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response<ChangeInfo> applyImpl(ChangeResource rsrc, RevertInput input)
|
public Response<ChangeInfo> apply(ChangeResource rsrc, RevertInput input)
|
||||||
throws IOException, RestApiException, UpdateException, NoSuchChangeException,
|
throws IOException, RestApiException, UpdateException, NoSuchChangeException,
|
||||||
PermissionBackendException, NoSuchProjectException, ConfigInvalidException {
|
PermissionBackendException, NoSuchProjectException, ConfigInvalidException {
|
||||||
Change change = rsrc.getChange();
|
Change change = rsrc.getChange();
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import com.google.gerrit.extensions.common.ChangeInfo;
|
|||||||
import com.google.gerrit.extensions.common.RevertSubmissionInfo;
|
import com.google.gerrit.extensions.common.RevertSubmissionInfo;
|
||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestModifyView;
|
||||||
import com.google.gerrit.extensions.webui.UiAction;
|
import com.google.gerrit.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.server.ChangeUtil;
|
import com.google.gerrit.server.ChangeUtil;
|
||||||
import com.google.gerrit.server.CurrentUser;
|
import com.google.gerrit.server.CurrentUser;
|
||||||
@@ -36,8 +37,6 @@ import com.google.gerrit.server.project.ContributorAgreementsChecker;
|
|||||||
import com.google.gerrit.server.project.ProjectCache;
|
import com.google.gerrit.server.project.ProjectCache;
|
||||||
import com.google.gerrit.server.query.change.ChangeData;
|
import com.google.gerrit.server.query.change.ChangeData;
|
||||||
import com.google.gerrit.server.query.change.InternalChangeQuery;
|
import com.google.gerrit.server.query.change.InternalChangeQuery;
|
||||||
import com.google.gerrit.server.update.RetryHelper;
|
|
||||||
import com.google.gerrit.server.update.RetryingRestModifyView;
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Provider;
|
import com.google.inject.Provider;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
@@ -48,8 +47,7 @@ import org.apache.commons.lang.RandomStringUtils;
|
|||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class RevertSubmission
|
public class RevertSubmission
|
||||||
extends RetryingRestModifyView<ChangeResource, RevertInput, RevertSubmissionInfo>
|
implements RestModifyView<ChangeResource, RevertInput>, UiAction<ChangeResource> {
|
||||||
implements UiAction<ChangeResource> {
|
|
||||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||||
|
|
||||||
private final Revert revert;
|
private final Revert revert;
|
||||||
@@ -63,7 +61,6 @@ public class RevertSubmission
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
RevertSubmission(
|
RevertSubmission(
|
||||||
RetryHelper retryHelper,
|
|
||||||
Revert revert,
|
Revert revert,
|
||||||
Provider<InternalChangeQuery> queryProvider,
|
Provider<InternalChangeQuery> queryProvider,
|
||||||
ChangeResource.Factory changeResourceFactory,
|
ChangeResource.Factory changeResourceFactory,
|
||||||
@@ -72,7 +69,6 @@ public class RevertSubmission
|
|||||||
ProjectCache projectCache,
|
ProjectCache projectCache,
|
||||||
PatchSetUtil psUtil,
|
PatchSetUtil psUtil,
|
||||||
ContributorAgreementsChecker contributorAgreements) {
|
ContributorAgreementsChecker contributorAgreements) {
|
||||||
super(retryHelper);
|
|
||||||
this.revert = revert;
|
this.revert = revert;
|
||||||
this.queryProvider = queryProvider;
|
this.queryProvider = queryProvider;
|
||||||
this.changeResourceFactory = changeResourceFactory;
|
this.changeResourceFactory = changeResourceFactory;
|
||||||
@@ -84,7 +80,7 @@ public class RevertSubmission
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response<RevertSubmissionInfo> applyImpl(ChangeResource changeResource, RevertInput input)
|
public Response<RevertSubmissionInfo> apply(ChangeResource changeResource, RevertInput input)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
|
|
||||||
if (!changeResource.getChange().isMerged()) {
|
if (!changeResource.getChange().isMerged()) {
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import com.google.gerrit.extensions.api.changes.NotifyHandling;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.server.ChangeUtil;
|
import com.google.gerrit.server.ChangeUtil;
|
||||||
import com.google.gerrit.server.change.ChangeResource;
|
import com.google.gerrit.server.change.ChangeResource;
|
||||||
@@ -31,31 +32,25 @@ import com.google.gerrit.server.change.WorkInProgressOp.Input;
|
|||||||
import com.google.gerrit.server.permissions.ChangePermission;
|
import com.google.gerrit.server.permissions.ChangePermission;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class SetReadyForReview extends RetryingRestModifyView<ChangeResource, Input, String>
|
public class SetReadyForReview
|
||||||
implements UiAction<ChangeResource> {
|
implements RestModifyView<ChangeResource, Input>, UiAction<ChangeResource> {
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final WorkInProgressOp.Factory opFactory;
|
private final WorkInProgressOp.Factory opFactory;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
SetReadyForReview(
|
SetReadyForReview(BatchUpdate.Factory updateFactory, WorkInProgressOp.Factory opFactory) {
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
|
||||||
WorkInProgressOp.Factory opFactory) {
|
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.opFactory = opFactory;
|
this.opFactory = opFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<String> applyImpl(ChangeResource rsrc, Input input)
|
public Response<String> apply(ChangeResource rsrc, Input input)
|
||||||
throws RestApiException, UpdateException, PermissionBackendException {
|
throws RestApiException, UpdateException, PermissionBackendException {
|
||||||
rsrc.permissions().check(ChangePermission.TOGGLE_WORK_IN_PROGRESS_STATE);
|
rsrc.permissions().check(ChangePermission.TOGGLE_WORK_IN_PROGRESS_STATE);
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import com.google.gerrit.extensions.api.changes.NotifyHandling;
|
|||||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.extensions.webui.UiAction;
|
||||||
import com.google.gerrit.server.ChangeUtil;
|
import com.google.gerrit.server.ChangeUtil;
|
||||||
import com.google.gerrit.server.change.ChangeResource;
|
import com.google.gerrit.server.change.ChangeResource;
|
||||||
@@ -31,31 +32,25 @@ import com.google.gerrit.server.change.WorkInProgressOp.Input;
|
|||||||
import com.google.gerrit.server.permissions.ChangePermission;
|
import com.google.gerrit.server.permissions.ChangePermission;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||||
import com.google.gerrit.server.update.BatchUpdate;
|
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.gerrit.server.update.UpdateException;
|
||||||
import com.google.gerrit.server.util.time.TimeUtil;
|
import com.google.gerrit.server.util.time.TimeUtil;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class SetWorkInProgress extends RetryingRestModifyView<ChangeResource, Input, String>
|
public class SetWorkInProgress
|
||||||
implements UiAction<ChangeResource> {
|
implements RestModifyView<ChangeResource, Input>, UiAction<ChangeResource> {
|
||||||
private final BatchUpdate.Factory updateFactory;
|
private final BatchUpdate.Factory updateFactory;
|
||||||
private final WorkInProgressOp.Factory opFactory;
|
private final WorkInProgressOp.Factory opFactory;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
SetWorkInProgress(
|
SetWorkInProgress(BatchUpdate.Factory updateFactory, WorkInProgressOp.Factory opFactory) {
|
||||||
RetryHelper retryHelper,
|
|
||||||
BatchUpdate.Factory updateFactory,
|
|
||||||
WorkInProgressOp.Factory opFactory) {
|
|
||||||
super(retryHelper);
|
|
||||||
this.updateFactory = updateFactory;
|
this.updateFactory = updateFactory;
|
||||||
this.opFactory = opFactory;
|
this.opFactory = opFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<String> applyImpl(ChangeResource rsrc, Input input)
|
public Response<String> apply(ChangeResource rsrc, Input input)
|
||||||
throws RestApiException, UpdateException, PermissionBackendException {
|
throws RestApiException, UpdateException, PermissionBackendException {
|
||||||
rsrc.permissions().check(ChangePermission.TOGGLE_WORK_IN_PROGRESS_STATE);
|
rsrc.permissions().check(ChangePermission.TOGGLE_WORK_IN_PROGRESS_STATE);
|
||||||
|
|
||||||
|
|||||||
@@ -18,13 +18,11 @@ import com.google.common.collect.Lists;
|
|||||||
import com.google.gerrit.extensions.api.projects.BanCommitInput;
|
import com.google.gerrit.extensions.api.projects.BanCommitInput;
|
||||||
import com.google.gerrit.extensions.restapi.Response;
|
import com.google.gerrit.extensions.restapi.Response;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
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.restapi.UnprocessableEntityException;
|
||||||
import com.google.gerrit.server.git.BanCommitResult;
|
import com.google.gerrit.server.git.BanCommitResult;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||||
import com.google.gerrit.server.project.ProjectResource;
|
import com.google.gerrit.server.project.ProjectResource;
|
||||||
import com.google.gerrit.server.restapi.project.BanCommit.BanResultInfo;
|
|
||||||
import com.google.gerrit.server.update.RetryHelper;
|
|
||||||
import com.google.gerrit.server.update.RetryingRestModifyView;
|
|
||||||
import com.google.gerrit.server.update.UpdateException;
|
import com.google.gerrit.server.update.UpdateException;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
@@ -34,18 +32,16 @@ import java.util.List;
|
|||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class BanCommit
|
public class BanCommit implements RestModifyView<ProjectResource, BanCommitInput> {
|
||||||
extends RetryingRestModifyView<ProjectResource, BanCommitInput, BanResultInfo> {
|
|
||||||
private final com.google.gerrit.server.git.BanCommit banCommit;
|
private final com.google.gerrit.server.git.BanCommit banCommit;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
BanCommit(RetryHelper retryHelper, com.google.gerrit.server.git.BanCommit banCommit) {
|
BanCommit(com.google.gerrit.server.git.BanCommit banCommit) {
|
||||||
super(retryHelper);
|
|
||||||
this.banCommit = banCommit;
|
this.banCommit = banCommit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Response<BanResultInfo> applyImpl(ProjectResource rsrc, BanCommitInput input)
|
public Response<BanResultInfo> apply(ProjectResource rsrc, BanCommitInput input)
|
||||||
throws RestApiException, UpdateException, IOException, PermissionBackendException {
|
throws RestApiException, UpdateException, IOException, PermissionBackendException {
|
||||||
BanResultInfo r = new BanResultInfo();
|
BanResultInfo r = new BanResultInfo();
|
||||||
if (input != null && input.commits != null && !input.commits.isEmpty()) {
|
if (input != null && input.commits != null && !input.commits.isEmpty()) {
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ public class RetryHelper {
|
|||||||
@Nullable
|
@Nullable
|
||||||
abstract Duration timeout();
|
abstract Duration timeout();
|
||||||
|
|
||||||
abstract Optional<Class<?>> caller();
|
abstract Optional<String> caller();
|
||||||
|
|
||||||
abstract Optional<Predicate<Throwable>> retryWithTrace();
|
abstract Optional<Predicate<Throwable>> retryWithTrace();
|
||||||
|
|
||||||
@@ -113,7 +113,11 @@ public class RetryHelper {
|
|||||||
|
|
||||||
public abstract Builder timeout(Duration timeout);
|
public abstract Builder timeout(Duration timeout);
|
||||||
|
|
||||||
public abstract Builder caller(Class<?> caller);
|
public abstract Builder caller(String caller);
|
||||||
|
|
||||||
|
public Builder caller(Class<?> caller) {
|
||||||
|
return caller(caller.getSimpleName());
|
||||||
|
}
|
||||||
|
|
||||||
public abstract Builder retryWithTrace(Predicate<Throwable> exceptionPredicate);
|
public abstract Builder retryWithTrace(Predicate<Throwable> exceptionPredicate);
|
||||||
|
|
||||||
@@ -328,7 +332,7 @@ public class RetryHelper {
|
|||||||
if (retryWithTraceOnFailure
|
if (retryWithTraceOnFailure
|
||||||
&& opts.retryWithTrace().isPresent()
|
&& opts.retryWithTrace().isPresent()
|
||||||
&& opts.retryWithTrace().get().test(t)) {
|
&& opts.retryWithTrace().get().test(t)) {
|
||||||
String caller = opts.caller().map(Class::getSimpleName).orElse("N/A");
|
String caller = opts.caller().orElse("N/A");
|
||||||
if (!traceContext.isTracing()) {
|
if (!traceContext.isTracing()) {
|
||||||
String traceId = "retry-on-failure-" + new RequestId();
|
String traceId = "retry-on-failure-" + new RequestId();
|
||||||
traceContext.addTag(RequestId.Type.TRACE_ID, traceId).forceLogging();
|
traceContext.addTag(RequestId.Type.TRACE_ID, traceId).forceLogging();
|
||||||
|
|||||||
@@ -1,68 +0,0 @@
|
|||||||
// Copyright (C) 2018 The Android Open Source Project
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package com.google.gerrit.server.update;
|
|
||||||
|
|
||||||
import com.google.common.base.Throwables;
|
|
||||||
import com.google.gerrit.extensions.restapi.AuthException;
|
|
||||||
import com.google.gerrit.extensions.restapi.BadRequestException;
|
|
||||||
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.RestCollectionModifyView;
|
|
||||||
import com.google.gerrit.extensions.restapi.RestResource;
|
|
||||||
import com.google.gerrit.git.LockFailureException;
|
|
||||||
import com.google.gerrit.server.update.RetryHelper.ActionType;
|
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
|
||||||
|
|
||||||
public abstract class RetryingRestCollectionModifyView<
|
|
||||||
P extends RestResource, C extends RestResource, I, O>
|
|
||||||
implements RestCollectionModifyView<P, C, I> {
|
|
||||||
private final RetryHelper retryHelper;
|
|
||||||
|
|
||||||
protected RetryingRestCollectionModifyView(RetryHelper retryHelper) {
|
|
||||||
this.retryHelper = retryHelper;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final Response<O> apply(P parentResource, I input)
|
|
||||||
throws AuthException, BadRequestException, ResourceConflictException, Exception {
|
|
||||||
AtomicReference<String> traceId = new AtomicReference<>(null);
|
|
||||||
try {
|
|
||||||
RetryHelper.Options retryOptions =
|
|
||||||
RetryHelper.options()
|
|
||||||
.caller(getClass())
|
|
||||||
.retryWithTrace(t -> !(t instanceof RestApiException))
|
|
||||||
.onAutoTrace(traceId::set)
|
|
||||||
.build();
|
|
||||||
return retryHelper
|
|
||||||
.execute(
|
|
||||||
ActionType.REST_REQUEST,
|
|
||||||
() -> applyImpl(parentResource, input),
|
|
||||||
retryOptions,
|
|
||||||
t -> {
|
|
||||||
if (t instanceof UpdateException) {
|
|
||||||
t = t.getCause();
|
|
||||||
}
|
|
||||||
return t instanceof LockFailureException;
|
|
||||||
})
|
|
||||||
.traceId(traceId.get());
|
|
||||||
} catch (Exception e) {
|
|
||||||
Throwables.throwIfInstanceOf(e, RestApiException.class);
|
|
||||||
return Response.<O>internalServerError(e).traceId(traceId.get());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract Response<O> applyImpl(P parentResource, I input) throws Exception;
|
|
||||||
}
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
// Copyright (C) 2017 The Android Open Source Project
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package com.google.gerrit.server.update;
|
|
||||||
|
|
||||||
import com.google.common.base.Throwables;
|
|
||||||
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.restapi.RestResource;
|
|
||||||
import com.google.gerrit.git.LockFailureException;
|
|
||||||
import com.google.gerrit.server.update.RetryHelper.ActionType;
|
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
|
||||||
|
|
||||||
public abstract class RetryingRestModifyView<R extends RestResource, I, O>
|
|
||||||
implements RestModifyView<R, I> {
|
|
||||||
private final RetryHelper retryHelper;
|
|
||||||
|
|
||||||
protected RetryingRestModifyView(RetryHelper retryHelper) {
|
|
||||||
this.retryHelper = retryHelper;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final Response<O> apply(R resource, I input) throws RestApiException {
|
|
||||||
AtomicReference<String> traceId = new AtomicReference<>(null);
|
|
||||||
try {
|
|
||||||
RetryHelper.Options retryOptions =
|
|
||||||
RetryHelper.options()
|
|
||||||
.caller(getClass())
|
|
||||||
.retryWithTrace(t -> !(t instanceof RestApiException))
|
|
||||||
.onAutoTrace(traceId::set)
|
|
||||||
.build();
|
|
||||||
return retryHelper
|
|
||||||
.execute(
|
|
||||||
ActionType.REST_REQUEST,
|
|
||||||
() -> applyImpl(resource, input),
|
|
||||||
retryOptions,
|
|
||||||
t -> {
|
|
||||||
if (t instanceof UpdateException) {
|
|
||||||
t = t.getCause();
|
|
||||||
}
|
|
||||||
return t instanceof LockFailureException;
|
|
||||||
})
|
|
||||||
.traceId(traceId.get());
|
|
||||||
} catch (Exception e) {
|
|
||||||
Throwables.throwIfInstanceOf(e, RestApiException.class);
|
|
||||||
return Response.<O>internalServerError(e).traceId(traceId.get());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract Response<O> applyImpl(R resource, I input) throws Exception;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user