diff --git a/mypy/build.py b/mypy/build.py index c94ca94a3d702..367adb7d5e8b0 100644 --- a/mypy/build.py +++ b/mypy/build.py @@ -1699,6 +1699,7 @@ class State: order = None # type: int # Order in which modules were encountered id = None # type: str # Fully qualified module name path = None # type: Optional[str] # Path to module source + abspath = None # type: Optional[str] # Absolute path to module source xpath = None # type: str # Path or '' source = None # type: Optional[str] # Module source code source_hash = None # type: Optional[str] # Hash calculated based on the source code @@ -1800,6 +1801,8 @@ def __init__(self, if follow_imports == 'silent': self.ignore_all = True self.path = path + if path: + self.abspath = os.path.abspath(path) self.xpath = path or '' if path and source is None and self.manager.fscache.isdir(path): source = '' @@ -2758,7 +2761,7 @@ def load_graph(sources: List[BuildSource], manager: BuildManager, # Note: Running this each time could be slow in the daemon. If it's a problem, we # can do more work to maintain this incrementally. - seen_files = {st.path: st for st in graph.values() if st.path} + seen_files = {st.abspath: st for st in graph.values() if st.path} # Collect dependencies. We go breadth-first. # More nodes might get added to new as we go, but that's fine. @@ -2805,16 +2808,18 @@ def load_graph(sources: List[BuildSource], manager: BuildManager, if dep in st.dependencies_set: st.suppress_dependency(dep) else: - if newst.path in seen_files: - manager.errors.report( - -1, 0, - "Source file found twice under different module names: '{}' and '{}'". - format(seen_files[newst.path].id, newst.id), - blocker=True) - manager.errors.raise_error() - if newst.path: - seen_files[newst.path] = newst + newst_path = os.path.abspath(newst.path) + + if newst_path in seen_files: + manager.errors.report( + -1, 0, + "Source file found twice under different module names: " + "'{}' and '{}'".format(seen_files[newst_path].id, newst.id), + blocker=True) + manager.errors.raise_error() + + seen_files[newst_path] = newst assert newst.id not in graph, newst.id graph[newst.id] = newst