Skip to content

Commit 6ea1b84

Browse files
committed
WIP: --changed
1 parent 82be52c commit 6ea1b84

File tree

2 files changed

+35
-10
lines changed

2 files changed

+35
-10
lines changed

vunit/ui/__init__.py

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,10 @@ def __init__(
173173
self._builtins = Builtins(self, self._vhdl_standard, simulator_class)
174174

175175
self._dependency_graph = None
176-
self._include_in_test_pattern: Optional[List[Union[str, Path]]] = []
177-
self._exclude_from_test_pattern: Optional[List[Union[str, Path]]] = []
176+
self._include_in_test_pattern: Optional[List[Union[str, Path]]] = None
177+
self._exclude_from_test_pattern: Optional[List[Union[str, Path]]] = None
178+
self._latest_dependency_updates = None
179+
self._test_history = None
178180

179181
def _create_database(self):
180182
"""
@@ -750,8 +752,8 @@ def _main(self, post_run):
750752
"""
751753
Base vunit main function without performing exit
752754
"""
753-
if self._include_in_test_pattern or self._exclude_from_test_pattern:
754-
self._update_test_filter(self._include_in_test_pattern, self._exclude_from_test_pattern)
755+
if self._include_in_test_pattern or self._exclude_from_test_pattern or self._args.changed:
756+
self._update_test_filter(self._include_in_test_pattern, self._exclude_from_test_pattern, self._args.changed)
755757

756758
if self._args.export_json is not None:
757759
return self._main_export_json(self._args.export_json)
@@ -768,7 +770,7 @@ def _main(self, post_run):
768770
all_ok = self._main_run(post_run)
769771
return all_ok
770772

771-
def _update_test_filter(self, include_dependencies=None, exclude_dependencies=None):
773+
def _update_test_filter(self, include_dependencies=None, exclude_dependencies=None, only_tests_depending_on_changes=False):
772774
"""
773775
Update test filter to reflect included and excluded testbenches
774776
"""
@@ -802,15 +804,31 @@ def get_dependent_files(dependencies):
802804
return dependent_files
803805

804806
dependent_files = get_dependent_files(include_dependencies) - get_dependent_files(exclude_dependencies)
805-
806-
# Extract testbenches from dependent files and create corresponding test patterns:
807-
# lib_name.tb_name*
808-
test_patterns = []
807+
808+
# Extract testbenches from dependent files
809+
dependent_testbench_files = {}
809810
for dependent_file in dependent_files:
810811
library_name = dependent_file.library.name
811812
for testbench in self._test_bench_list.get_test_benches_in_library(library_name):
812813
if testbench.design_unit.source_file == dependent_file:
813-
test_patterns.append(f"{library_name}.{testbench.name}*")
814+
dependent_testbench_files[dependent_file] = testbench.name
815+
816+
# Remove testbenches not depending on changes if --change options has been set
817+
# if only_tests_depending_on_changes:
818+
# if self._latest_dependency_updates is None:
819+
# self._latest_dependency_updates = self._get_latest_dependency_updates()
820+
821+
# if self._test_history is None:
822+
# self._test_history = self._get_test_history(simulator_if=None)
823+
824+
# for dependent_testbench_file in dependent_testbench_files:
825+
# latest_dependency_update = self._latest_dependency_updates[str(dependent_testbench_file.original_name)]
826+
827+
# Create test patterns for remaining testbenches: lib_name.tb_name*
828+
test_patterns = []
829+
for dependent_file, testbench_name in dependent_testbench_files.items():
830+
library_name = dependent_file.library.name
831+
test_patterns.append(f"{library_name}.{testbench_name}*")
814832

815833
# Update test filter to match test patterns
816834
if isinstance(self._args.test_patterns, list):

vunit/vunit_cli.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,13 @@ def _create_argument_parser(description=None, for_documentation=False):
166166
help="Output path for compilation and simulation artifacts",
167167
)
168168

169+
parser.add_argument(
170+
"--changed",
171+
action="store_true",
172+
default=False,
173+
help="Include only tests that depend on file changes since the last recorded test run",
174+
)
175+
169176
parser.add_argument(
170177
"--test-prio",
171178
choices=["opt", "ordered"],

0 commit comments

Comments
 (0)