Merge "Remove html commentlink functionality."
diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt
index aca98e7..3e82254 100644
--- a/Documentation/config-gerrit.txt
+++ b/Documentation/config-gerrit.txt
@@ -870,8 +870,14 @@
* `"plugin_resources"`: default is 2m (2 MiB of memory)
+
-If set to 0 the cache is disabled. Entries are removed immediately
-after being stored by the cache. This is primarily useful for testing.
+If set to 0 the cache is disabled; entries are loaded but not stored
+in-memory.
++
+**NOTE**: When the cache is disabled, there is no locking when accessing
+the same key/value, and therefore multiple threads may
+load the same value concurrently with a higher memory footprint.
+To keep a minimum caching and avoid concurrent loading of the same
+key/value, set `memoryLimit` to `1` and `maxAge` to `1`.
[[cache.name.expireFromMemoryAfterAccess]]cache.<name>.expireFromMemoryAfterAccess::
+
diff --git a/WORKSPACE b/WORKSPACE
index ab4ab55..047da6a 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -42,11 +42,11 @@
http_archive(
name = "rbe_jdk11",
- sha256 = "5939e2a4e56d1fc53b6c44c6db97ee068c9f4bd18e86c762f6ab8b4fff5e294b",
- strip_prefix = "rbe_autoconfig-3.0.0",
+ sha256 = "dbcfd6f26589ef506b91fe03a12dc559ca9c84699e4cf6381150522287f0e6f6",
+ strip_prefix = "rbe_autoconfig-3.1.0",
urls = [
- "https://gerrit-bazel.storage.googleapis.com/rbe_autoconfig/v3.0.0.tar.gz",
- "https://github.com/davido/rbe_autoconfig/archive/v3.0.0.tar.gz",
+ "https://gerrit-bazel.storage.googleapis.com/rbe_autoconfig/v3.1.0.tar.gz",
+ "https://github.com/davido/rbe_autoconfig/archive/v3.1.0.tar.gz",
],
)
diff --git a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/GitSimulation.scala b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/GitSimulation.scala
index 5d8dd6f..53f942d 100644
--- a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/GitSimulation.scala
+++ b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/GitSimulation.scala
@@ -14,6 +14,7 @@
package com.google.gerrit.scenarios
+import static java.nio.charset.StandardCharsets.UTF_8
import java.io.{File, IOException}
import java.net.URLEncoder
@@ -31,7 +32,7 @@
protected val gitProtocol: GitProtocol = GitProtocol()
override def replaceOverride(in: String): String = {
- var next = replaceKeyWith("_project", URLEncoder.encode(getFullProjectName(projectName), "UTF-8"), in)
+ var next = replaceKeyWith("_project", URLEncoder.encode(getFullProjectName(projectName), UTF_8), in)
val authenticated = getProperty("authenticated", false).toBoolean
val value = "CONTEXT_PATH" + (if (authenticated) "/a" else "")
next = replaceKeyWith("context_path", value, next)
diff --git a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/ProjectSimulation.scala b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/ProjectSimulation.scala
index 7d7bed7..f0c6f68 100644
--- a/e2e-tests/src/test/scala/com/google/gerrit/scenarios/ProjectSimulation.scala
+++ b/e2e-tests/src/test/scala/com/google/gerrit/scenarios/ProjectSimulation.scala
@@ -14,12 +14,13 @@
package com.google.gerrit.scenarios
+import static java.nio.charset.StandardCharsets.UTF_8
import java.net.URLEncoder
class ProjectSimulation extends GerritSimulation {
projectName = "defaultTestProject"
override def replaceOverride(in: String): String = {
- replaceProperty("project", URLEncoder.encode(getFullProjectName(projectName), "UTF-8"), in)
+ replaceProperty("project", URLEncoder.encode(getFullProjectName(projectName), UTF_8, in)
}
}
diff --git a/java/com/google/gerrit/acceptance/AbstractDynamicOptionsTest.java b/java/com/google/gerrit/acceptance/AbstractDynamicOptionsTest.java
index a4ed80a..4e8d20d 100644
--- a/java/com/google/gerrit/acceptance/AbstractDynamicOptionsTest.java
+++ b/java/com/google/gerrit/acceptance/AbstractDynamicOptionsTest.java
@@ -15,6 +15,7 @@
package com.google.gerrit.acceptance;
import static com.google.gerrit.sshd.CommandMetaData.Mode.MASTER_OR_SLAVE;
+import static java.nio.charset.StandardCharsets.UTF_8;
import com.google.common.collect.Lists;
import com.google.gerrit.extensions.annotations.Exports;
@@ -50,7 +51,7 @@
public void display(OutputStream displayOutputStream) throws Exception {
PrintWriter stdout =
- new PrintWriter(new BufferedWriter(new OutputStreamWriter(displayOutputStream, "UTF-8")));
+ new PrintWriter(new BufferedWriter(new OutputStreamWriter(displayOutputStream, UTF_8)));
try {
OutputFormat.JSON
.newGson()
diff --git a/java/com/google/gerrit/entities/KeyUtil.java b/java/com/google/gerrit/entities/KeyUtil.java
index be28689..0f14cd9 100644
--- a/java/com/google/gerrit/entities/KeyUtil.java
+++ b/java/com/google/gerrit/entities/KeyUtil.java
@@ -14,7 +14,8 @@
package com.google.gerrit.entities;
-import java.io.UnsupportedEncodingException;
+import static java.nio.charset.StandardCharsets.UTF_8;
+
import java.util.Arrays;
public class KeyUtil {
@@ -49,13 +50,7 @@
}
public static String encode(final String key) {
- final byte[] b;
- try {
- b = key.getBytes("UTF-8");
- } catch (UnsupportedEncodingException e) {
- throw new IllegalStateException("No UTF-8 support", e);
- }
-
+ final byte[] b = key.getBytes(UTF_8);
final StringBuilder r = new StringBuilder(b.length);
for (int i = 0; i < b.length; i++) {
final int c = b[i] & 0xff;
@@ -99,10 +94,6 @@
} catch (ArrayIndexOutOfBoundsException err) {
throw new IllegalArgumentException("Bad encoding" + key, err);
}
- try {
- return new String(b, 0, bPtr, "UTF-8");
- } catch (UnsupportedEncodingException e) {
- throw new IllegalStateException("No UTF-8 support", e);
- }
+ return new String(b, 0, bPtr, UTF_8);
}
}
diff --git a/java/com/google/gerrit/lucene/LuceneChangeIndex.java b/java/com/google/gerrit/lucene/LuceneChangeIndex.java
index 159afb8..4122181 100644
--- a/java/com/google/gerrit/lucene/LuceneChangeIndex.java
+++ b/java/com/google/gerrit/lucene/LuceneChangeIndex.java
@@ -112,26 +112,6 @@
private static final String CHANGES_CLOSED = "closed";
private static final String CHANGE_FIELD = ChangeField.CHANGE.getName();
- /*
- @FunctionalInterface
- interface IdTerm {
- Term get(String name, int id);
- }
-
- static Term idTerm(IdTerm idTerm, FieldDef<ChangeData, ?> idField, ChangeData cd) {
- return idTerm(idTerm, idField, cd.getId());
- }
-
- static Term idTerm(IdTerm idTerm, FieldDef<ChangeData, ?> idField, Change.Id id) {
- return idTerm.get(idField.getName(), id.get());
- }
-
- @FunctionalInterface
- interface ChangeIdExtractor {
- Change.Id extract(IndexableField f);
- }
- */
-
static Term idTerm(ChangeData cd) {
return idTerm(cd.getId());
}
diff --git a/java/com/google/gerrit/server/cache/mem/DefaultMemoryCacheFactory.java b/java/com/google/gerrit/server/cache/mem/DefaultMemoryCacheFactory.java
index 3b104dd..28a2ede 100644
--- a/java/com/google/gerrit/server/cache/mem/DefaultMemoryCacheFactory.java
+++ b/java/com/google/gerrit/server/cache/mem/DefaultMemoryCacheFactory.java
@@ -55,14 +55,15 @@
@Override
public <K, V> LoadingCache<K, V> build(CacheDef<K, V> def, CacheLoader<K, V> loader) {
- return CaffeinatedGuava.build(create(def), loader);
+ return cacheMaximumWeight(def) == 0
+ ? new PassthroughLoadingCache<>(loader)
+ : CaffeinatedGuava.build(create(def), loader);
}
private <K, V> Caffeine<K, V> create(CacheDef<K, V> def) {
Caffeine<K, V> builder = newCacheBuilder();
builder.recordStats();
- builder.maximumWeight(
- cfg.getLong("cache", def.configKey(), "memoryLimit", def.maximumWeight()));
+ builder.maximumWeight(cacheMaximumWeight(def));
builder = builder.removalListener(newRemovalListener(def.name()));
builder.weigher(newWeigher(def.weigher()));
@@ -109,6 +110,10 @@
return builder;
}
+ private <K, V> long cacheMaximumWeight(CacheDef<K, V> def) {
+ return cfg.getLong("cache", def.configKey(), "memoryLimit", def.maximumWeight());
+ }
+
private static long toSeconds(@Nullable Duration duration) {
return duration != null ? duration.getSeconds() : 0;
}
diff --git a/java/com/google/gerrit/server/cache/mem/PassthroughLoadingCache.java b/java/com/google/gerrit/server/cache/mem/PassthroughLoadingCache.java
new file mode 100644
index 0000000..ded21aa
--- /dev/null
+++ b/java/com/google/gerrit/server/cache/mem/PassthroughLoadingCache.java
@@ -0,0 +1,141 @@
+// Copyright (C) 2022 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.cache.mem;
+
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.CacheLoader.UnsupportedLoadingOperationException;
+import com.google.common.cache.CacheStats;
+import com.google.common.cache.LoadingCache;
+import com.google.common.collect.ImmutableMap;
+import com.google.gerrit.common.Nullable;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+
+/** Implementation of a NOOP cache that just passes all gets to the loader */
+public class PassthroughLoadingCache<K, V> implements LoadingCache<K, V> {
+
+ private final CacheLoader<? super K, V> cacheLoader;
+
+ public PassthroughLoadingCache(CacheLoader<? super K, V> cacheLoader) {
+ this.cacheLoader = cacheLoader;
+ }
+
+ @Override
+ public @Nullable V getIfPresent(Object key) {
+ return null;
+ }
+
+ @Override
+ public V get(K key, Callable<? extends V> loader) throws ExecutionException {
+ try {
+ return loader.call();
+ } catch (Exception e) {
+ throw new ExecutionException(e);
+ }
+ }
+
+ @Override
+ public ImmutableMap<K, V> getAllPresent(Iterable<?> keys) {
+ return ImmutableMap.of();
+ }
+
+ @Override
+ public void put(K key, V value) {}
+
+ @Override
+ public void putAll(Map<? extends K, ? extends V> m) {}
+
+ @Override
+ public void invalidate(Object key) {}
+
+ @Override
+ public void invalidateAll(Iterable<?> keys) {}
+
+ @Override
+ public void invalidateAll() {}
+
+ @Override
+ public long size() {
+ return 0;
+ }
+
+ @Override
+ public CacheStats stats() {
+ return new CacheStats(0, 0, 0, 0, 0, 0);
+ }
+
+ @Override
+ public void cleanUp() {}
+
+ @Override
+ public V get(K key) throws ExecutionException {
+ try {
+ return cacheLoader.load(key);
+ } catch (Exception e) {
+ throw new ExecutionException(e);
+ }
+ }
+
+ @Override
+ public V getUnchecked(K key) {
+ try {
+ return cacheLoader.load(key);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ @Override
+ public ImmutableMap<K, V> getAll(Iterable<? extends K> keys) throws ExecutionException {
+ try {
+ try {
+ return getAllBulk(keys);
+ } catch (UnsupportedLoadingOperationException e) {
+ return getAllIndividually(keys);
+ }
+ } catch (Exception e) {
+ throw new ExecutionException(e);
+ }
+ }
+
+ private ImmutableMap<K, V> getAllIndividually(Iterable<? extends K> keys) throws Exception {
+ ImmutableMap.Builder<K, V> builder = ImmutableMap.builder();
+ for (K k : keys) {
+ builder.put(k, cacheLoader.load(k));
+ }
+ return builder.build();
+ }
+
+ @SuppressWarnings("unchecked")
+ private ImmutableMap<K, V> getAllBulk(Iterable<? extends K> keys) throws Exception {
+ return (ImmutableMap<K, V>) ImmutableMap.copyOf(cacheLoader.loadAll(keys));
+ }
+
+ @Override
+ public V apply(K key) {
+ return getUnchecked(key);
+ }
+
+ @Override
+ public void refresh(K key) {}
+
+ @Override
+ public ConcurrentMap<K, V> asMap() {
+ return new ConcurrentHashMap<>();
+ }
+}
diff --git a/javatests/com/google/gerrit/server/cache/mem/BUILD b/javatests/com/google/gerrit/server/cache/mem/BUILD
new file mode 100644
index 0000000..a263c7b
--- /dev/null
+++ b/javatests/com/google/gerrit/server/cache/mem/BUILD
@@ -0,0 +1,14 @@
+load("//tools/bzl:junit.bzl", "junit_tests")
+
+junit_tests(
+ name = "tests",
+ srcs = glob(["*Test.java"]),
+ deps = [
+ "//java/com/google/gerrit/server",
+ "//java/com/google/gerrit/server/cache/mem",
+ "//lib:jgit",
+ "//lib:junit",
+ "//lib/guice",
+ "//lib/truth",
+ ],
+)
diff --git a/javatests/com/google/gerrit/server/cache/mem/DefaultMemoryCacheFactoryTest.java b/javatests/com/google/gerrit/server/cache/mem/DefaultMemoryCacheFactoryTest.java
new file mode 100644
index 0000000..5958465
--- /dev/null
+++ b/javatests/com/google/gerrit/server/cache/mem/DefaultMemoryCacheFactoryTest.java
@@ -0,0 +1,203 @@
+// Copyright (C) 2022 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.cache.mem;
+
+import static com.google.common.base.Functions.identity;
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.common.cache.Weigher;
+import com.google.common.collect.ImmutableMap;
+import com.google.gerrit.server.cache.CacheDef;
+import com.google.inject.TypeLiteral;
+import java.time.Duration;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.BrokenBarrierException;
+import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
+import org.eclipse.jgit.lib.Config;
+import org.junit.Before;
+import org.junit.Test;
+
+public class DefaultMemoryCacheFactoryTest {
+
+ private static final String TEST_CACHE = "test-cache";
+ private static final long TEST_TIMEOUT_SEC = 1;
+ private static final int TEST_CACHE_KEY = 1;
+
+ private DefaultMemoryCacheFactory memoryCacheFactory;
+ private Config memoryCacheConfig;
+ private ScheduledExecutorService executor;
+ private CyclicBarrier cacheGetStarted;
+ private CyclicBarrier cacheGetCompleted;
+
+ @Before
+ public void setUp() {
+ memoryCacheConfig = new Config();
+ memoryCacheFactory = new DefaultMemoryCacheFactory(memoryCacheConfig, null);
+ executor = Executors.newScheduledThreadPool(1);
+ cacheGetStarted = new CyclicBarrier(2);
+ cacheGetCompleted = new CyclicBarrier(2);
+ }
+
+ @Test
+ public void shouldNotBlockEvictionsWhenCacheIsDisabledByDefault() throws Exception {
+ LoadingCache<Integer, Integer> disabledCache =
+ memoryCacheFactory.build(newCacheDef(0), newCacheLoader(identity()));
+
+ assertCacheEvictionIsNotBlocking(disabledCache);
+ }
+
+ @Test
+ public void shouldNotBlockEvictionsWhenCacheIsDisabledByConfiguration() throws Exception {
+ memoryCacheConfig.setInt("cache", TEST_CACHE, "memoryLimit", 0);
+ LoadingCache<Integer, Integer> disabledCache =
+ memoryCacheFactory.build(newCacheDef(1), newCacheLoader(identity()));
+
+ assertCacheEvictionIsNotBlocking(disabledCache);
+ }
+
+ @Test
+ public void shouldBlockEvictionsWhenCacheIsEnabled() throws Exception {
+ LoadingCache<Integer, Integer> cache =
+ memoryCacheFactory.build(newCacheDef(1), newCacheLoader(identity()));
+
+ ScheduledFuture<Integer> cacheValue =
+ executor.schedule(() -> cache.getUnchecked(TEST_CACHE_KEY), 0, TimeUnit.SECONDS);
+
+ cacheGetStarted.await(TEST_TIMEOUT_SEC, TimeUnit.SECONDS);
+ cache.invalidate(TEST_CACHE_KEY);
+
+ assertThat(cacheValue.isDone()).isTrue();
+ assertThat(cacheValue.get()).isEqualTo(TEST_CACHE_KEY);
+ }
+
+ @Test
+ public void shouldLoadAllKeysWithDisabledCache() throws Exception {
+ LoadingCache<Integer, Integer> disabledCache =
+ memoryCacheFactory.build(newCacheDef(0), newCacheLoader(identity()));
+
+ List<Integer> keys = Arrays.asList(1, 2);
+ ImmutableMap<Integer, Integer> entries = disabledCache.getAll(keys);
+
+ assertThat(entries).containsExactly(1, 1, 2, 2);
+ }
+
+ private void assertCacheEvictionIsNotBlocking(LoadingCache<Integer, Integer> disabledCache)
+ throws InterruptedException, BrokenBarrierException, TimeoutException, ExecutionException {
+ ScheduledFuture<Integer> cacheValue =
+ executor.schedule(() -> disabledCache.getUnchecked(TEST_CACHE_KEY), 0, TimeUnit.SECONDS);
+ cacheGetStarted.await(TEST_TIMEOUT_SEC, TimeUnit.SECONDS);
+ disabledCache.invalidate(TEST_CACHE_KEY);
+
+ // The invalidate did not wait for the cache loader to finish, therefore the cacheValue isn't
+ // done yet
+ assertThat(cacheValue.isDone()).isFalse();
+
+ // The cache loader completes after the invalidation
+ cacheGetCompleted.await(TEST_TIMEOUT_SEC, TimeUnit.SECONDS);
+ assertThat(cacheValue.get()).isEqualTo(TEST_CACHE_KEY);
+ }
+
+ private CacheLoader<Integer, Integer> newCacheLoader(Function<Integer, Integer> loadFunc) {
+ return new CacheLoader<>() {
+
+ @Override
+ public Integer load(Integer n) throws Exception {
+ Integer v = 0;
+ try {
+ cacheGetStarted.await(TEST_TIMEOUT_SEC, TimeUnit.SECONDS);
+ v = loadFunc.apply(n);
+ cacheGetCompleted.await(TEST_TIMEOUT_SEC, TimeUnit.SECONDS);
+ } catch (TimeoutException | BrokenBarrierException e) {
+ // Just continue
+ }
+ return v;
+ }
+
+ @Override
+ public Map<Integer, Integer> loadAll(Iterable<? extends Integer> keys) throws Exception {
+ return StreamSupport.stream(keys.spliterator(), false)
+ .collect(Collectors.toMap(identity(), identity()));
+ }
+ };
+ }
+
+ private CacheDef<Integer, Integer> newCacheDef(long maximumWeight) {
+ return new CacheDef<>() {
+
+ @Override
+ public String name() {
+ return TEST_CACHE;
+ }
+
+ @Override
+ public String configKey() {
+ return TEST_CACHE;
+ }
+
+ @Override
+ public TypeLiteral<Integer> keyType() {
+ return null;
+ }
+
+ @Override
+ public TypeLiteral<Integer> valueType() {
+ return null;
+ }
+
+ @Override
+ public long maximumWeight() {
+ return maximumWeight;
+ }
+
+ @Override
+ public Duration expireAfterWrite() {
+ return null;
+ }
+
+ @Override
+ public Duration expireFromMemoryAfterAccess() {
+ return null;
+ }
+
+ @Override
+ public Duration refreshAfterWrite() {
+ return null;
+ }
+
+ @Override
+ public Weigher<Integer, Integer> weigher() {
+ return null;
+ }
+
+ @Override
+ public CacheLoader<Integer, Integer> loader() {
+ return null;
+ }
+ };
+ }
+}
diff --git a/tools/deps.bzl b/tools/deps.bzl
index 3138d15..1e7c8a9 100644
--- a/tools/deps.bzl
+++ b/tools/deps.bzl
@@ -21,7 +21,7 @@
# When updating Bouncy Castle, also update it in bazlets.
BC_VERS = "1.64"
HTTPCOMP_VERS = "4.5.2"
-JETTY_VERS = "9.4.36.v20210114"
+JETTY_VERS = "9.4.49.v20220914"
BYTE_BUDDY_VERSION = "1.10.7"
def java_dependencies():
@@ -621,50 +621,50 @@
maven_jar(
name = "jetty-servlet",
artifact = "org.eclipse.jetty:jetty-servlet:" + JETTY_VERS,
- sha1 = "b189e52a5ee55ae172e4e99e29c5c314f5daf4b9",
+ sha1 = "53ca0898f02e72b6830551031ee0062430134a05",
)
maven_jar(
name = "jetty-security",
artifact = "org.eclipse.jetty:jetty-security:" + JETTY_VERS,
- sha1 = "42030d6ed7dfc0f75818cde0adcf738efc477574",
+ sha1 = "057a67eeb12078b620131664b3b7a37ea4c5aefe",
)
maven_jar(
name = "jetty-server",
artifact = "org.eclipse.jetty:jetty-server:" + JETTY_VERS,
- sha1 = "88a7d342974aadca658e7386e8d0fcc5c0788f41",
+ sha1 = "502f99eed028139e71a4afebefa291ace12b9c1c",
)
maven_jar(
name = "jetty-jmx",
artifact = "org.eclipse.jetty:jetty-jmx:" + JETTY_VERS,
- sha1 = "bb3847eabe085832aeaedd30e872b40931632e54",
+ sha1 = "5e24afaedcc746f03fb0f60e6c0bdb2af6e6c9e8",
)
maven_jar(
name = "jetty-http",
artifact = "org.eclipse.jetty:jetty-http:" + JETTY_VERS,
- sha1 = "1eee89a55e04ff94df0f85d95200fc48acb43d86",
+ sha1 = "ef1e3bde212115eb4bb0740aaf79029b624d4e30",
)
maven_jar(
name = "jetty-io",
artifact = "org.eclipse.jetty:jetty-io:" + JETTY_VERS,
- sha1 = "84a8faf9031eb45a5a2ddb7681e22c483d81ab3a",
+ sha1 = "cb33d9a3bdb6e2173b9b9cfc94c0b45f9a21a1af",
)
maven_jar(
name = "jetty-util",
artifact = "org.eclipse.jetty:jetty-util:" + JETTY_VERS,
- sha1 = "925257fbcca6b501a25252c7447dbedb021f7404",
+ sha1 = "29008dbc6dfac553d209f54193b505d73c253a41",
)
maven_jar(
name = "jetty-util-ajax",
artifact = "org.eclipse.jetty:jetty-util-ajax:" + JETTY_VERS,
- sha1 = "2f478130c21787073facb64d7242e06f94980c60",
- src_sha1 = "7153d7ca38878d971fd90992c303bb7719ba7a21",
+ sha1 = "3b267b5ae59b7b826d5b579f2ee8b8914b286547",
+ src_sha1 = "adba851ccfbf5b2bece305d0f0bb9179852fbffb",
)
maven_jar(
diff --git a/tools/maven/gerrit-acceptance-framework_pom.xml b/tools/maven/gerrit-acceptance-framework_pom.xml
index 448cf82..1ebf3d0 100644
--- a/tools/maven/gerrit-acceptance-framework_pom.xml
+++ b/tools/maven/gerrit-acceptance-framework_pom.xml
@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.gerrit</groupId>
<artifactId>gerrit-acceptance-framework</artifactId>
- <version>3.7.0-SNAPSHOT</version>
+ <version>3.7.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Gerrit Code Review - Acceptance Test Framework</name>
<description>Framework for Gerrit's acceptance tests</description>
diff --git a/tools/maven/gerrit-extension-api_pom.xml b/tools/maven/gerrit-extension-api_pom.xml
index dc9a55a..5d817af 100644
--- a/tools/maven/gerrit-extension-api_pom.xml
+++ b/tools/maven/gerrit-extension-api_pom.xml
@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.gerrit</groupId>
<artifactId>gerrit-extension-api</artifactId>
- <version>3.7.0-SNAPSHOT</version>
+ <version>3.7.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Gerrit Code Review - Extension API</name>
<description>API for Gerrit Extensions</description>
diff --git a/tools/maven/gerrit-plugin-api_pom.xml b/tools/maven/gerrit-plugin-api_pom.xml
index b9f8e52..bc61907c 100644
--- a/tools/maven/gerrit-plugin-api_pom.xml
+++ b/tools/maven/gerrit-plugin-api_pom.xml
@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.gerrit</groupId>
<artifactId>gerrit-plugin-api</artifactId>
- <version>3.7.0-SNAPSHOT</version>
+ <version>3.7.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Gerrit Code Review - Plugin API</name>
<description>API for Gerrit Plugins</description>
diff --git a/tools/maven/gerrit-war_pom.xml b/tools/maven/gerrit-war_pom.xml
index d4ffb24..77c1134 100644
--- a/tools/maven/gerrit-war_pom.xml
+++ b/tools/maven/gerrit-war_pom.xml
@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.gerrit</groupId>
<artifactId>gerrit-war</artifactId>
- <version>3.7.0-SNAPSHOT</version>
+ <version>3.7.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Gerrit Code Review - WAR</name>
<description>Gerrit WAR</description>
diff --git a/version.bzl b/version.bzl
index f358ebf..569943f 100644
--- a/version.bzl
+++ b/version.bzl
@@ -2,4 +2,4 @@
# Used by :api_install and :api_deploy targets
# when talking to the destination repository.
#
-GERRIT_VERSION = "3.7.0-SNAPSHOT"
+GERRIT_VERSION = "3.7.1-SNAPSHOT"