| #!/usr/bin/env python3 | |
| # Copyright 2026 The PDFium Authors | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| """Verifies rust-libclang and rust-toolchain revisions are in sync in DEPS.""" | |
| import re | |
| import sys | |
| def _ExtractRevisions(deps_content, regex): | |
| """Gets the revisions by searching the lines in deps_content using regex.""" | |
| revisions = [] | |
| for line in deps_content.splitlines(): | |
| match = regex.match(line) | |
| if not match: | |
| continue | |
| revisions.append((match.group(1), match.group(2))) | |
| return revisions | |
| def _GetLibclangRevisions(deps_content): | |
| """Gets the rust-libclang revisions from DEPS content.""" | |
| regex = re.compile( | |
| r"^ 'object_name': '(.*)/rust-libclang-(.*)\.tar\.xz',$") | |
| return _ExtractRevisions(deps_content, regex) | |
| def _GetRustToolchainRevisions(deps_content): | |
| """Gets the rust-toolchain revisions from DEPS content.""" | |
| regex = re.compile( | |
| r"^ 'object_name': '(.*)/rust-toolchain-(.*)\.tar\.xz',$") | |
| return _ExtractRevisions(deps_content, regex) | |
| def CheckDeps(deps_content): | |
| """Checks that rust-libclang and rust-toolchain revisions match in DEPS.""" | |
| libclang_revisions = _GetLibclangRevisions(deps_content) | |
| if not libclang_revisions: | |
| return 'Cannot parse rust-libclang revisions' | |
| rust_revisions = _GetRustToolchainRevisions(deps_content) | |
| if not rust_revisions: | |
| return 'Cannot parse rust-toolchain revisions' | |
| if libclang_revisions != rust_revisions: | |
| return ('Mismatch between rust-libclang and rust-toolchain: ' | |
| f'{libclang_revisions} vs. {rust_revisions}') | |
| return None | |
| def main(): | |
| if len(sys.argv) != 2: | |
| print('Wrong number of arguments') | |
| return 0 | |
| deps_path = sys.argv[1] | |
| with open(deps_path, 'r', encoding='utf-8') as f: | |
| deps_content = f.read() | |
| error = CheckDeps(deps_content) | |
| if error: | |
| print(f'{deps_path}: {error}') | |
| return 0 | |
| if __name__ == '__main__': | |
| sys.exit(main()) |