From 1380ef405ed4ea0b6d246fd6817e75958bc42189 Mon Sep 17 00:00:00 2001 From: whitequark Date: Fri, 15 Nov 2019 23:40:44 +0000 Subject: [PATCH] build.plat: in Platform.add_file(), allow adding exact duplicates. --- nmigen/build/plat.py | 10 ++++++---- nmigen/test/test_build_plat.py | 4 ++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/nmigen/build/plat.py b/nmigen/build/plat.py index 00c147f..174cda7 100644 --- a/nmigen/build/plat.py +++ b/nmigen/build/plat.py @@ -50,15 +50,17 @@ class Platform(ResourceManager, metaclass=ABCMeta): if not isinstance(filename, str): raise TypeError("File name must be a string, not {!r}" .format(filename)) - if filename in self.extra_files: - raise ValueError("File {!r} already exists" - .format(filename)) if hasattr(content, "read"): content = content.read() elif not isinstance(content, (str, bytes)): raise TypeError("File contents must be str, bytes, or a file-like object, not {!r}" .format(content)) - self.extra_files[filename] = content + if filename in self.extra_files: + if self.extra_files[filename] != content: + raise ValueError("File {!r} already exists" + .format(filename)) + else: + self.extra_files[filename] = content @property def _toolchain_env_var(self): diff --git a/nmigen/test/test_build_plat.py b/nmigen/test/test_build_plat.py index a974a81..2b2ec62 100644 --- a/nmigen/test/test_build_plat.py +++ b/nmigen/test/test_build_plat.py @@ -25,6 +25,10 @@ class PlatformTestCase(FHDLTestCase): self.platform.add_file("x.txt", b"foo") self.assertEqual(self.platform.extra_files["x.txt"], b"foo") + def test_add_file_exact_duplicate(self): + self.platform.add_file("x.txt", b"foo") + self.platform.add_file("x.txt", b"foo") + def test_add_file_io(self): with open(__file__) as f: self.platform.add_file("x.txt", f) -- 2.30.2