From 7dfa0d28668c27bf41f2b269d220444d001655a4 Mon Sep 17 00:00:00 2001 From: "monica.dionisio" Date: Fri, 27 Aug 2010 11:46:33 -0300 Subject: [PATCH] Performs a project name substring search. Search for changes whose project name contains query text as substring using no operator for that. E.g. Searching for just "gerrit is:open" will try to match a project name by "gerrit" as substring and return all open changes for this (or these) project. --- Documentation/user-search.txt | 9 ++++++-- .../query/change/ChangeQueryBuilder.java | 22 +++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/Documentation/user-search.txt b/Documentation/user-search.txt index 5b2f81e632..9e43a7cec5 100644 --- a/Documentation/user-search.txt +++ b/Documentation/user-search.txt @@ -46,7 +46,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':: @@ -87,7 +92,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); } }