4.2 KiB
PR#112: A Moved File with Only Package and Import Changes Is Mechanical
Version: minor
WARNING: This document describes only the change applied in this PR. It may already be outdated once the next PR is merged. Historic PR documentation is not maintained along with new PRs; treat it as a snapshot.
Related Links
- werkregie PR#86: names follow javagil.de.
- werkbaum PR#11: the move that got YELLOW for its size.
Problem
werkregie PR#86 moves the JVM packages of all werk repositories to de.javagil.<repo>.
Such a move renames each file and changes its package line and some import lines.
werkrevisor counts a renamed file as mechanical only if its content stays the same,
so each moved file counts for [size] max_files.
werkbaum PR#11 moved 46 files and got YELLOW only for max_files = 30.
Werkator (272 files), Werkjournal (114) and werkregie (70) follow with the same kind of PR.
Non-Goals
- No change of
[size]; the moved files leave the count because they become mechanical. - No change for a renamed file without content changes; it stays mechanical as before.
Specification
Feature: a moved file with only package and import changes is mechanical
Scenario#112.01: a pure move does not count
… so that a package move across many files needs no human for its size.
- Given a renamed Java or Kotlin file whose diff changes only its
packageandimportlines - When werkrevisor applies its rules
- Then the file is mechanical as "imports, renamed" and does not count for
[size]
Verified by
- test_mechanical: test_rename_with_only_package_and_import_changes
- test_mechanical: test_moved_files_do_not_count_for_the_size_limits
Scenario#112.02: a move with a changed line of logic counts
… so that a move cannot hide a change of the code.
- Given a renamed file whose diff also changes a line that no rule explains under its old or its new name
- When werkrevisor applies its rules
- Then the file is not mechanical and counts for
[size]
Verified by
- test_mechanical: test_rename_with_a_logic_change_is_not_mechanical
- test_mechanical: test_rename_keeps_the_rules_of_the_old_name
Scenario#112.03: a move into another category counts
… so that a test cannot become main code, or a document code, without a review.
- Given a file renamed from one category to another, e.g. from
src/test/tosrc/main/ - When its diff changes only its
packageandimportlines - Then the file is not mechanical
Verified by
Scenario#112.04: an import change without a move counts as before
… so that the change keeps the existing rule for modified files.
- Given a modified file that is not renamed and changes only its
importlines - When werkrevisor applies its rules
- Then the file is mechanical as "imports", as before
Verified by
Solution
werkrevisor/mechanical.py: a renamed file goes through the import and whitespace rules like a modified one; if they explain every changed line, its label is "renamed" plus the rules, e.g. "imports, renamed". A renamed file with content changes keeps its file extension, and a whitespace-significant name, e.g.*.py, counts under its old and its new name.werkrevisor/rules.py: a renamed file with content changes is mechanical only if its old and new path are in the same category.- README
[mechanical]: the rule for a renamed file. - Version 0.43.0.
A mechanical file goes neither to the model nor to Jev, and this PR keeps that for moved files.
Its diff holds only package and import lines, so Jev would judge the same lines for each of hundreds of files,
with nothing to find in them.
The hard rules still apply to both names of a renamed file, e.g. a move into or out of a risky path gives YELLOW.
Open Questions
None.