Merge "Remove "revert_submission" action from the list of actions"
diff --git a/Documentation/user-review-ui.txt b/Documentation/user-review-ui.txt
index 06c5ab7..952a1bf 100644
--- a/Documentation/user-review-ui.txt
+++ b/Documentation/user-review-ui.txt
@@ -335,6 +335,13 @@
comments on at least one of the sides. Otherwise unchanged files are
filtered out.
+
+- `W` (Rewritten):
++
+The file is rewritten. The status `W` (Rewritten) is returned instead of `M`
+(Modified) if the majority of the lines have been changed so that the new file
+content has a very low similarity with the old file content.
+
image::images/user-review-ui-change-screen-file-list-modification-type.png[width=800, link="images/user-review-ui-change-screen-file-list-modification-type.png"]
[[rename-or-copy]]
diff --git a/java/com/google/gerrit/entities/CoreDownloadSchemes.java b/java/com/google/gerrit/entities/CoreDownloadSchemes.java
index 9bcd365..85e55a0 100644
--- a/java/com/google/gerrit/entities/CoreDownloadSchemes.java
+++ b/java/com/google/gerrit/entities/CoreDownloadSchemes.java
@@ -20,7 +20,6 @@
public static final String ANON_HTTP = "anonymous http";
public static final String HTTP = "http";
public static final String SSH = "ssh";
- public static final String REPO_DOWNLOAD = "repo";
public static final String REPO = "repo";
private CoreDownloadSchemes() {}
diff --git a/java/com/google/gerrit/extensions/client/ListOption.java b/java/com/google/gerrit/extensions/client/ListOption.java
index dba2eee..098966a 100644
--- a/java/com/google/gerrit/extensions/client/ListOption.java
+++ b/java/com/google/gerrit/extensions/client/ListOption.java
@@ -14,6 +14,7 @@
package com.google.gerrit.extensions.client;
+import com.google.gerrit.extensions.restapi.BadRequestException;
import java.lang.reflect.InvocationTargetException;
import java.util.EnumSet;
import java.util.Set;
@@ -22,6 +23,22 @@
public interface ListOption {
int getValue();
+ static <T extends Enum<T> & ListOption> EnumSet<T> fromHexString(Class<T> clazz, String hex)
+ throws BadRequestException {
+ int parsed;
+ try {
+ parsed = Integer.parseInt(hex, 16);
+ } catch (IllegalArgumentException e) {
+ throw new BadRequestException("not a hex-encoded 32-bit integer: " + hex, e);
+ }
+
+ try {
+ return fromBits(clazz, parsed);
+ } catch (IllegalArgumentException e) {
+ throw new BadRequestException(e.getMessage());
+ }
+ }
+
static <T extends Enum<T> & ListOption> EnumSet<T> fromBits(Class<T> clazz, int v) {
EnumSet<T> r = EnumSet.noneOf(clazz);
T[] values;
@@ -43,7 +60,7 @@
}
if (v != 0) {
throw new IllegalArgumentException(
- "unknown " + clazz.getName() + ": " + Integer.toHexString(v));
+ "unknown " + clazz.getSimpleName() + ": " + Integer.toHexString(v));
}
return r;
}
diff --git a/java/com/google/gerrit/server/restapi/account/QueryAccounts.java b/java/com/google/gerrit/server/restapi/account/QueryAccounts.java
index 0d12fd4..e6b4eee 100644
--- a/java/com/google/gerrit/server/restapi/account/QueryAccounts.java
+++ b/java/com/google/gerrit/server/restapi/account/QueryAccounts.java
@@ -107,8 +107,8 @@
}
@Option(name = "-O", usage = "Output option flags, in hex")
- void setOptionFlagsHex(String hex) {
- options.addAll(ListOption.fromBits(ListAccountsOption.class, Integer.parseInt(hex, 16)));
+ void setOptionFlagsHex(String hex) throws BadRequestException {
+ options.addAll(ListOption.fromHexString(ListAccountsOption.class, hex));
}
@Option(
diff --git a/java/com/google/gerrit/server/restapi/change/GetChange.java b/java/com/google/gerrit/server/restapi/change/GetChange.java
index c51bb91..740b8cb 100644
--- a/java/com/google/gerrit/server/restapi/change/GetChange.java
+++ b/java/com/google/gerrit/server/restapi/change/GetChange.java
@@ -67,8 +67,9 @@
}
@Option(name = "-O", usage = "Output option flags, in hex")
- void setOptionFlagsHex(String hex) {
- options.addAll(ListOption.fromBits(ListChangesOption.class, Integer.parseInt(hex, 16)));
+ void setOptionFlagsHex(String hex) throws BadRequestException {
+ EnumSet<ListChangesOption> optionSet = ListOption.fromHexString(ListChangesOption.class, hex);
+ options.addAll(optionSet);
}
@Inject
diff --git a/java/com/google/gerrit/server/restapi/change/GetDetail.java b/java/com/google/gerrit/server/restapi/change/GetDetail.java
index 15362d5..c6bbf53 100644
--- a/java/com/google/gerrit/server/restapi/change/GetDetail.java
+++ b/java/com/google/gerrit/server/restapi/change/GetDetail.java
@@ -35,7 +35,7 @@
}
@Option(name = "-O", usage = "Output option flags, in hex")
- void setOptionFlagsHex(String hex) {
+ void setOptionFlagsHex(String hex) throws BadRequestException {
delegate.setOptionFlagsHex(hex);
}
diff --git a/java/com/google/gerrit/server/restapi/change/GetMetaDiff.java b/java/com/google/gerrit/server/restapi/change/GetMetaDiff.java
index af23ba7..08d51e7 100644
--- a/java/com/google/gerrit/server/restapi/change/GetMetaDiff.java
+++ b/java/com/google/gerrit/server/restapi/change/GetMetaDiff.java
@@ -62,8 +62,8 @@
}
@Option(name = "-O", usage = "Output option flags, in hex")
- void setOptionFlagsHex(String hex) {
- options.addAll(ListOption.fromBits(ListChangesOption.class, Integer.parseInt(hex, 16)));
+ void setOptionFlagsHex(String hex) throws BadRequestException {
+ options.addAll(ListOption.fromHexString(ListChangesOption.class, hex));
}
@Option(name = "--old", usage = "old NoteDb meta SHA-1")
diff --git a/java/com/google/gerrit/server/restapi/change/QueryChanges.java b/java/com/google/gerrit/server/restapi/change/QueryChanges.java
index cf0d4cf..91fa2f0 100644
--- a/java/com/google/gerrit/server/restapi/change/QueryChanges.java
+++ b/java/com/google/gerrit/server/restapi/change/QueryChanges.java
@@ -82,8 +82,8 @@
}
@Option(name = "-O", usage = "Output option flags, in hex")
- void setOptionFlagsHex(String hex) {
- options.addAll(ListOption.fromBits(ListChangesOption.class, Integer.parseInt(hex, 16)));
+ void setOptionFlagsHex(String hex) throws BadRequestException {
+ options.addAll(ListOption.fromHexString(ListChangesOption.class, hex));
}
@Option(
diff --git a/java/com/google/gerrit/server/restapi/group/ListGroups.java b/java/com/google/gerrit/server/restapi/group/ListGroups.java
index 96402be..854f091 100644
--- a/java/com/google/gerrit/server/restapi/group/ListGroups.java
+++ b/java/com/google/gerrit/server/restapi/group/ListGroups.java
@@ -186,8 +186,8 @@
}
@Option(name = "-O", usage = "Output option flags, in hex")
- void setOptionFlagsHex(String hex) {
- options.addAll(ListOption.fromBits(ListGroupsOption.class, Integer.parseInt(hex, 16)));
+ void setOptionFlagsHex(String hex) throws BadRequestException {
+ options.addAll(ListOption.fromHexString(ListGroupsOption.class, hex));
}
@Option(
diff --git a/java/com/google/gerrit/server/restapi/group/QueryGroups.java b/java/com/google/gerrit/server/restapi/group/QueryGroups.java
index 26e8459..befccfe 100644
--- a/java/com/google/gerrit/server/restapi/group/QueryGroups.java
+++ b/java/com/google/gerrit/server/restapi/group/QueryGroups.java
@@ -80,8 +80,8 @@
}
@Option(name = "-O", usage = "Output option flags, in hex")
- public void setOptionFlagsHex(String hex) {
- options.addAll(ListOption.fromBits(ListGroupsOption.class, Integer.parseInt(hex, 16)));
+ public void setOptionFlagsHex(String hex) throws BadRequestException {
+ options.addAll(ListOption.fromHexString(ListGroupsOption.class, hex));
}
@Inject
diff --git a/javatests/com/google/gerrit/acceptance/api/change/QueryChangesIT.java b/javatests/com/google/gerrit/acceptance/api/change/QueryChangesIT.java
index 14704ad..31381dd 100644
--- a/javatests/com/google/gerrit/acceptance/api/change/QueryChangesIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/change/QueryChangesIT.java
@@ -24,8 +24,8 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.gerrit.acceptance.AbstractDaemonTest;
-import com.google.gerrit.acceptance.NoHttpd;
import com.google.gerrit.acceptance.PushOneCommit;
+import com.google.gerrit.acceptance.RestResponse;
import com.google.gerrit.acceptance.UseClockStep;
import com.google.gerrit.acceptance.config.GerritConfig;
import com.google.gerrit.acceptance.testsuite.account.AccountOperations;
@@ -51,7 +51,6 @@
import org.eclipse.jgit.junit.TestRepository;
import org.junit.Test;
-@NoHttpd
public class QueryChangesIT extends AbstractDaemonTest {
@Inject private AccountOperations accountOperations;
@Inject private ProjectOperations projectOperations;
@@ -334,6 +333,13 @@
}
@Test
+ public void testInvalidListChangeOption() throws Exception {
+ PushOneCommit.Result r = createChange();
+ RestResponse rep = adminRestSession.get("/changes/" + r.getChange().getId() + "/?O=fffffff");
+ rep.assertBadRequest();
+ }
+
+ @Test
@SuppressWarnings("unchecked")
public void skipVisibility_privateChange() throws Exception {
TestRepository<InMemoryRepository> userRepo = cloneProject(project, user);
diff --git a/javatests/com/google/gerrit/acceptance/server/quota/RepositorySizeQuotaIT.java b/javatests/com/google/gerrit/acceptance/server/quota/RepositorySizeQuotaIT.java
index 2692584..c9c3bbb 100644
--- a/javatests/com/google/gerrit/acceptance/server/quota/RepositorySizeQuotaIT.java
+++ b/javatests/com/google/gerrit/acceptance/server/quota/RepositorySizeQuotaIT.java
@@ -76,8 +76,13 @@
@Test
public void pushWithAvailableTokens() throws Exception {
+ // The push creates a pack that contains 325 bytes of uncompressed data.
+ // The data in the push contains sha and timestamps which are different on each test run.
+ // Due to it, the push's pack size varies after data compression and lead to a flaky tests
+ // if the amount of availableTokens doesn't cover all possible sizes. To avoid flakiness, we
+ // set availableTokens value large enough to cover all possible pack sizes.
when(quotaBackendWithResource.availableTokens(REPOSITORY_SIZE_GROUP))
- .thenReturn(singletonAggregation(ok(277L)));
+ .thenReturn(singletonAggregation(ok(512L)));
when(quotaBackendWithResource.requestTokens(eq(REPOSITORY_SIZE_GROUP), anyLong()))
.thenReturn(singletonAggregation(ok()));
when(quotaBackendWithUser.project(project)).thenReturn(quotaBackendWithResource);
diff --git a/javatests/com/google/gerrit/extensions/client/ListOptionTest.java b/javatests/com/google/gerrit/extensions/client/ListOptionTest.java
index 5e8c7b6..543428a 100644
--- a/javatests/com/google/gerrit/extensions/client/ListOptionTest.java
+++ b/javatests/com/google/gerrit/extensions/client/ListOptionTest.java
@@ -19,8 +19,10 @@
import static com.google.gerrit.extensions.client.ListOptionTest.MyOption.BAR;
import static com.google.gerrit.extensions.client.ListOptionTest.MyOption.BAZ;
import static com.google.gerrit.extensions.client.ListOptionTest.MyOption.FOO;
+import static org.junit.Assert.fail;
import com.google.common.math.IntMath;
+import com.google.gerrit.extensions.restapi.BadRequestException;
import java.util.EnumSet;
import org.junit.Test;
@@ -43,6 +45,17 @@
}
@Test
+ public void fromHexString() {
+ try {
+ // TODO(hanwen): move GerritJUnit.assertThrows to a place that doesn't depend on everything.
+ ListOption.fromHexString(MyOption.class, "xyz");
+ fail("must throw");
+ } catch (BadRequestException e) {
+ assertThat(e.getMessage()).contains("32-bit integer");
+ }
+ }
+
+ @Test
public void fromBits() {
assertThat(IntMath.pow(2, BAZ.getValue())).isEqualTo(131072);
assertThat(ListOption.fromBits(MyOption.class, 0)).isEmpty();