diff --git a/components/partition_table/gen_esp32part.py b/components/partition_table/gen_esp32part.py index 7124559d3..66f5b30b0 100755 --- a/components/partition_table/gen_esp32part.py +++ b/components/partition_table/gen_esp32part.py @@ -169,6 +169,19 @@ class PartitionTable(list): # verify each partition individually for p in self: p.verify() + + # check on duplicate name + names = [ p.name for p in self ] + duplicates = set( n for n in names if names.count(n) > 1 ) + + # print sorted duplicate partitions by name + if len(duplicates) != 0: + print("A list of partitions that have the same name:") + for p in sorted(self, key=lambda x:x.name): + if len(duplicates.intersection([p.name])) != 0: + print("%s" % (p.to_csv())) + raise InputError("Partition names must be unique") + # check for overlaps last = None for p in sorted(self, key=lambda x:x.offset): diff --git a/components/partition_table/test_gen_esp32part_host/gen_esp32part_tests.py b/components/partition_table/test_gen_esp32part_host/gen_esp32part_tests.py index 9f50f2465..7f3c79d16 100755 --- a/components/partition_table/test_gen_esp32part_host/gen_esp32part_tests.py +++ b/components/partition_table/test_gen_esp32part_host/gen_esp32part_tests.py @@ -166,6 +166,15 @@ second, app, ota_0, 0x200000, 1M t = PartitionTable.from_csv(csv) t.verify() + def test_unique_name_fail(self): + csv = """ +first, app, factory, 0x100000, 1M +first, app, ota_0, 0x200000, 1M +""" + with self.assertRaisesRegexp(InputError, "Partition names must be unique"): + t = PartitionTable.from_csv(csv) + t.verify() + class BinaryOutputTests(unittest.TestCase): def test_binary_entry(self): csv = """