#!/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: `dart bin/shard2group.dart precomp-linux-debug-x64-be`
// prints `vm-precomp(5): precomp-linux-debug-x64-be`.

library gardening.shard2group;
import 'dart:io';
part 'package:gardening/src/shard_data.dart';

main(List<String> args) async {
  if (args.length == 0) {
    print('Usage: dart shard2group.dart <shard-name1> [<shard-name2> ...]');
    print('Run bin/create_shard_groups.dart to refresh shard data');
    exit(1);
  }

  for (String arg in args) {
    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.contains(arg)) {
          print("$group(${i+1}): $shard");
        }
      }
    }
  }
}
