Skip to content

HTML report generation fails on too long path #580

Closed
@nedbat

Description

@nedbat

Originally reported by István Bede (Bitbucket: ibede, GitHub: ibede)


Hi!

I'm trying to generate HTML report on my coverage. Unfortunately I have very deep folder structure with some long directory and file names. The HTML generation tries to create an .html filename containing all this path, but on Windows 7 it fails if the file name is longer than 260 (NTFS). It reports an error like:

#!sh

---------- coverage: platform win32, python 2.7.13-final-0 -----------
Internal Error: runTests aborted: [Errno 2] No such file or directory: u'logs/coverage/_jenkins_work_XXXX_nightly_main_build_workspace_YYYYYYYYYYYYYYYYY-master_AAAAAAAAAAAAAAAAAAAAAAA_src_BBBBBBBBBBBBBBBBBBBB_CCCCCCCCCCCCCCCCCCCCCCC_py.html'

I made a small workaround/patch to make it work:
Added directory_depth config value in coverage.cfg:

#!ini

[html]
directory = logs/coverage/
directory_depth = 4

and patched html generation the following way in html.py:

#!python
    def html_file(self, fr, analysis):
        """Generate an HTML file for one source file."""
        relname = fr.relative_filename()
        if self.config.dir_depth > 0: # initialized with -1
            import re
            relname = relname[[m.start() for m in re.finditer('\\\\', relname)][relname.count('\\') - self.config.dir_depth - 1] + 1:]
        rootname = flat_rootname(relname)
        html_filename = rootname + ".html"
        html_path = os.path.join(self.directory, html_filename)

and of course I added dir_depth to CoverageConfig.

As a result, only the needed directory depth is included in the filename. I don't know if other OS or file system is problematic or not.

Note: maybe the annotate module is also affected as it uses the same mechanism for file name generation.

Thanks for the good work!


Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions