From 4f3cea99394aa1f6513853e482eac1a18c241bad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Sowa?= Date: Mon, 29 Jul 2024 12:12:31 +0200 Subject: [PATCH] Fix ament_black for new get_sources API (#13) * Fix ament_black for new get_sources API * Fix import order * Add backward compatibility with older black versions * style * Move global variables inside method to fix flake8 * Import only for newer versions * Last tweak --------- Co-authored-by: Ignacio Vizzo --- ament_black/ament_black/main.py | 46 +++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/ament_black/ament_black/main.py b/ament_black/ament_black/main.py index af913c5..e210991 100755 --- a/ament_black/ament_black/main.py +++ b/ament_black/ament_black/main.py @@ -17,6 +17,7 @@ import argparse import contextlib +from importlib import metadata import os import sys import tempfile @@ -32,6 +33,7 @@ from black.const import DEFAULT_INCLUDES from black.report import Report import click +from packaging.version import Version from unidiff import PatchSet @@ -78,18 +80,37 @@ def main(argv=sys.argv[1:]): return 1 # TODO(Nacho): Inject the config file results into the ctx (use read_pyproject_toml) - sources = get_sources( - ctx=click.Context(black), - src=tuple(args.paths), - quiet=True, - verbose=False, - include=re_compile_maybe_verbose(DEFAULT_INCLUDES), - exclude=re_compile_maybe_verbose(DEFAULT_EXCLUDES), - extend_exclude=None, - force_exclude=None, - report=Report(), - stdin_filename='', - ) + BLACK_VERSION = Version(metadata.version('black')) + if BLACK_VERSION < Version('23.9.0'): + sources = get_sources( + ctx=click.Context(black), + src=tuple(args.paths), + quiet=True, + verbose=False, + include=re_compile_maybe_verbose(DEFAULT_INCLUDES), + exclude=re_compile_maybe_verbose(DEFAULT_EXCLUDES), + extend_exclude=None, + force_exclude=None, + report=Report(), + stdin_filename='', + ) + else: + # Hack to support newer versions of black in ROS Jazzy + # https://github.com/botsandus/ament_black/issues/12 + from black import find_project_root + + sources = get_sources( + root=find_project_root(tuple(args.paths))[0], + src=tuple(args.paths), + quiet=True, + verbose=False, + include=re_compile_maybe_verbose(DEFAULT_INCLUDES), + exclude=re_compile_maybe_verbose(DEFAULT_EXCLUDES), + extend_exclude=None, + force_exclude=None, + report=Report(), + stdin_filename='', + ) checked_files = [str(path) for path in sources] if args.xunit_file: @@ -238,7 +259,6 @@ def get_xunit_content(report, testname, elapsed, checked_files): """ % data ) - xml += '\n' return xml