Skip to content

Diff-quality fails when source files have been deleted #532

@eacherkan-via

Description

@eacherkan-via

Issue description

When git diff output includes deleted files, diff-quality invokes the quality tool without adding the source file path to the command line. Tools that require a list of input files (e.g. pycodestyle) will fail when invoked without it:

$ diff-quality --violations pycodestyle
diff_cover.command_runner.CommandError: Usage: pycodestyle [options] input ...

pycodestyle: error: input not specified

(Tools that allow to be invoked without a list of inputs won't fail, but likely won't produce the expected output either.)

Traceback

$ diff-quality --violations pycodestyle
Traceback (most recent call last):
  File "[project-folder]/.venv/lib/python3.12/site-packages/diff_cover/report_generator.py", line 199, in _diff_violations
    violations = self._violations.violations_batch(src_paths_changed)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "[project-folder]/.venv/lib/python3.12/site-packages/diff_cover/violationsreporters/base.py", line 48, in violations_batch
    raise NotImplementedError
NotImplementedError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "[project-folder]/.venv/bin/diff-quality", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "[project-folder]/.venv/lib/python3.12/site-packages/diff_cover/diff_quality_tool.py", line 349, in main
    percent_passing = generate_quality_report(
                      ^^^^^^^^^^^^^^^^^^^^^^^^
  File "[project-folder]/.venv/lib/python3.12/site-packages/diff_cover/diff_quality_tool.py", line 275, in generate_quality_report
    reporter.generate_report(output_file)
  File "[project-folder]/.venv/lib/python3.12/site-packages/diff_cover/report_generator.py", line 302, in generate_report
    report = template.render(self._context())
                             ^^^^^^^^^^^^^^^
  File "[project-folder]/.venv/lib/python3.12/site-packages/diff_cover/report_generator.py", line 351, in _context
    context = super().report_dict()
              ^^^^^^^^^^^^^^^^^^^^^
  File "[project-folder]/.venv/lib/python3.12/site-packages/diff_cover/report_generator.py", line 220, in report_dict
    src_stats = {src: self._src_path_stats(src) for src in self.src_paths()}
                                                           ^^^^^^^^^^^^^^^^
  File "[project-folder]/.venv/lib/python3.12/site-packages/diff_cover/report_generator.py", line 86, in src_paths
    for src, summary in self._diff_violations().items()
                        ^^^^^^^^^^^^^^^^^^^^^^^
  File "[project-folder]/.venv/lib/python3.12/site-packages/diff_cover/report_generator.py", line 211, in _diff_violations
    self._violations.violations(src_path),
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "[project-folder]/.venv/lib/python3.12/site-packages/diff_cover/violationsreporters/base.py", line 171, in violations
    stdout, stderr = execute(command, self.driver.exit_codes)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "[project-folder]/.venv/lib/python3.12/site-packages/diff_cover/command_runner.py", line 36, in execute
    raise CommandError(stderr)
diff_cover.command_runner.CommandError: Usage: pycodestyle [options] input ...

pycodestyle: error: input not specified

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions