def _modify_read_only_flag_for(self, source: Subvolume) -> Subvolume: logger = self._logger source_logical_path = source.logical_path try: logger.info( f"Modifying the '{source_logical_path}' snapshot's read-only flag." ) source_filesystem_path_str = str(source.filesystem_path) btrfsutil.set_subvolume_read_only(source_filesystem_path_str, False) except btrfsutil.BtrfsUtilError as e: logger.exception("btrfsutil call failed!") raise SubvolumeError( f"Could not modify the '{source_logical_path}' snapshot's read-only flag!" ) from e return source.as_writable()
def test_read_only(self): for arg in self.path_or_fd(self.mountpoint): with self.subTest(type=type(arg)): btrfsutil.set_subvolume_read_only(arg) self.assertTrue(btrfsutil.get_subvolume_read_only(arg)) self.assertTrue(btrfsutil.subvolume_info(arg).flags & 1) btrfsutil.set_subvolume_read_only(arg, False) self.assertFalse(btrfsutil.get_subvolume_read_only(arg)) self.assertFalse(btrfsutil.subvolume_info(arg).flags & 1) btrfsutil.set_subvolume_read_only(arg, True) self.assertTrue(btrfsutil.get_subvolume_read_only(arg)) self.assertTrue(btrfsutil.subvolume_info(arg).flags & 1) btrfsutil.set_subvolume_read_only(arg, False)