Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Side by Side Diff: tools/gardening/bin/current_summary.dart

Issue 2993913002: Add filtering to 'summary' (Closed)
Patch Set: Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | tools/gardening/bin/summary.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /// Collects the test results for all build bots in [buildGroups] for tests 5 /// Collects the test results for all build bots in [buildGroups] for tests
6 /// that mention one of the test names given as argument. 6 /// that mention one of the test names given as argument.
7 /// 7 ///
8 /// The results are currently pulled from the second to last build since the 8 /// The results are currently pulled from the second to last build since the
9 /// last build might not have completed yet. 9 /// last build might not have completed yet.
10 10
11 import 'dart:math' hide log; 11 import 'dart:math' hide log;
12 import 'dart:io'; 12 import 'dart:io';
13 13
14 import 'package:args/args.dart'; 14 import 'package:args/args.dart';
15 import 'package:gardening/src/bot.dart'; 15 import 'package:gardening/src/bot.dart';
16 import 'package:gardening/src/buildbot_data.dart'; 16 import 'package:gardening/src/buildbot_data.dart';
17 import 'package:gardening/src/buildbot_structures.dart'; 17 import 'package:gardening/src/buildbot_structures.dart';
18 import 'package:gardening/src/util.dart'; 18 import 'package:gardening/src/util.dart';
19 19
20 void help(ArgParser argParser) { 20 void help(ArgParser argParser) {
21 print('Displays the current status of specific tests on the buildbot'); 21 print('Displays the current status of specific tests on the buildbot');
22 print('Only prints output for failing tests.');
23 print('The test-names may be fully qualified (such as in '); 22 print('The test-names may be fully qualified (such as in ');
24 print('"pkg/front_end/test/token_test") or just be a substring of the fully'); 23 print('"pkg/front_end/test/token_test") or just be a substring of the fully');
25 print(' qualified name.'); 24 print(' qualified name.');
26 print('Usage: current_summary [options] <test-name1> [<test-name2> ...]'); 25 print('Usage: current_summary [options] <test-name1> [<test-name2> ...]');
27 print('where options are:'); 26 print('where options are:');
28 print(argParser.usage); 27 print(argParser.usage);
29 } 28 }
30 29
31 /// Checks that [haystack] contains substring [needle], case insensitive.
32 /// Throws an exception if either parameter is `null`.
33 bool containsIgnoreCase(String haystack, String needle) {
34 if (haystack == null) {
35 throw "Unexpected null as the first paramter value of containsIgnoreCase";
36 }
37 if (needle == null) {
38 throw "Unexpected null as the second parameter value of containsIgnoreCase";
39 }
40 return haystack.toLowerCase().contains(needle.toLowerCase());
41 }
42
43 main(List<String> args) async { 30 main(List<String> args) async {
44 ArgParser argParser = createArgParser(); 31 ArgParser argParser = createArgParser();
45 argParser.addOption('group', 32 argParser.addOption('group',
46 help: "Restricts the build groups\n" 33 help: "Restricts the build groups\n"
47 "to be searched for the results of the given test\n" 34 "to be searched for the results of the given test\n"
48 "to those containing the given substring, case insensitive."); 35 "to those containing the given substring, case insensitive.");
49 ArgResults argResults = argParser.parse(args); 36 ArgResults argResults = argParser.parse(args);
50 processArgResults(argResults); 37 processArgResults(argResults);
51 38
52 Bot bot = new Bot(logdog: argResults['logdog']); 39 Bot bot = new Bot(logdog: argResults['logdog']);
(...skipping 14 matching lines...) Expand all
67 for (BuildGroup group in buildGroups) { 54 for (BuildGroup group in buildGroups) {
68 if (argResults['group'] != null && 55 if (argResults['group'] != null &&
69 !containsIgnoreCase(group.groupName, argResults['group'])) { 56 !containsIgnoreCase(group.groupName, argResults['group'])) {
70 log('Skipping group $group'); 57 log('Skipping group $group');
71 continue; 58 continue;
72 } 59 }
73 // TODO(johnniwinther): Support reading a partially completed shard from 60 // TODO(johnniwinther): Support reading a partially completed shard from
74 // http, i.e. always use build number `-1`. 61 // http, i.e. always use build number `-1`.
75 List<BuildUri> uriList = group.createUris(bot.mostRecentBuildNumber); 62 List<BuildUri> uriList = group.createUris(bot.mostRecentBuildNumber);
76 if (uriList.isEmpty) continue; 63 if (uriList.isEmpty) continue;
77 print('Fetching ${uriList.first} + ${uriList.length - 1} more ...'); 64 print('Fetching "${uriList.first}" + ${uriList.length - 1} more ...');
78 List<BuildResult> results = await bot.readResults(uriList); 65 List<BuildResult> results = await bot.readResults(uriList);
79 bool testsFoundInGroup = false; 66 bool testsFoundInGroup = false;
80 for (BuildResult buildResult in results) { 67 for (BuildResult buildResult in results) {
81 if (buildResult == null) continue; 68 if (buildResult == null) continue;
82 var buildUri = buildResult.buildUri; 69 var buildUri = buildResult.buildUri;
83 for (TestStatus testStatus in buildResult.results) { 70 for (TestStatus testStatus in buildResult.results) {
84 String testName = testStatus.config.testName; 71 String testName = testStatus.config.testName;
85 for (String arg in argResults.rest) { 72 for (String arg in argResults.rest) {
86 if (testName.contains(arg) || arg.contains(testName)) { 73 if (testName.contains(arg) || arg.contains(testName)) {
87 testsFoundInGroup = true; 74 testsFoundInGroup = true;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 if (argResults.rest.length == 1) { 112 if (argResults.rest.length == 1) {
126 print("Test pattern '${argResults.rest.single}' not found " 113 print("Test pattern '${argResults.rest.single}' not found "
127 "in any build bot groups."); 114 "in any build bot groups.");
128 } else { 115 } else {
129 print("Test patterns '${argResults.rest.join("', '")}' not found " 116 print("Test patterns '${argResults.rest.join("', '")}' not found "
130 "in any build bot groups."); 117 "in any build bot groups.");
131 } 118 }
132 } 119 }
133 bot.close(); 120 bot.close();
134 } 121 }
OLDNEW
« no previous file with comments | « no previous file | tools/gardening/bin/summary.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698