Index: tools/gardening/bin/find_shard.dart |
diff --git a/tools/gardening/bin/find_shard.dart b/tools/gardening/bin/find_shard.dart |
new file mode 100755 |
index 0000000000000000000000000000000000000000..90a223e34d27127536dfa64b56ebf801c4918de3 |
--- /dev/null |
+++ b/tools/gardening/bin/find_shard.dart |
@@ -0,0 +1,98 @@ |
+#!/usr/bin/env dart |
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+// Translates a buildbot shard name to the corresponding column group name |
+// on the buildbot site, such that it's easier to find the right column. |
+// |
+// Example: `bin/find_shard.dart precomp-linux-debug-x64-be` |
+// prints `vm-precomp(5): precomp-linux-debug-x64-be`. |
+ |
+import 'dart:io'; |
+import 'package:args/args.dart'; |
+part 'package:gardening/src/shard_data.dart'; |
+ |
+ArgParser createArgParser() { |
+ ArgParser argParser = new ArgParser(allowTrailingOptions: true); |
+ argParser.addFlag('help', help: "Help"); |
+ return argParser; |
+} |
+ |
+bool INCLUDE_DEV = |
+ const bool.fromEnvironment('INCLUDE_DEV', defaultValue: false); |
+bool INCLUDE_STABLE = |
+ const bool.fromEnvironment('INCLUDE_STABLE', defaultValue: false); |
+bool INCLUDE_INTEGRATION = |
+ const bool.fromEnvironment('INCLUDE_INTEGRATION', defaultValue: false); |
+ |
+void processArgResults(ArgResults argResults) { |
+ if (argResults['include-all']) { |
+ INCLUDE_DEV = INCLUDE_STABLE = INCLUDE_INTEGRATION = true; |
+ } else { |
+ if (argResults['include-dev']) INCLUDE_DEV = true; |
+ if (argResults['include-stable']) INCLUDE_STABLE = true; |
+ if (argResults['include-integration']) INCLUDE_INTEGRATION = true; |
+ } |
+} |
+ |
+void help(ArgParser argParser) { |
+ print('Given a shard name or a substring thereof, search all buildbot'); |
+ print('shard names and print matching ones, along with their group.'); |
+ print('E.g., searching "drt" will show that there are several matching'); |
+ print('shards, all in the group "chrome", which may be helpful when'); |
+ print('navigating the buildbot web page based on blame email etc.\n'); |
+ print('Usage: find_shard [options] <shard>'); |
+ print('where options are:'); |
+ print(argParser.usage); |
+} |
+ |
+bool shard_enabled(String shard) { |
+ if (shard.endsWith('-dev')) return INCLUDE_DEV; |
+ if (shard.endsWith('-stable')) return INCLUDE_STABLE; |
+ if (shard.endsWith('-integration')) return INCLUDE_INTEGRATION; |
+ return true; |
+} |
+ |
+main(List<String> args) async { |
+ ArgParser argParser = createArgParser(); |
+ argParser.addFlag("include-dev", |
+ abbr: "d", |
+ defaultsTo: false, |
+ negatable: false, |
+ help: "Include shards named *-dev"); |
+ argParser.addFlag("include-stable", |
+ abbr: "s", |
+ defaultsTo: false, |
+ negatable: false, |
+ help: "Include shards named *-stable"); |
+ argParser.addFlag("include-integration", |
+ abbr: "i", |
+ defaultsTo: false, |
+ negatable: false, |
+ help: "Include shards named *-integration"); |
+ argParser.addFlag("include-all", |
+ abbr: "a", |
+ defaultsTo: false, |
+ negatable: false, |
+ help: "Include all shards"); |
+ ArgResults argResults = argParser.parse(args); |
+ processArgResults(argResults); |
+ |
+ if (argResults.rest.length != 1 || argResults['help']) { |
+ help(argParser); |
+ if (argResults['help']) return; |
+ exit(1); |
+ } |
+ |
+ String arg = argResults.rest.first; |
+ for (String group in shardGroups.keys) { |
+ List<String> shardGroup = shardGroups[group]; |
+ for (int i = 0; i < shardGroup.length; i++) { |
+ String shard = shardGroup[i]; |
+ if (shard_enabled(shard) && shard.contains(arg)) { |
+ print("$group(${i+1}): $shard"); |
+ } |
+ } |
+ } |
+} |