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:
---------- 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:
[html] directory = logs/coverage/ directory_depth = 4
and patched html generation the following way in html.py:
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!