Merge "Log and skip indexed fields that produce an error"
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/TrackingIdAccess.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/TrackingIdAccess.java
index d8b2cee..9f2bae5 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/TrackingIdAccess.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/TrackingIdAccess.java
@@ -29,6 +29,7 @@
   @Query("WHERE key.changeId = ?")
   ResultSet<TrackingId> byChange(Change.Id change) throws OrmException;
 
+  @Deprecated
   @Query("WHERE key.trackingKey = ?")
   ResultSet<TrackingId> byTrackingId(TrackingId.Id trackingId)
       throws OrmException;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java
index 2c20b03..1e748d9 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java
@@ -193,10 +193,12 @@
       PatchSet.Id patchSetId, RevCommit cherryPickCommit,
       RefControl refControl) throws InvalidChangeOperationException,
       IOException, OrmException, NoSuchChangeException {
-    patchSetInserterFactory
-        .create(git, revWalk, refControl, currentUser, change, cherryPickCommit)
-        .setMessage(buildChangeMessage(patchSetId, change))
-        .insert();
+    final PatchSetInserter inserter = patchSetInserterFactory
+        .create(git, revWalk, refControl, currentUser, change, cherryPickCommit);
+    final PatchSet.Id newPatchSetId = inserter.getPatchSetId();
+    inserter
+      .setMessage("Uploaded patch set " + newPatchSetId.get() + ".")
+      .insert();
     return change.getId();
   }
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
index 2efb611..c01a31f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
@@ -190,7 +190,7 @@
   }
 
   public void setCurrentFilePaths(List<String> filePaths) {
-    currentFiles = filePaths;
+    currentFiles = ImmutableList.copyOf(filePaths);
   }
 
   public List<String> currentFilePaths(Provider<ReviewDb> db,
@@ -223,6 +223,7 @@
           case MODIFIED:
           case DELETED:
           case COPIED:
+          case REWRITE:
             r.add(e.getNewName());
             break;
 
@@ -230,9 +231,6 @@
             r.add(e.getOldName());
             r.add(e.getNewName());
             break;
-
-          case REWRITE:
-            break;
         }
       }
       Collections.sort(r);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java
index 760287c..5ede452 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java
@@ -229,10 +229,7 @@
 
   @Operator
   public Predicate<ChangeData> comment(String value) throws QueryParseException {
-    ChangeIndex index = args.indexes.getSearchIndex();
-    if (index == null) {
-      throw error("secondary index must be enabled for comment:" + value);
-    }
+    ChangeIndex index = requireIndex(FIELD_COMMENT, value);
     return new CommentPredicate(args.dbProvider, index, value);
   }
 
@@ -347,15 +344,12 @@
   @Operator
   public Predicate<ChangeData> file(String file) throws QueryParseException {
     if (file.startsWith("^")) {
-      if (allowFileRegex || args.indexes.getSearchIndex() != null) {
-        return new RegexFilePredicate(args.dbProvider, args.patchListCache, file);
-      } else {
-        throw error("secondary index must be enabled for file:" + file);
+      if (!allowFileRegex) {
+        requireIndex(FIELD_FILE, file);
       }
+      return new RegexFilePredicate(args.dbProvider, args.patchListCache, file);
     } else {
-      if (args.indexes.getSearchIndex() == null) {
-        throw error("secondary index must be enabled for file:" + file);
-      }
+      requireIndex(FIELD_FILE, file);
       return new EqualsFilePredicate(args.dbProvider, args.patchListCache, file);
     }
   }
@@ -671,4 +665,13 @@
     }
     throw new IllegalArgumentException();
   }
+
+  private ChangeIndex requireIndex(String field, String value)
+      throws QueryParseException {
+    ChangeIndex idx = args.indexes.getSearchIndex();
+    if (idx == null) {
+      throw error("secondary index must be enabled for " + field + ":" + value);
+    }
+    return idx;
+  }
 }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java
index 38b3d0c..89e5ba9 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java
@@ -46,6 +46,7 @@
     return false;
   }
 
+  @SuppressWarnings("deprecation")
   @Override
   public ResultSet<ChangeData> read() throws OrmException {
     HashSet<Change.Id> ids = new HashSet<Change.Id>();
diff --git a/lib/asciidoctor/java/DocIndexer.java b/lib/asciidoctor/java/DocIndexer.java
index 5da7858..1bf3ac7 100644
--- a/lib/asciidoctor/java/DocIndexer.java
+++ b/lib/asciidoctor/java/DocIndexer.java
@@ -12,10 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.zip.ZipOutputStream;
@@ -43,6 +47,7 @@
   private static final Version LUCENE_VERSION = Version.LUCENE_44;
   private static final String DOC_FIELD = "doc";
   private static final String URL_FIELD = "url";
+  private static final String TITLE_FIELD = "title";
 
   @Option(name = "-z", usage = "output zip file")
   private String zipFile;
@@ -82,6 +87,17 @@
     IndexWriter iwriter = new IndexWriter(directory, config);
     for (String inputFile : inputFiles) {
       File file = new File(inputFile);
+
+      BufferedReader titleReader = new BufferedReader(
+          new InputStreamReader(new FileInputStream(file), "UTF-8"));
+      String title = titleReader.readLine();
+      if (title.startsWith("[[")) {
+        // Generally the first line of the txt is the title. In a few cases the
+        // first line is a "[[tag]]" and the second line is the title.
+        title = titleReader.readLine();
+      }
+      titleReader.close();
+
       String outputFile = AsciiDoctor.mapInFileToOutFile(
           inputFile, inExt, outExt);
       FileReader reader = new FileReader(file);
@@ -89,6 +105,7 @@
       doc.add(new TextField(DOC_FIELD, reader));
       doc.add(new StringField(
             URL_FIELD, prefix + outputFile, Field.Store.YES));
+      doc.add(new TextField(TITLE_FIELD, title, Field.Store.YES));
       iwriter.addDocument(doc);
       reader.close();
     }
diff --git a/plugins/reviewnotes b/plugins/reviewnotes
index 99f869d..c01bc30 160000
--- a/plugins/reviewnotes
+++ b/plugins/reviewnotes
@@ -1 +1 @@
-Subproject commit 99f869d3f65cc0365eaecd75ec6305afd9541f7d
+Subproject commit c01bc30b654ee1666dc2820d219f74e6ecc7e03f