diff --git a/Documentation/user-search.txt b/Documentation/user-search.txt index 5f0f004b22..561d8088ce 100644 --- a/Documentation/user-search.txt +++ b/Documentation/user-search.txt @@ -44,7 +44,12 @@ Search Operators Operators act as restrictions on the search. As more operators are added to the same query string, they further restrict the -returned results. +returned results. Search can also be performed by typing only a +text with no operator. It will try to match a project name by +substring. + +E.g. Searching for just "gerrit is:starred" will try to match a +project name by "gerrit" as substring. [[age]] age:'AGE':: @@ -85,7 +90,7 @@ Changes where 'SHA1' is one of the patch sets of the change. [[project]] project:'PROJECT':: + -Changes occuring in 'PROJECT'. If 'PROJECT' starts with `^` it +Changes occuring in 'PROJECT'. If 'PROJECT' starts with `^` it matches project names by regular expression. [[branch]] 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 5cd05a8ee2..933033fe83 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 @@ -484,6 +484,28 @@ public class ChangeQueryBuilder extends QueryBuilder { return label(query); } else { + // Try to match a project name by substring query. + final List predicate = + new ArrayList(); + try { + for (final Project p : args.dbProvider.get().projects().all()) { + if (p.getName().toLowerCase().contains(query.toLowerCase())) { + predicate.add(new ProjectPredicate(args.dbProvider, p.getName())); + } + } + + // If two or more projects contains "query" as substring create an + // OrPredicate holding predicates for all these projects, otherwise if + // only one contains that, return only that one predicate by itself. + if (predicate.size() == 1) { + return predicate.get(0); + } else if (predicate.size() > 1) { + return Predicate.or(predicate); + } + } catch (OrmException e) { + throw error("Cannot lookup project.", e); + } + throw error("Unsupported query:" + query); } }