Merge "ChangeQueryBuilder: Fix root directory case for Elasticsearch" into stable-3.0
diff --git a/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java b/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java
index 0227153..c6a65ec 100644
--- a/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java
+++ b/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java
@@ -775,11 +775,20 @@
         return new RegexDirectoryPredicate(directory);
       }
 
-      return new DirectoryPredicate(directory);
+      DirectoryPredicate rootPredicate = new DirectoryPredicate(directory);
+      if (isRootAndRecursive(directory)) {
+        RegexDirectoryPredicate recursivePredicate = new RegexDirectoryPredicate("^.*");
+        return Predicate.or(rootPredicate, recursivePredicate);
+      }
+      return rootPredicate;
     }
     throw new QueryParseException("'directory' operator is not supported by change index version");
   }
 
+  private static boolean isRootAndRecursive(String directory) {
+    return directory.isEmpty() || directory.equals("/");
+  }
+
   @Operator
   public Predicate<ChangeData> label(String name)
       throws QueryParseException, IOException, ConfigInvalidException {