diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2021-07-15 09:36:35 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2021-07-15 09:36:35 -0400 |
commit | 4d05ddeeded7f3f594c0614630f467e1bf3fa629 (patch) | |
tree | 593c06219447a5643a2326f698b55a242ba5bc78 /coverage/files.py | |
parent | 0ff5a1c8a31f701321c838eea3beea553882b269 (diff) | |
download | python-coveragepy-git-4d05ddeeded7f3f594c0614630f467e1bf3fa629.tar.gz |
fix: generate flat file names differently
Fixes a few unusual issues with reports:
- #580: HTML report generation fails on too long path
- #584: File collisions in coverage report html
- #1167: Remove leading underscore in coverage html
Diffstat (limited to 'coverage/files.py')
-rw-r--r-- | coverage/files.py | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/coverage/files.py b/coverage/files.py index 8de2ec67..252e42ec 100644 --- a/coverage/files.py +++ b/coverage/files.py @@ -77,7 +77,7 @@ def canonical_filename(filename): return CANONICAL_FILENAME_CACHE[filename] -MAX_FLAT = 200 +MAX_FLAT = 100 @contract(filename='unicode', returns='unicode') def flat_rootname(filename): @@ -87,15 +87,16 @@ def flat_rootname(filename): the same directory, but need to differentiate same-named files from different directories. - For example, the file a/b/c.py will return 'a_b_c_py' + For example, the file a/b/c.py will return 'd_86bbcbe134d28fd2_c_py' """ - name = ntpath.splitdrive(filename)[1] - name = re.sub(r"[\\/.:]", "_", name) - if len(name) > MAX_FLAT: - h = hashlib.sha1(name.encode('UTF-8')).hexdigest() - name = name[-(MAX_FLAT-len(h)-1):] + '_' + h - return name + dirname, basename = ntpath.split(filename) + if dirname: + fp = hashlib.new("sha3_256", dirname.encode("UTF-8")).hexdigest()[:16] + prefix = f"d_{fp}_" + else: + prefix = "" + return prefix + basename.replace(".", "_") if env.WINDOWS: |