chromium/media/ffmpeg/scripts/config_flag_changes.py

# 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.

import re
from robo_lib import shell


def extract_lines_per_file(lines):
    definition_pattern = re.compile(r'^[+-].*[01]$')
    filemap = {}
    current_file = None
    for line in lines:
        if match := definition_pattern.match(line):
            assert current_file is not None
            replaced = line.replace('#define', '').replace('%define', '')
            filemap[current_file].add(replaced)
        if line.startswith('--- a/'):
            current_file = line[6:]
            filemap[current_file] = set()
    return filemap


def get_config_flag_changes(cfg):
    command = [
        'git', 'diff',
        cfg.origin_merge_base(), '--unified=0', '--', 'chromium/config/*'
    ]

    lines = shell.output_or_error(command).split('\n')
    filemapped_deltas = extract_lines_per_file(lines)

    # TODO(liberato) remove this on the next possible roll.
    for file in filemapped_deltas.keys():
        # When the mips configs were deleted, they poisoned the config flag deltas.
        if file.endswith('mips64el/config.h'):
            filemapped_deltas[file] = set()
        if file.endswith('mipsel/config.h'):
            filemapped_deltas[file] = set()

    recombined = set()
    for file, deltas in filemapped_deltas.items():
        recombined.update(deltas)

    recombined = sorted(list(recombined))
    return recombined