fixed unmounting of ESP on error

This commit is contained in:
Florian Schroegendorfer 2024-06-07 00:32:27 +02:00
parent 41398abdcf
commit d622c8064c
Signed by: root
GPG Key ID: 17625E28D4D6E339
3 changed files with 19 additions and 5 deletions

View File

@ -173,11 +173,12 @@ def efi (f):
if f"already mounted on {Kernel.esp}" not in msg: if f"already mounted on {Kernel.esp}" not in msg:
raise RuntimeError(e.stderr.decode().splitlines()[0]) raise RuntimeError(e.stderr.decode().splitlines()[0])
assert Kernel.boot.exists() assert Kernel.boot.exists()
r = f(*args, **kwargs) try:
# umount esp return f(*args, **kwargs)
if mounted: finally:
subprocess.run(["umount", str(Kernel.esp)], check=True) # umount esp
return r if mounted:
subprocess.run(["umount", str(Kernel.esp)], check=True)
return locator return locator
@cli @cli

View File

@ -100,6 +100,15 @@ class Tests (unittest.TestCase):
self.assertEqual(run("-q", "-k", "10"), 0) self.assertEqual(run("-q", "-k", "10"), 0)
self.check_clean(10) self.check_clean(10)
@capture_stdout
def test_clean_umount_on_error (self):
with self.assertRaises(SystemExit):
self.assertEqual(run("-h"), 0)
tracer, (args, kwargs) = self.interceptor.trace[-1]
self.assertEqual(tracer.name, "subprocess.run")
self.assertEqual(args, (["umount", "/tmp"],))
self.assertEqual(kwargs, {"check": True})
@colorless @colorless
@capture_stdout @capture_stdout
def test_clean_dry_run (self): def test_clean_dry_run (self):

View File

@ -82,3 +82,7 @@ class Tests (unittest.TestCase):
with self.assertRaises(SystemExit): with self.assertRaises(SystemExit):
self.assertEqual(run("-s", str(data.latest)), 1) self.assertEqual(run("-s", str(data.latest)), 1)
self.assertRegex(sys.stderr.getvalue(), r"missing.*bzImage") self.assertRegex(sys.stderr.getvalue(), r"missing.*bzImage")
tracer, (args, kwargs) = self.interceptor.trace[-1]
self.assertEqual(tracer.name, "subprocess.run")
self.assertEqual(args, (["umount", "/tmp"],))
self.assertEqual(kwargs, {"check": True})