1+ import os
2+ import re
13import tempfile
24
5+ from packaging .version import Version
6+
37from .fs_test import FSTestCase , FSNoDevTestCase , mounted
48
59import overrides_hack
812from gi .repository import BlockDev , GLib
913
1014
15+ def _get_exfatprogs_version ():
16+ _ret , out , _err = utils .run_command ("mkfs.exfat --version" )
17+ # exfatprogs version : 1.4.1 (2026-05-28)
18+ m = re .search (r"exfatprogs version : ([\d\.]+)" , out )
19+ if not m or len (m .groups ()) != 1 :
20+ raise RuntimeError ("Failed to determine exfatprogs version from: %s" % out )
21+ return Version (m .groups ()[0 ])
22+
23+
24+ EXFATPROGS_VERSION = _get_exfatprogs_version ()
25+
26+
1127class ExfatNoDevTestCase (FSNoDevTestCase ):
1228 def setUp (self ):
1329 super (ExfatNoDevTestCase , self ).setUp ()
@@ -25,6 +41,11 @@ def setUp(self):
2541
2642 self .mount_dir = tempfile .mkdtemp (prefix = "libblockdev." , suffix = "exfat_test" )
2743
44+ if EXFATPROGS_VERSION < Version ("1.4.0" ):
45+ self ._mkfs_options = None
46+ else :
47+ self ._mkfs_options = [BlockDev .ExtraArg .new ("-P" , "none" )]
48+
2849
2950class ExfatTestAvailability (ExfatNoDevTestCase ):
3051
@@ -80,15 +101,15 @@ def test_exfat_features(self):
80101 self .assertFalse (features .mkfs & BlockDev .FSMkfsOptionsFlags .UUID )
81102 self .assertFalse (features .mkfs & BlockDev .FSMkfsOptionsFlags .DRY_RUN )
82103 self .assertFalse (features .mkfs & BlockDev .FSMkfsOptionsFlags .NODISCARD )
83- self .assertFalse (features .mkfs & BlockDev .FSMkfsOptionsFlags .NOPT )
104+ self .assertTrue (features .mkfs & BlockDev .FSMkfsOptionsFlags .NOPT )
84105
85106 self .assertTrue (features .fsck & BlockDev .FSFsckFlags .CHECK )
86107 self .assertTrue (features .fsck & BlockDev .FSFsckFlags .REPAIR )
87108
88109 self .assertTrue (features .configure & BlockDev .FSConfigureFlags .LABEL )
89110 self .assertTrue (features .configure & BlockDev .FSConfigureFlags .UUID )
90111
91- self .assertEqual (features .features , 0 )
112+ self .assertEqual (features .features , BlockDev . FSFeatureFlags . PARTITION_TABLE )
92113
93114 self .assertEqual (features .partition_id , "0x07" )
94115 self .assertEqual (features .partition_type , "ebd0a0a2-b9e5-4433-87c0-68b6b72699c7" )
@@ -132,7 +153,7 @@ class ExfatTestCheck(ExfatTestCase):
132153 def test_exfat_check (self ):
133154 """Verify that it is possible to check an exfat file system"""
134155
135- succ = BlockDev .fs_exfat_mkfs (self .loop_devs [0 ])
156+ succ = BlockDev .fs_exfat_mkfs (self .loop_devs [0 ], self . _mkfs_options )
136157 self .assertTrue (succ )
137158
138159 succ = BlockDev .fs_exfat_check (self .loop_devs [0 ])
@@ -143,7 +164,7 @@ class ExfatTestRepair(ExfatTestCase):
143164 def test_exfat_repair (self ):
144165 """Verify that it is possible to repair an exfat file system"""
145166
146- succ = BlockDev .fs_exfat_mkfs (self .loop_devs [0 ])
167+ succ = BlockDev .fs_exfat_mkfs (self .loop_devs [0 ], self . _mkfs_options )
147168 self .assertTrue (succ )
148169
149170 succ = BlockDev .fs_exfat_repair (self .loop_devs [0 ])
@@ -154,7 +175,7 @@ class ExfatGetInfo(ExfatTestCase):
154175 def test_exfat_get_info (self ):
155176 """Verify that it is possible to get info about an exfat file system"""
156177
157- succ = BlockDev .fs_exfat_mkfs (self .loop_devs [0 ], None )
178+ succ = BlockDev .fs_exfat_mkfs (self .loop_devs [0 ], self . _mkfs_options )
158179 self .assertTrue (succ )
159180
160181 fi = BlockDev .fs_exfat_get_info (self .loop_devs [0 ])
@@ -171,7 +192,7 @@ class ExfatSetLabel(ExfatTestCase):
171192 def test_exfat_set_label (self ):
172193 """Verify that it is possible to set label of an exfat file system"""
173194
174- succ = BlockDev .fs_exfat_mkfs (self .loop_devs [0 ], None )
195+ succ = BlockDev .fs_exfat_mkfs (self .loop_devs [0 ], self . _mkfs_options )
175196 self .assertTrue (succ )
176197
177198 fi = BlockDev .fs_exfat_get_info (self .loop_devs [0 ])
@@ -207,7 +228,7 @@ class ExfatSetUUID(ExfatTestCase):
207228 def test_exfat_set_uuid (self ):
208229 """Verify that it is possible to set UUID/volume ID of an exfat file system"""
209230
210- succ = BlockDev .fs_exfat_mkfs (self .loop_devs [0 ])
231+ succ = BlockDev .fs_exfat_mkfs (self .loop_devs [0 ], self . _mkfs_options )
211232 self .assertTrue (succ )
212233
213234 succ = BlockDev .fs_exfat_set_uuid (self .loop_devs [0 ], "0x2E24EC82" )
0 commit comments