Python mutation testing.
Provides
Requires
License
BSD-3-Clause
Changelog
* Sun Sep 13 2026 Martin Pluskal <mpluskal@suse.com>
- Update to 3.8.0:
* mutate ternary conditions; mutate methods of decorated classes
* skip lines excluded from coverage; mutation score badges;
Python 3.15 support
* process isolation and fork-safe test runners; fix mutants
missed when tests clear os.environ
* honour "pragma: no mutate" on else/except/finally arms and
match/case headers; prune obsolete test names from stats
- Raise click >= 8.4.2 and setproctitle >= 1.3.7 floors per
upstream; keep libcst >= 1.8.5 (1.9.0 not yet in the tree)
- Deselect
test_excluded_lines_reports_only_the_first_line_of_each_statement:
it pins coverage.py analysis2 reporting statement-start lines
only, but the tree's coverage 7.14.3 reports full excluded
statement lines; the expansion unions, so product behaviour
is unchanged
* Fri Jul 31 2026 Martin Pluskal <mpluskal@suse.com>
- Update to 3.7.0:
* Incremental cache invalidation: mutants are re-tested only in
functions whose source changed, with cross-call dependency
tracking that also invalidates callers of a changed function
* Detect changes to non-Python dependency files via git, with a
curated file-list fallback when git is unavailable, and
invalidate cached results when result-affecting config fields
change
* New config options cache_invalidation_exclude and
use_git_change_detection; uv.lock, poetry.lock, Pipfile.lock
and pdm.lock are now copied by default
* "mutmut browse", "show" and "apply" are much faster and use
far less memory
* Fix the trampoline dropping a generator's return value, so
"yield from" on a mutated generator no longer yields None
* Fix async generators so that aclose()/athrow() are handled by
the mutated function's except/finally blocks
* Fix max_stack_depth when a test changes the working directory
* Fix type_check_command reporting type errors in copied files
that have no mutants
- Add git-core to the test requirements so the new git-based
change-detection tests run instead of being skipped
- Drop the no-op shebang sed from the spec: upstream's
src/mutmut/__main__.py carries no shebang line
* Wed Jul 08 2026 Markéta Machová <mmachova@suse.com>
- Convert to libalternatives on SLE-16-based and newer systems
- Return the sle15_python_module_pythons macro to enable build
on python 3.11 in SLE 15
* Wed Jul 08 2026 Martin Pluskal <mpluskal@suse.com>
- Update to 3.6.0:
* New "# pragma: no mutate block" and "# pragma: no mutate
start/end" comments to skip mutating regions of code
* New config options: do_not_mutate_patterns (regex-based
disabling), only_mutate (select which files get mutated),
use_setproctitle, and (unstable) timeout_multiplier /
timeout_constant
* Rename paths_to_mutate to source_paths; deprecate tests_dir
in favour of pytest_add_cli_args_test_selection
* Also mutate @staticmethod / @classmethod methods; optionally
filter mutants by type annotations via a type_check_command
* Many mutation-correctness and crash fixes (enums, default
args, private-class methods, async functions, positional-only
args, "mutmut browse", and timeout handling)
- Switch the build backend from setuptools to uv_build to match
upstream; relax upstream's strict uv_build version pin so it
builds against the packaged uv-build
- Update dependencies for 3.6.0: replace parso with libcst and
rich with textual, promote coverage and pytest to hard runtime
requirements, and drop the no-longer-used junit-xml and
whatthepatch
- Spec cleanup: drop the sle15_python_module_pythons macro (mutmut
requires Python 3.10+, so the SLE15/Leap 15 Python flavors no
l