| # 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. |
| |
| """Extracts and reports changes in FFmpeg configuration flags. |
| |
| This module parses the git diff of configuration files to identify changes in |
| defined flags (e.g., #define CONFIG_FOO 1/0) between the current branch and |
| the upstream baseline. |
| """ |
| |
| 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 |