Pārlūkot izejas kodu

partition_table: Check - partition names must be unique

Konstantin Kondrashov 7 gadi atpakaļ
vecāks
revīzija
2a87f00942

+ 13 - 0
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):

+ 9 - 0
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 = """