[current results] Allow query terms to be prefixes of configuration names
Change-Id: I93fd74151cd510a2083fe179b9bcc8c9d24351a9
Reviewed-on: https://dart-review.googlesource.com/c/dart_ci/+/158861
Reviewed-by: Karl Klose <karlklose@google.com>
diff --git a/current_results/lib/src/slice.dart b/current_results/lib/src/slice.dart
index cca8382..1b6ae30 100644
--- a/current_results/lib/src/slice.dart
+++ b/current_results/lib/src/slice.dart
@@ -94,22 +94,32 @@
final limit = min(100000, query.pageSize == 0 ? 100000 : query.pageSize);
final filterTerms =
query.filter.split(',').map((s) => s.trim()).where((s) => s.isNotEmpty);
- var configurations = filterTerms.where(_stored.containsKey);
- if (configurations.isEmpty) {
- configurations = _stored.keys;
+ final configurationSet = Set<String>();
+ final testPrefixes = <String>[];
+ for (final prefix in filterTerms) {
+ final matchingConfigurations = _stored.keys
+ .where((configuration) => configuration.startsWith(prefix));
+ if (matchingConfigurations.isEmpty) {
+ testPrefixes.add(prefix);
+ } else {
+ configurationSet.addAll(matchingConfigurations);
+ }
}
- final tests = filterTerms.where((t) => !_stored.containsKey(t)).toList();
- if (tests.isEmpty) {
+ final configurations =
+ (configurationSet.isEmpty ? _stored.keys : configurationSet).toList()
+ ..sort();
+
+ if (testPrefixes.isEmpty) {
response.results.addAll(configurations
.expand((configuration) => _stored[configuration])
.map(Result.toApi)
.take(limit));
-
return response;
}
+
for (final configuration in configurations) {
final sorted = _stored[configuration];
- for (final testNamePrefix in tests) {
+ for (final testNamePrefix in testPrefixes) {
if (response.results.length >= limit) break;
final prefixResult =
Result(testNamePrefix, null, null, null, null, null, null);