| #!/usr/bin/python3 -B |
| |
| # Copyright 2021 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| """Command line tool to report the statistics of EXPECTED_UPSTREAM file.""" |
| |
| import collections |
| |
| from common_util import ExpectedUpstreamFile |
| from common_util import OJLUNI_JAVA_BASE_PATH |
| |
| |
| def get_major_version(git_ref: str) -> str: |
| index = git_ref.find('/') |
| if index == -1: |
| return git_ref |
| return git_ref[:index] |
| |
| |
| def main() -> None: |
| expected_upstream_file = ExpectedUpstreamFile() |
| expected_entries = expected_upstream_file.read_all_entries() |
| |
| non_test_filter = lambda e: e.dst_path.startswith(OJLUNI_JAVA_BASE_PATH) |
| non_test_entries = list(filter(non_test_filter, expected_entries)) |
| non_test_refs = list(map(lambda e: e.git_ref, non_test_entries)) |
| total = len(non_test_refs) |
| |
| minor_groups = dict(collections.Counter(non_test_refs)) |
| |
| top_tree = {} |
| for git_ref, count in minor_groups.items(): |
| major_version = get_major_version(git_ref) |
| if major_version not in top_tree: |
| top_tree[major_version] = {} |
| top_tree[major_version][git_ref] = count |
| |
| top_tree = {k: top_tree[k] for k in sorted(top_tree)} |
| |
| print('=== Ojluni Version Report ===') |
| for major_version, counts in top_tree.items(): |
| subtotal = sum(counts[key] for key in counts) |
| percentages = '{:.2%}'.format(subtotal / total) |
| print(f'{major_version}:\t{subtotal}\t{percentages}') |
| for minor_version, count in counts.items(): |
| sub_percentages = '{:.2%}'.format(count / subtotal) |
| print(f' {minor_version}:\t{count}\t{sub_percentages}') |
| |
| |
| if __name__ == '__main__': |
| main() |