Merge branch 'stable-2.14' into stable-2.15

* stable-2.14:
  Set version to 2.14.11
  Upgrade elasticsearch-rest-client to 6.3.2
  StalenessChecker: URLDecode project name before checking staleness
  AbstractQueryChangesTest: Add a test with project name that requires URL encoding
  Upgrade Dropwizard Metrics to 4.0.3
  Upgrade JGit to 4.7.2.201807261330-r
  Fix typos in documentation of 'List Files' REST API element

Change-Id: Ie19c82d34971264780d636843ccd76438f23a76e
diff --git a/Documentation/rest-api-changes.txt b/Documentation/rest-api-changes.txt
index 9f6cabd..c5bf599 100644
--- a/Documentation/rest-api-changes.txt
+++ b/Documentation/rest-api-changes.txt
@@ -4761,8 +4761,8 @@
   GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/files/ HTTP/1.0
 ----
 
-As result a map is returned that maps the link:#file-id[file path] to a list of
-link:#file-info[FileInfo] entries. The entries in the map are
+As result a map is returned that maps the link:#file-id[file path] to a
+link:#file-info[FileInfo] entry. The entries in the map are
 sorted by file path.
 
 .Response
diff --git a/WORKSPACE b/WORKSPACE
index e081e46..3eaa832 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -568,8 +568,8 @@
 
 maven_jar(
     name = "dropwizard-core",
-    artifact = "io.dropwizard.metrics:metrics-core:4.0.2",
-    sha1 = "ec9878842d510cabd6bd6a9da1bebae1ae0cd199",
+    artifact = "io.dropwizard.metrics:metrics-core:4.0.3",
+    sha1 = "bb562ee73f740bb6b2bf7955f97be6b870d9e9f0",
 )
 
 # When updading Bouncy Castle, also update it in bazlets.
@@ -880,8 +880,8 @@
 
 maven_jar(
     name = "elasticsearch-rest-client",
-    artifact = "org.elasticsearch.client:elasticsearch-rest-client:6.3.1",
-    sha1 = "99de036a2cd99dbecec1cc84f5d0e19032e74fa7",
+    artifact = "org.elasticsearch.client:elasticsearch-rest-client:6.3.2",
+    sha1 = "2077ea5f00fdd2d6af85223b730ba8047303297f",
 )
 
 JACKSON_VERSION = "2.6.6"
diff --git a/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticContainer.java b/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticContainer.java
index 050301f..92b1d95 100644
--- a/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticContainer.java
+++ b/gerrit-elasticsearch/src/test/java/com/google/gerrit/elasticsearch/ElasticContainer.java
@@ -49,7 +49,7 @@
       case V6_2:
         return "docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.4";
       case V6_3:
-        return "docker.elastic.co/elasticsearch/elasticsearch-oss:6.3.1";
+        return "docker.elastic.co/elasticsearch/elasticsearch-oss:6.3.2";
     }
     throw new IllegalStateException("No tests for version: " + version.name());
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeFinder.java b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeFinder.java
index 61df296..46016c9 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeFinder.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeFinder.java
@@ -19,6 +19,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Sets;
 import com.google.common.primitives.Ints;
+import com.google.gerrit.extensions.restapi.Url;
 import com.google.gerrit.index.IndexConfig;
 import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.client.Project;
@@ -173,7 +174,7 @@
     InternalChangeQuery query = queryProvider.get().noFields();
     List<ChangeData> r = query.byLegacyChangeId(id);
     if (r.size() == 1) {
-      changeIdProjectCache.put(id, r.get(0).project().get());
+      changeIdProjectCache.put(id, Url.encode(r.get(0).project().get()));
     }
     return asChangeNotes(r);
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/change/StalenessChecker.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/change/StalenessChecker.java
index bbc38a3..a9cd070 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/change/StalenessChecker.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/change/StalenessChecker.java
@@ -29,6 +29,7 @@
 import com.google.common.collect.Sets;
 import com.google.common.collect.Streams;
 import com.google.gerrit.common.Nullable;
+import com.google.gerrit.extensions.restapi.Url;
 import com.google.gerrit.index.IndexConfig;
 import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.client.Project;
@@ -189,7 +190,8 @@
       String s = new String(b, UTF_8);
       List<String> parts = Splitter.on(':').splitToList(s);
       RefStatePattern.check(parts.size() == 2, s);
-      result.put(new Project.NameKey(parts.get(0)), RefStatePattern.create(parts.get(1)));
+      result.put(
+          new Project.NameKey(Url.decode(parts.get(0))), RefStatePattern.create(parts.get(1)));
     }
     return result;
   }
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
index a152c7f..934d893 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
@@ -2640,6 +2640,13 @@
     assertQuery(query);
   }
 
+  @Test
+  public void byUrlEncodedProject() throws Exception {
+    TestRepository<Repo> repo = createProject("repo+foo");
+    Change change = insert(repo, newChange(repo));
+    assertQuery("project:repo+foo", change);
+  }
+
   protected ChangeInserter newChange(TestRepository<Repo> repo) throws Exception {
     return newChange(repo, null, null, null, null, false);
   }