Open
Description
prevent_win32_max_path_length_error
silently overwrites files that it shouldn't. This leads to mysterious compilation bugs.
# Bare module. Module not from library dependency
if '@s' not in item.name:
mod_name = item.name.replace('@m', '')
# Module from a library dependency. Find the package the module
# belongs to (if any)
else:
segments = item.name.replace('@m', '').split('@s')
for segment in reversed(segments):
if is_semver(segment):
index = segments.index(segment)
mod_name = '@'.join(segments[index:])
break
new_name = ic(f'NIMPORTER@{mod_name}')
item.replace(item.with_name(new_name))
If the for-loop through the segments doesn't find any semver segment, mod_name
is not modified and the same mod_name
as the last item
is used, leading to the file being silently overwritten.
I would suggested multiple fixes:
- before the
replace
, addassert not item.with_name(new_name).exists()
to prevent future occurrences of this bug. - Add an
else
branch to the for loop that does the same thing as for "bare" modules, i.e. just remove the@m
. This is necessary for local imports which wont include a semver. - Update the
is_semver
function to also detect if a commit hash is added to the semver in the formatname-major.minor.patch-hash
Metadata
Metadata
Assignees
Labels
No labels