| #!/usr/bin/env python3 |
| # Copyright 2024 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| from collections import defaultdict |
| |
| import argparse |
| import csv |
| import os |
| import pathlib |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser(description=( |
| 'Lists filtered tests in .filter files in testing/buildbot/filters,' |
| ' outputs a .csv')) |
| parser.add_argument('-o', |
| '--output-file', |
| type=pathlib.Path, |
| required=True, |
| help='output CSV file path') |
| args = parser.parse_args() |
| |
| filter_dir = pathlib.Path('testing/buildbot/filters') |
| filter_file_paths = [ |
| f for f in filter_dir.iterdir() |
| if f.is_file() and f.name.endswith('_apk.filter') |
| ] |
| |
| filtered_tests_by_builder = {} |
| for filter_file_path in filter_file_paths: |
| filtered_tests = [] |
| with open(filter_file_path, 'r') as input_filter_file: |
| for line in input_filter_file.readlines(): |
| stripped_line = line.strip() |
| if stripped_line.startswith('-'): |
| filtered_tests.append(stripped_line[1:]) |
| builder = filter_file_path.name.split('.')[1] |
| filtered_tests_by_builder[builder] = filtered_tests |
| |
| all_filtered_tests_to_builders = defaultdict(list) |
| for filter_file_name, filtered_tests in filtered_tests_by_builder.items(): |
| for filtered_test in filtered_tests: |
| all_filtered_tests_to_builders[filtered_test].append( |
| filter_file_name) |
| |
| with open(args.output_file, 'w') as csv_output_file: |
| csv_writer = csv.writer(csv_output_file) |
| |
| for filtered_test in sorted(all_filtered_tests_to_builders): |
| builders = all_filtered_tests_to_builders[filtered_test] |
| csv_writer.writerow( |
| ['.filter', filtered_test, ', '.join(builders)]) |
| |
| |
| if __name__ == '__main__': |
| main() |