diff --git a/tools/maint/rebaseline_tests.py b/tools/maint/rebaseline_tests.py index cf57ba2ff0166..0b7a2c5ab566a 100755 --- a/tools/maint/rebaseline_tests.py +++ b/tools/maint/rebaseline_tests.py @@ -56,7 +56,7 @@ def get_installed_emsdk_sha(): return parts[1] -def get_emsdk_revision_log(old_sha, new_sha, limit=30): +def format_emsdk_version_update(old_sha, new_sha, limit=30): assert old_sha != 'none' assert old_sha != new_sha log_url = f'https://chromium.googlesource.com/emscripten-releases/+log/{old_sha}..{new_sha}' @@ -66,26 +66,22 @@ def get_emsdk_revision_log(old_sha, new_sha, limit=30): data = data[4:] j = json.loads(data) entries = j.get('log', []) - lines = [f'emsdk_version: {old_sha} => {new_sha} ({log_url})'] - if entries: - lines.append('') - for entry in entries[:limit]: - short_sha = entry['commit'][:8] - subject = entry['message'].splitlines()[0] - lines.append(f' {short_sha} {subject}') - if len(entries) > limit: - lines.append(' ... (and more, see full log)') + lines = [f'emsdk version updated: {old_sha} => {new_sha}'] lines.append('') - return '\n'.join(lines) - + lines.append('This includes the following revisions:') + lines.append('') + lines.append('```') + for entry in entries[:limit]: + short_sha = entry['commit'][:8] + subject = entry['message'].splitlines()[0] + lines.append(f'- {short_sha} {subject}') + if len(entries) > limit: + lines.append(' ... (and more, see full log)') + lines.append('```') + lines.append("") + lines.append(f"Full log: {log_url}") -def format_emsdk_version_update(): - filename = 'test/emsdk_version.txt' - content = utils.read_file(filename) - old_content = run(['git', 'show', f'HEAD:{filename}']) - old_sha = old_content.strip() if old_content else 'none' - new_sha = content.strip() - return get_emsdk_revision_log(old_sha, new_sha) + return '\n'.join(lines) def process_changed_file(filename): @@ -123,6 +119,8 @@ def main(): if args.clear_cache: run(['./emcc', '--clear-cache']) + current_sha = None + installed_sha = None if not args.skip_tests: if not args.check_only and run(['git', 'status', '-uno', '--porcelain']).strip(): print('tree is not clean') @@ -137,6 +135,7 @@ def main(): if installed_sha == current_sha: print(f'emsdk version is up-to-date ({current_sha})') return 0 + print(f'update emsdk: {current_sha} => {installed_sha}') utils.write_file(emsdk_version_file, installed_sha + '\n') elif installed_sha and installed_sha != current_sha: utils.exit_with_error(f'installed emsdk version ({installed_sha}) does not match test/emsdk_version.txt ({current_sha}). Pass --bump-emsdk to update it.') @@ -145,52 +144,44 @@ def main(): output = run(['git', 'status', '-uno', '--porcelain']) filenames = [] - emsdk_version_updated = False for line in output.splitlines(): filename = line.strip().rsplit(' ', 1)[1] - if filename == 'test/emsdk_version.txt': - emsdk_version_updated = True - elif filename.startswith('test') and os.path.isfile(filename): + if filename.startswith('test') and os.path.isfile(filename) and filename != 'test/emsdk_version.txt': filenames.append(filename) - if not filenames and not emsdk_version_updated: + if not filenames and not args.bump_emsdk: print('test expectations are up-to-date') return 0 if args.check_only: - message = f'''Test expectations are out-of-date - -The following ({len(filenames)}) test expectation files were updated by -running the tests with `--rebaseline`: - -``` -''' - elif emsdk_version_updated: - message = '''Update emsdk version used in tests + message = 'Test expectations are out-of-date\n' + elif args.bump_emsdk: + message = '''Update emsdk version used in testing This is an automatic change generated by tools/maint/rebaseline_tests.py --bump-emsdk. -``` ''' - message += format_emsdk_version_update() + message += format_emsdk_version_update(current_sha, installed_sha) + '\n' else: - message = f'''Automatic rebaseline of codesize expectations. NFC + message = '''Automatic rebaseline of codesize expectations. NFC This is an automatic change generated by tools/maint/rebaseline_tests.py. +''' + if filenames: + message += f''' The following ({len(filenames)}) test expectation files were updated by running the tests with `--rebaseline`: ``` ''' + for file in sorted(filenames): + message += process_changed_file(file) - for file in sorted(filenames): - message += process_changed_file(file) - - if all_deltas: - message += f'\nAverage change: {statistics.mean(all_deltas):+.2f}% ({min(all_deltas):+.2f}% - {max(all_deltas):+.2f}%)\n' + if all_deltas: + message += f'\nAverage change: {statistics.mean(all_deltas):+.2f}% ({min(all_deltas):+.2f}% - {max(all_deltas):+.2f}%)\n' - message += '```\n' + message += '```\n' print(message) if args.check_only: